例如,如果你有一個簡單的常數變量__device__ __constant__ int MY_CONSTANT;
,它是由相同的內核線程多次訪問:有沒有性能優勢,以複製CUDA C __constant__變量本地內存
__global__ void move(int* dataA, int* dataB, int* dataC){
...
dataB[threadID] = dataA[threadID] * MY_CONSTANT;
dataC[threadID] = dataA[[threadID] * dataB[threadID] % MY_CONSTANT;
...
}
我可以看到,將局部變量/寄存器中的值dataA[threadID]
和dataA[threadID] * MY_CONSTANT
存儲起來以避免不必要的全局讀取會是有益的。忽略這一點,將MY_CONSTANT
的值放置在局部變量中以避免它被讀取兩次,或者編譯器會處理這個值,因爲它不能改變,這與其他全局數據不同。
謝謝。我會試一試。我懷疑它會對上面的例子沒什麼影響,但是如果緩存被更多地使用,它可能會用更復雜的內核。 – Jools