簡體   English   中英

CUDA cudaMemcpy“無效的論點”

[英]Cuda cudaMemcpy “invalid argument”

嘗試調試更大的應用程序時,我似乎無法將值從主機復制到設備上,這是一個問題。 我在下面提供了一個最小的示例, 我認為應該將6復制到設備上,然后再復制回去。

#include <stdio.h>
__device__ float a_d;

main(){
    float a = 6.0;
    float b;
    puts(cudaGetErrorString(cudaMemcpy(&a_d,&a,sizeof(float),cudaMemcpyHostToDevice)));
    puts(cudaGetErrorString(cudaMemcpy(&b,&a_d,sizeof(float),cudaMemcpyDeviceToHost)));
    printf("%e",b);
}

我在64位Linux上使用CUDA 5.5獲得以下輸出。

$ nvcc test.cu -run
invalid argument
invalid argument
0.000000e+00

而我希望cudaSuccess6.000000e+00

您不能將cudaMemcpy直接與__device__變量一起使用。 正確使用的APIcudaMemcpyTo/FromSymbol

以下應該工作:

#include <stdio.h>
__device__ float a_d;

main(){
    float a = 6.0;
    float b;
    puts(cudaGetErrorString(cudaMemcpyToSymbol(a_d,&a,sizeof(float)));
    puts(cudaGetErrorString(cudaMemcpyFromSymbol(&b,a_d,sizeof(float)));
    printf("%e",b);
}

目前尚不清楚為什么會期望0.000000e+00 根據您的代碼,我期望6.000000e+00或類似的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM