У нас есть файл неструктурированной тетраэдрической сетки, содержащий следующий формат:
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);
Кто-нибудь может мне помочь?