我是CUDA編程的新手,並且由於性能原因,我主要使用每塊的共享內存。我的程序現在的結構是這樣的,我使用一個內核來加載共享內存和另一個內核來讀取預加載的共享內存。但據我所知,共享內存不能在兩個不同的內核之間持續存在。持久GPU共享內存
我有兩個解決方案;我不確定第一個,第二個可能會很慢。
第一個解決方案:我使用的是一個內核,而不是使用兩個內核。加載共享內存後,內核可能會等待來自主機的輸入,然後執行該操作,然後將該值返回給主機。我不確定內核是否可以等待來自主機的信號。
第二種解決方案:加載共享內存後,將共享內存值複製到全局內存中。當下一個內核啓動時,將全局內存中的值複製回共享內存,然後執行操作。
請評論兩種解決方案的可行性。
爲什麼啓動內核後需要等待主機輸入? – pQB
這聽起來像你可能試圖將共享內存壓縮到一個並非真正意義上的用法。如果您的目標是計算能力> = 2.0的設備,我會說,首先不要擔心使用共享內存。相反,使用'cudaFuncSetCacheConfig(MyKernel,cudaFuncCachePreferL1)'設置L1緩存的首選項。當您的算法運行時,在CUDA分析器中運行您的應用程序並檢查它是否受內存限制。如果是內存綁定,那麼考慮是否有任何方法可以通過使用共享內存或更有效地使用L1來提高性能。 –