-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提供了一个专门针对这种情况的投票 - 关闭原因。 –