内存,显存操作

这段代码,没有i用到kernel函数,只是分配内存等操作,结果显示:0.000000,iz=0,ix=0
-1.#QNAN0,iz=0,ix=1
-1.#QNAN0,iz=0,ix=2
-1.#QNAN0,iz=0,ix=3
-1.#QNAN0,iz=0,ix=4
-1.#QNAN0,iz=0,ix=5
-1.#QNAN0,iz=0,ix=6
-1.#QNAN0,iz=0,ix=7
-1.#QNAN0,iz=0,ix=8
-1.#QNAN0,iz=0,ix=9
-1.#QNAN0,iz=1,ix=0
-1.#QNAN0,iz=1,ix=1
-1.#QNAN0,iz=1,ix=2

。。。。。。。。。
是怎么回事呢?还有屏蔽的那句cudamemset函数是可以对其清0的对嘛

#include <stdio.h>
#include <cuda_runtime.h>
#define Nx 10
#define Nz 4        

int main()
{
   float *CPU_V;
   CPU_V=(float*)malloc(Nx*Nz*sizeof(float));

   float *GPU_V;
   cudaMalloc((void**)&GPU_V,Nx*Nz*sizeof(float));
   //cudaMemset((void**)&GPU_V,0,Nx*Nz*sizeof(float));
   cudaMemcpy(CPU_V,GPU_V,Nx*Nz*sizeof(float),cudaMemcpyDeviceToHost);

   for (int iz=0;iz<Nz;iz++)
   {        
   for (int ix=0;ix<Nx;ix++)
   {        

   printf("%f,iz=%d,ix=%d\n",CPU_V[iz*Nx+ix],iz,ix);

   }
   }

   return 0;
}

LZ您好:

您cudaMalloc()的一段显存空间是没有初始化的,您将一段没有初始化的显存空间的内容copy回来,这是无意义的。

请您理解。

祝您好运~

斑竹您好,
cudaMemset((void**)&GPU_V,0,NxNzsizeof(float));这个语句是不是相当与初始化为0了?
那加上这一句也是一样的结果呢怎么

LZ您好:

您1#提供的代码中,这一句是注释掉的。

以及如果您去掉注释,请重新编译。

如果去掉注释且重新编译的还是如此,请检查一下前面的API函数是否正确执行了。

如果API函数也正确执行了,那我也无法解释了。

大致如此,祝您好运~

LZ您好:

刚刚发现您这个cudaMemset()的参数是错误的,请您更正。

之前未能看出,深表歉意。

祝您好运~

好像是,我看返回值说invalid argument,这是为什么呢??难道不能用来置0吗

LZ您好:

请立即改为:cudaMemset(GPU_V,0,NxNzsizeof(float));可保无烦恼~

请立即尝试吧~

祝您好运!

:'(晕,查了查手册,确实是,多谢版主了

不客气的,欢迎常来哦~