繁体   English   中英

为什么在使用CUDA时使用memset?

[英]Why use memset when using CUDA?

我在CUDA代码示例中看到, memset用于将向量初始化为全0,以存储其他两个向量的和。 例如:

hostRef = (float *)malloc(nBytes);
gpuRef = (float *)malloc(nBytes);    
memset(hostRef, 0, nBytes);
memset(gpuRef, 0, nBytes);

如果对这些向量不做任何其他处理,这有什么目的?

您可以在此处查看代码: https : //books.google.com/books?id=Jgx_BAAAQBAJ&pg=PA42#v=onepage&q&f=false

不知道链接将工作多长时间。

当您使用'malloc'获取内存时,它不一定为空,只有'calloc'会为您将内存清零。 建议出于完整性和调试目的初始化内存。

如果对这些向量不做任何其他处理,将毫无用处,但事实并非如此。

该代码运行CUDA向量和,然后将结果复制到*gpuRef 然后,它在主机CPU上执行相同的总和,并将结果放入*hostRef 最后,它比较了两个结果。

当然,在将新数据复制到其中之前,它不会对任何一个数组执行任何操作,因此将初始化初始化为零仍然没有用。

这是njuffa在评论中给出的答案:

... GPU内存的内容在应用程序的调用之间不会改变。 如果程序失败,我们将希望避免从前一次运行中获得良好的数据,这可能导致(错误地)认为程序执行良好。 我在现实生活中已经看到过这样的情况,这对受影响的程序员非常困惑。 因此,最好将结果数据初始化为一个已知值,尽管我会选择0xff而不是0,因为这对应于浮点数据的NaN模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM