【发布时间】:2011-11-28 08:12:35
【问题描述】:
我们有一个包含以下格式的非结构化四面体网格文件:
element-ID nod1 nod2 nod3 nod4
1 452 3434 322 9000
2 2322 837 6673 2323
.
.
.
300000
我们对上述网格进行了分区,每个分区大小为 2048。 对于 2048 的每个分区大小包含唯一的 nod1 nod2 nod3 nod4 值,我们在不同的起始索引处传递 1 个块和 512 个线程。
在一个 cuda 文件中,我们有
__global__ void calc(double d_ax,int *nod1,int *node2,int *nod3,int *nod4,int start,int size)
{
int n1,n2,n3,n4;
int i = blockIdx.x * blockDim.x + threadIdx.x + start;
if ( i < size )
{
n1=nod1[i];
n2=nod2[i];
n3=nod3[i];
n4=nod4[i];
ax[n1] += some code;
ax[n2] += some code;
ax[n3] += some code;
ax[n4] += some code;
}
}
我们称内核为
calc<<<1,512>>>(d_ax,....,0,512);
calc<<<1,512>>>(d_ax,....,512,512);
calc<<<1,512>>>(d_ax,....,1024,512);
calc<<<1,512>>>(d_ax,....1536,512);
上面的代码运行良好,但问题是我们一次使用多个块得到不同的结果。例如:
calc<<<2,512>>>(d_ax,....,0,1024);
calc<<<2,512>>>(d_ax,....,1024,1024);
谁能帮帮我?
【问题讨论】:
-
你能编辑问题来解释为什么你不能使用更多的一个块吗?虽然您可以修复问题中的所有代码 - 它是如此不完整且充满错误,您可能还没有发布它,这对任何试图回答的人都没有帮助你的问题
-
我已经投票决定关闭这个问题,因为它过于本地化。看起来您的问题是由于基本的编程错误和/或完全缺乏对 CUDA 基础知识的理解。这类问题不属于stackoverflow。