【发布时间】:2012-01-04 07:05:05
【问题描述】:
我有这样的事情:
__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,所以我希望看到更新的值。我做错了什么?我是在读取缓存还是什么?
【问题讨论】:
-
__syncthreads 是块级同步原语,而不是网格级。根据您最后几个问题,您似乎应该花点时间阅读 CUDA 文档。
-
好的,所以无法阅读?
-
@sidyll:CUDA 是 C。留下 C 标签。
标签: cuda