2012-11-03 27 views
3

我想在CUDA中聲明全局設備變量的對齊方式。具體地講,我有一個字符串聲明,像 __device__ char str1 = "some pre-defined string"; 在正常GCC,我可以從編譯器請求作爲對準 __device__ char str1 __attribute__ ((aligned (4))) = "some pre-defined string";如何在CUDA中指定全局設備變量的對齊方式

然而,當我試圖此上NVCC,編譯器會忽略這些請求。我想這樣做的原因是將這些字符串複製到我的內核中的緩衝區中,並且一次複製字比一次複製字節要快得多,儘管它們需要對齊src字符串。任何人都可以請告訴我如何請求從nvcc編譯器對齊?

回答

5

見第5.3.2節「大小和對齊要求」該「CUDA C編程指南」,它可以發現here的:

對齊要求自動滿足的內建類型的炭,短,int,long,longlong,float,float2或float4。

對於結構體,大小和對齊要求可以由編譯器使用對齊說明符__align__(8)__align__(16)來強制執行。

用法示例:

struct __align__(8) { 
    float r; 
    float i; 
} complex_num; 
+0

謝謝。這樣可行。我檢查了NVCC編譯器指南,尋找那裏提到的東西。我也應該檢查C編程指南。 – fall3nm0nk

1

您可以檢查工作的嗎?

__device__ char __align__(4) str1 = "some pre-defined string"; 
+0

感謝您的快速響應。這是我第一次在StackOverflow上尋求幫助,我一定會在未來使用它作爲資源。 – fall3nm0nk