【问题标题】:different thread blocks definition不同的线程块定义
【发布时间】:2013-01-10 22:27:01
【问题描述】:

在 VS 2010 上测试代码时,我使用 matlab 中的 PTX 调用 CUDA 内核,如下所示:

int TPB = 256; 
int BPG = (Nx + TPB -1 ) / TPB;
dim3 blk(TPB,TPB,1);
dim3 grid(BPG ,BPG,1);
grad<<< grid,blk>>>(dev_y,dev_x,dev_b,dev_t,Nx,Ny);

尝试在matlab中使用相同的配置

TPB = 16; 
BPG = floor((Nx + TPB -1 ) / TPB);
grad = parallel.gpu.CUDAKernel('reg.ptx','reg.cu','grad');
grad.ThreadBlockSize=[TPB TPB 1];
grad.GridSize = [BPG BPG];

知道每个块有超过 512 个线程,这是我的 TESLA C1060 允许的数量,我是对的

Invalid size input to kernel ThreadBlockSize. You must provide a vector of up to 3 positive   integers whose product is <= 512. The maximum value in each dimension is: [512,512,64].

任何解释为什么它在 VS 2010 上正确运行而没有像 MATLAB 中发生的错误?

【问题讨论】:

  • 顶部的 C++ 版本不可能运行,您要求的块大小为 256x256。 Matlab 和 C++ 版本根本不一样。
  • 另外,对CUDAkernel 的调用必须包含“在 PTX 文件中明确定义适当内核条目名称的字符串”。我非常非常怀疑内核在 PTX 文件中被标识为“grad”....
  • C++ 代码段在毕业后没有检查错误>>。 MATLAB 包装器具有额外的错误检查。顶部代码段将在 >> 中生成错误,您可以使用 cudaGetLastError 查询。
  • @pyCuda:你打算对这个问题做点什么,还是已经放弃了?
  • 我给@GregSmith +1 了他的评论,但我不确定这是正确的吗?

标签: matlab cuda gpu


【解决方案1】:

C++ 代码段在毕业后不检查错误>>。 MATLAB 包装器具有额外的错误检查。启动配置超出范围。在>>之后调用cudaGetLastError会报启动配置错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2018-04-25
    相关资源
    最近更新 更多