たとえば、単純な定数変数__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
ローカル変数に入れて 2 回読み取られるのを避けることが有益でしょうか。それとも、他のグローバル データとは異なり、変更できないことを考えると、これはコンパイラによって処理されるでしょうか。