[问题] CUDA 程式

楼主: goodzey (--)   2023-05-18 23:38:56
不知道有没有高手可以解答以下问题?
资料形式: 600列800行的随机数
目的: 把每一行的数据加起来
初始化:
sum[600]={0.0}
data[600x800]= 上述资料
CUDA程式1: 成功
// dim3 gridsize(1, 1, 1);
// dim3 blocksize(600, 1, 1);
for (int j = 0; j < 800; j+= 1){
sum[(blockDim.x*bdx + tdx)] = sum[(blockDim.x*bdx + tdx)]
+ data[600*j + (blockDim.x*bdx +tdx)];
}
CUDA程式2: 失败
// dim3 gridsize(40, 1, 1);
// dim3 blocksize(600, 1, 1);
for (int j = 0; j < 800; j+= 40){
sum[0*(j + bdx) +tdx] = sum[0*(j + bdx) +tdx]
+ data[600*(j + bdx) +tdx];
}
请问程式2失败的原因是?可以怎么写呢?
我自己猜测是: 例如, sum[1]无法同时处理40笔资料
请教大家, 谢谢
楼主: goodzey (--)   2023-05-18 23:41:00
抱歉, 资料形式: 800列600行的随机数目的: 把每一列的数据加起来int bdx = blockIdx.x; int tdx = threadIdx.x;
作者: ManOfSteel (Man Of Steel)   2023-05-19 00:07:00
每一行600个数据,对吗?然后600个数据相加?喔,我懂了,是800个数据相加XDdata[600*(j + bdx) +tdx] access资料会超出边界吧?blockidx最大不是可以到39?
作者: celestialgod (天)   2023-05-19 00:43:00
要不要考虑用cuda blas可能比较快cublasSgemv具体例子可以问chatGPT
作者: etgood1478 (Number2)   2023-05-19 02:33:00
为什么不用reduction
作者: johnjohnlin (嗯?)   2023-05-19 19:13:00
atomic add
楼主: goodzey (--)   2023-05-23 22:05:00
实验结果: main func中用cublasSdot作很慢(时间需100倍)在__global__ 中用cublasSdot难编译 (makefile需修正)在我用的.cu程式(ubuntu环境)好像没办法用std::函式
作者: mikemike1021 (mike)   2023-05-25 04:58:00
错误的原因应该是 race condition,有叙述在论坛内无广告 https://forum.community.tw/t/topic/525欢迎大家多多利用来交流
作者: amike (没有影子的猫)   2023-05-25 13:38:00
threads从600改成15
楼主: goodzey (--)   2023-05-26 23:10:00
thanks!!

Links booklink

Contact Us: admin [ a t ] ucptt.com