2010-10-19 35 views
0

說我想從全局內存加載一個短陣列到共享內存。我不確定在這裏如何合作。在最佳實踐指南中,它表示在計算能力爲1.0或1.1的設備上,半扭曲中的第k個線程必須訪問與被訪問的元素的大小相對應的16倍的段中的第k個字。coalesced讀短整數cuda

如果我理解正確,如果我將數據分解爲32字節(16個短)段,線程ID爲0,16,32 ...必須訪問每個段的第一個元素?我需要考慮64bytes對齊還是128字節對齊?我有一個gts 250,所以我想這很重要。建議歡迎。謝謝。

回答

2

據的CUDA Programming Guideshort科G.3.2.1不會在計算能力1.0和下1.1設備的任何情況聚結。具體地說,它指出:

由 線程訪問的字的大小必須是4,8或16個字節

可以然而使用矢量類型,如short2short4,或甚至short8獲得聯合訪問。這些類型的合併規則也在第G.3.2.1節中詳細說明。但是,就整合而言,short2就像是32位的int

FWIW,具有計算能力1.3或更高處理類型的設備,如charshort好得多。在1.3設備上讀取char s可能會給出高達〜60%的峯值內存帶寬,而1.0或1.1設備上的峯值內存帶寬將高達〜10%。