Синхронизация CUDA и чтение глобальной памяти

У меня что-то вроде этого:

__global__ void globFunction(int *arr, int N) {
    int idx = blockIdx.x* blockDim.x+ threadIdx.x;
    // calculating and Writing results to arr ...
    __syncthreads();
    // reading values of another threads(ex i+1)
    int val = arr[idx+1]; // IT IS GIVING OLD VALUE
}


int main() {
    // declare array, alloc memory, copy memory, etc.
    globFunction<<< 4000, 256>>>(arr, N); 
    // do something ...
    return 0;
}

Почему я получаю старое значение, когда читаю arr [idx + 1] ? Я вызвал __ syncthreads , поэтому ожидаю увидеть обновленное значение. Что я сделал не так? Я читаю кеш или что?

5
задан aland 24 November 2011 в 11:20
поделиться