我們有含有以下格式的非結構化四面體網格文件:CUDA內核有限元裝配
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);
任何人都可以幫助我嗎?
你能編輯問題來解釋*爲什麼*你不能多用一個塊嗎?雖然你在這可以修復你的問題中的所有*代碼 - 它是如此不完整和充滿錯誤,你可能還沒有發佈它,這對任何試圖回答你的問題的人都沒有幫助 – talonmies
我有投票決定讓這個問題關閉太過本地化。看起來您的問題是由於基本的編程錯誤和/或對CUDA的基本知識完全缺乏瞭解。這類問題不屬於計算器。 – talonmies