簡體   English   中英

關於對齊的3個問題

[英]3 questions about alignment

討論僅限於計算能力2.x

問題1

curandState的大小為48個字節(由sizeof()測量)。 分配curandStates數組時,是否以某種方式填充了每個元素(例如,填充為64個字節)? 還是它們只是連續地放在內存中?

問題2

結構傳遞給CUDA內核的操作指出,“不需要對齊部分”。 但是如果不對齊,對該結構的訪問將分為對a和b的兩個連續訪問。 對?

問題3

struct
{
    double x, y, z;
}Position

假設每個線程都在訪問上面的結構:

int globalThreadID=blockIdx.x*blockDim.x+threadIdx.x;
Position positionRegister=positionGlobal[globalThreadID];

為了優化內存訪問,我是否應該簡單地使用三個單獨的雙變量x,y,z替換結構?

謝謝你的時間!

(1)它們連續地放在內存中。

(2)如果數組在全局內存中,則每個內存事務為128字節,對齊為128字節。 僅當ab恰好跨越128字節邊界時,您才獲得兩個事務。

(3)通常可以通過使用數組結構而不是結構數組來提高性能。 這意味着您將所有x打包在一起,然后是y ,依此類推。 當您查看經線中的所有32個線程到達需要x的點時會發生什么,這很有意義。 通過將所有值打包在一起,可以使用盡可能少的事務為扭曲中的所有線程提供服務。 由於全局內存事務為128字節,因此,如果該值是32位字,則單個事務可以為所有線程提供服務。 您提供的代碼示例可能會導致編譯器將值保留在寄存器中,直到需要它們為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM