[英]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.