我最近開始學習OpenCL,並對OpenCL中緩存與內核之間的交互提出了疑問。我正在編寫一個程序來測量訪問主內存的延遲(繞過緩存)因此,我想知道在內核執行完成後緩存是否自動清除,或者它會保留並在重複執行同一內核時使用? 謝謝!重複啓動同一內核時緩存會如何影響
1
A
回答
0
在OpenCL存儲器層次結構中,沒有「緩存」(就CPU而言)。在OpenCL中有不同類型的記憶,你可以用一些指令來控制。在這裏,你可以對我的意思一看:
最快的存儲器是專用存儲器和本地存儲器。你可以在這個內存空間中聲明變量並控制它們,並以你喜歡的方式移動它們。您應該小心,因爲在本地內存中,您可以在「塊」之間共享數據,並且只有線程才能看到Privite中的數據。 Here你可以找到很多其他的信息。 所以,如果你反覆運行一個內核,你可以將你的變量存儲在你喜歡的內存中,並且你會注意到,如果這些變量在私有內存中,那麼與其他解決方案相比,它將會非常快速。
1
對於AMD Radeon GCN,L1和L2高速緩存在所有內核和所有不同的內核之間持續存在。內核可以使用來自任何其他內核的緩存數據。此外,計算單元內的本地內存在內核運行之間(更確切地說,在工作組運行之間)不會被清除/歸零。這意味着你必須初始化局部變量。這同樣適用於nVidia/CUDA設備和通用SIMD CPU。這就是說,OpenCL並不知道或定義不同級別的緩存,緩存是供應商特定的。處理或管理緩存的任何功能都是特定於供應商的擴展。
要測試延遲,請在內核中使用僞隨機數生成器,並讀取隨機存儲器地址。使用2個內核,第1個內核會污染所有緩存,第2個會執行實際的延遲測量。
相關問題
- 1. 緩存如何影響內存消耗?
- 2. 內存緩存absoluteExpiration - 這會影響內存緩存中的所有條目嗎?
- 3. nFast服務重新啓動時不會影響應用程序
- 4. URL格式會影響性能/緩存?
- 5. Docker --rm = true是否會影響緩存?
- 6. 內容部署對緩存的影響
- 7. 緩存/未緩存的內存mmap:對Neon的影響
- 8. 如何在同一意圖重新啓動活動時避免重複處理
- 9. 重複行如何影響決策樹?
- 10. 如果內核太短會否影響性能?
- 11. 是否重複使用Android Shared Preference存儲會影響性能?
- 12. 什麼因素影響動態並行內核啓動的開銷?
- 13. 操作系統和驅動程序如何影響OpenCL內核時序?
- 14. Ipython內核重啓
- 15. 如何影響堆內存的大小?
- 16. Symfony響應緩存控制頭重複
- 17. 如何判斷一個內核模塊被稱爲同時啓動
- 18. 是否會自動啓動緩存rdds?
- 19. GeoServer:重新投影時緩存失敗
- 20. CUDA內核和內存訪問(一個內核不能完全執行,下一個不會啓動)
- 21. 操作碼緩存對內存使用量的影響
- 22. 內存中後綴對緩存操作的影響
- 23. 定時Linux內核啓動時優化
- 24. 內核不啓動?
- 25. 在內核啓動時分配(靜態地)內存
- 26. Linux先發制人的內核影響?
- 27. 爲每次啓動重複運行CUDA內核
- 28. OpenCL:防止內核緩存
- 29. 如何影響一個div的內容
- 30. 核心間緩存同步
這取決於實施;這當然不是由OpenCL規範指定的。我無法想象在內核調用之間清除內存緩存的任何價值,所以我會認爲它不是。 – Dithermaster