簡體   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