先上图片:
[attach]3088[/attach]
这里面描述result可以是host或device属性。于是我尝试将计算结果存在device上,方便后续程序调用。
但是,我测试的时候发现,应用device变量的时候,程序能正常编译,但执行出错。
(host变量的话,正确运行)
程序代码如下:
#include<stdio.h>
#include<cuda_runtime.h>
#include<cublas_v2.h>
#define _DEVICE //choose host or device variable
int main(){
float *A,*dA,num=0.0f,*dnum;
int m=256*1024;
cublasHandle_t handle;
A=(float *)malloc(m*2*sizeof(float));
cudaMalloc((void **)&dA,2*m*sizeof(float));
cudaMalloc((void **)&dnum,sizeof(float));
for(int i=0;i<2*m;i++)
A[i]=0.123f*i;
cudaMemcpy(dA,A,2*m*sizeof(float),cudaMemcpyHostToDevice);
cublasCreate(&handle);
#ifdef _DEVICE
cublasSnrm2(handle,2*m,dA,1,dnum);//use device variable dnum
cudaMemcpy(&num,dnum,sizeof(float),cudaMemcpyDeviceToHost);//copy device variable to host
#else
cublasSnrm2(handle,2*m,dA,1,&num);//use host variable num
#endif
cublasDestroy(handle);
cudaFree(dA);
cudaFree(dnum);
free(A);
printf("float :: %f\n",num);
cudaDeviceReset();
return 0;
}
不知道是cublas库中有bug还是我用法错误了?