Trong trường hợp nào bạn nên sử dụng từ khóa volatile
với bộ nhớ chia sẻ của hạt nhân CUDA? Tôi hiểu rằng volatile
nói với trình biên dịch không bao giờ để cache bất kỳ giá trị, nhưng câu hỏi của tôi là về hành vi với một mảng chia sẻ:Khi nào sử dụng dễ bay hơi với Bộ nhớ CUDA chia sẻ
__shared__ float products[THREADS_PER_ACTION];
// some computation
products[threadIdx.x] = localSum;
// wait for everyone to finish their computation
__syncthreads();
// then a (basic, ugly) reduction:
if (threadIdx.x == 0) {
float globalSum = 0.0f;
for (i = 0; i < THREADS_PER_ACTION; i++)
globalSum += products[i];
}
Tôi có cần products
là dễ bay hơi trong trường hợp này? Mỗi mục nhập mảng chỉ được truy cập bởi một chuỗi duy nhất, ngoại trừ ở cuối, ở đó mọi thứ được đọc theo chủ đề 0. Có thể trình biên dịch có thể lưu toàn bộ mảng hay không và vì vậy tôi cần nó là volatile
hoặc bộ nhớ cache chỉ yếu tố?
Cảm ơn!
Câu trả lời hay, tôi không biết về hàng rào bộ nhớ. Cảm ơn bạn! –