CUDA内核和长向量

4视图(30天)
拉斐尔
拉斐尔 2013年2月22日
你好!
目前我正在写我的第一个程序与MATLAB和Cuda。我写一个内核在.cu文件,编译ptx和执行一个函数宏指令函数。
[dResultGPU] =函数宏指令(k_calc、dResultGPU g_x, g_y,在线,nColumns);
我有ThreadBlockSize 1024的最大gridsize (65535 65535)。
到目前为止,一切工作正常,但是我有一些麻烦与索引在我的内核。
当我想添加向量长度为10 e7我无法得到正确的索引的内核。
我在m文件设置我的网格大小
nBlocks =装天花板(nPoints / k_calc.ThreadBlockSize (1));
如果nBlocks < = 65535
k_calc。GridSize = nBlocks;
其他的
k_calc。GridSize =[65535装天花板(nBlocks / 65535)];
结束
在我的示例与向量10 e7元素,10 e7大于65535 * 1024,所以我有gridsize (65535 2)。
在我cu-kernel我试着索引
intidx = blockDim。x * blockIdx。x + threadIdx.x;
但这是错误的元素与指数大于65535 * 1024。cuda-variable告诉我在我网格的行吗?
gridDim。x只给我尺寸不据我所知目前的位置。
非常感谢,拉斐尔

答案(1)

本Tordoff
本Tordoff 2013年2月26日
编辑:本Tordoff 2013年2月26日
如果你想去“x”维度首先,你可能想要的
intconst globalBlockIdx = blockIdx。y * gridDim。x + blockIdx.x;
intconst globalThreadIdx = globalBlockIdx * blockDim。x + threadIdx.x;
或类似的东西。这里假定只有2 d网格和块只有1 d。

类别

找到更多的在开始使用GPU编码器帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!