-1
我寫了一個函數swap
來方便地交換設備數組指針,但它不工作,我假設我交換交換功能中的本地數組指針,而不是我傳遞給它的那些指針。CUDA - 如何交換設備數組指針?
__global__ void device_add_one(float *A, float *B)
{
for (int index = blockIdx.x * blockDim.x + threadIdx.x;
index < N;
index += blockDim.x * gridDim.x)
{
// just for the example
B[index] = A[index] + 1;
{
}
void swap(float *a, float *b)
{
float *temp = a;
a = b;
b = temp;
}
void loop(float *host_array, int size, int loops)
{
cudaMalloc(&A, (size * sizeof(float));
cudaMalloc(&B, (size * sizeof(float));
cudaMemcpy(A, host_array, (size * sizeof(float), cudaMemcpyHostToDevice);
for (int i = 0; i < loops; i++) {
device_add_one<<< 1, 254 >>>(A, B);
// swap pointers like this does not work
swap(A, B);
/* This works:
float *temp = a;
a = b;
b = temp;
*/
}
cudaMemcpy(host_array, A, (size * sizeof(float), cudaMemcpyDeviceToHost);
}
你的第一種方法會奏效。 [這裏](https://stackoverflow.com/questions/43482463/cuda-program-not-working-as-fast-as-expected/43485665#43485665)就是一個例子,還有其他的例子。你沒有展示完整的代碼,也沒有解釋爲什麼你認爲它不工作,所以不知道這裏說什麼。當你說什麼不起作用時,你應該[提供](https://stackoverflow.com/help/on-topic)[mcve]。 –
從目前看來,當前的解決方案(交換循環中的指針)*應該工作 - 它在哪種方式下不工作? – Marco13
您發佈的代碼有各種語法錯誤。你無法編譯該代碼。如果各種語法錯誤是固定的,並且根據需要提供了適當的'main'函數和其他定義,那麼根據我的測試,您顯示的代碼工作正常。在這種狀態下,這個問題幾乎是無法回答的,SO提供了一個專門針對這種情況的投票 - 關閉原因。 –