例如,如果您有一个简单的常量变量__device__ __constant__ int MY_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
放在局部变量中以避免它被读取两次是否有益,或者这将由编译器处理,因为它与其他全局数据不同,它不能更改。