这个内核正在做正确的事情,给了我正确的结果。如果我想提高性能,我的问题更多在于 while 循环的正确性。我尝试了几种块和线程的配置,但如果我要更改它们,while 循环不会给我正确的结果。我在更改内核配置时获得的结果是 firstArray 和 secondArray 不会被完全填充(它们在单元格内将有 0)。两个数组都必须用从if 循环中获得的 curValue 填充。
欢迎任何建议:)
先感谢您
#define N 65536
__global__ void whileLoop(int* firstArray_device, int* secondArray_device)
{
int curValue = 0;
int curIndex = 1;
int i = (threadIdx.x)+2;
while(i < N) {
if (i % curIndex == 0) {
curValue = curValue + curIndex;
curIndex *= 2;
}
firstArray_device[i] = curValue;
secondArray_device[i] = curValue;
i += blockDim.x * gridDim.x;
}
}
int main(){
firstArray_host[0] = 0;
firstArray_host[1] = 1;
secondArray_host[0] = 0;
secondArray_host[1] = 1;
// memory allocation + copy on GPU
// definition number of blocks and threads
dim3 dimBlock(1, 1);
dim3 dimGrid(1, 1);
whileLoop<<<dimGrid, dimBlock>>>(firstArray_device, secondArray_device);
// copy back to CPU + free memory
}