[英]CUDA 6.5 (Cap 1.1) cudaMemcpy array of structs results in “invalid argument”
[英]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
而我希望cudaSuccess
和6.000000e+00
。
您不能將cudaMemcpy
直接與__device__
變量一起使用。 正確使用的API是cudaMemcpyTo/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.