說我想從全局內存加載一個短陣列到共享內存。我不確定在這裏如何合作。在最佳實踐指南中,它表示在計算能力爲1.0或1.1的設備上,半扭曲中的第k個線程必須訪問與被訪問的元素的大小相對應的16倍的段中的第k個字。coalesced讀短整數cuda
如果我理解正確,如果我將數據分解爲32字節(16個短)段,線程ID爲0,16,32 ...必須訪問每個段的第一個元素?我需要考慮64bytes對齊還是128字節對齊?我有一個gts 250,所以我想這很重要。建議歡迎。謝謝。
說我想從全局內存加載一個短陣列到共享內存。我不確定在這裏如何合作。在最佳實踐指南中,它表示在計算能力爲1.0或1.1的設備上,半扭曲中的第k個線程必須訪問與被訪問的元素的大小相對應的16倍的段中的第k個字。coalesced讀短整數cuda
如果我理解正確,如果我將數據分解爲32字節(16個短)段,線程ID爲0,16,32 ...必須訪問每個段的第一個元素?我需要考慮64bytes對齊還是128字節對齊?我有一個gts 250,所以我想這很重要。建議歡迎。謝謝。
據的CUDA Programming Guideshort
科G.3.2.1不會在計算能力1.0和下1.1設備的任何情況聚結。具體地說,它指出:
由 線程訪問的字的大小必須是4,8或16個字節
可以然而使用矢量類型,如short2
,short4
,或甚至short8
獲得聯合訪問。這些類型的合併規則也在第G.3.2.1節中詳細說明。但是,就整合而言,short2
就像是32位的int
。
FWIW,具有計算能力1.3或更高處理類型的設備,如char
和short
好得多。在1.3設備上讀取char
s可能會給出高達〜60%的峯值內存帶寬,而1.0或1.1設備上的峯值內存帶寬將高達〜10%。