我有一個需要使用全局內存的CUDA(v5.5)應用程序。理想情況下,我寧願使用常量內存,但我已經耗盡了常量內存,並且溢出將不得不放置在全局內存中。我還有一些需要偶爾寫入的變量(在對GPU進行一些簡化操作之後),我將它放在全局內存中。全局內存與CUDA中的動態全局內存分配
對於閱讀,我將以簡單的方式訪問全局內存。我的內核在for循環中被調用,並且在每次內核調用時,每個線程都將訪問完全相同的全局內存地址,且無偏移量。對於編寫而言,在每次調用內核之後,都會在GPU上執行縮減操作,並且必須在循環的下一次迭代之前將結果寫入全局內存。然而,在我的應用程序中寫入全局內存的讀取次數要多得多。
我的問題是使用全局(變量)作用域中聲明的全局內存使用動態分配的全局內存是否有任何優勢?我需要的全局內存量將根據應用程序而改變,因此動態分配會更好。我知道我的全局內存使用的上限,但我更關心性能,所以我也可以使用大的固定分配靜態地聲明內存,我肯定不會溢出。考慮到性能,是否有理由更喜歡一種形式的全局內存分配?它們是否存在於GPU上相同的物理位置,並且是以相同方式緩存的,還是兩種形式的讀取代價不同?
謝謝,這完全回答了我有問題,還有一些我甚至沒有問過。 –