GPU缓存和Atomics OpenCL

时间:2016-04-13 07:07:32

标签: c++ caching opencl gpu nvidia

我想知道GPU缓存是如何工作的,以及原子操作如何处理全局数据(例如在新的Nvidia Maxwell架构上)。 假设我有以下代码片段(假设多个线程正在读取和写入包含D [u]和D [v]的缓存行):

__global float* D

(*(float*)a = D[u];
(*(float*)b = D[v] + c;         //where c is some arbitrary value

while ((readback = atomic_cmpxchg((__global uint*)D[u], a, b)) != a)
{
  a = readback;                 //read both again on a failue
  (*(float*)b = D[v] + c;
}

现在如果某个其他线程写入D [u],则compare和swap将失败,我们必须通过读取D [u]的更新值来重试。但是,在传统的CPU多核中,我们知道如果其他一些线程写入D [v],底层高速缓存一致性会将D [v]的新值带到该线程。

然而,GPU不会遵循这种类型的一致性,如果他们想要阅读,那么这些写入必须对所有线程都是可见的。关于如何在GPU中工作的任何想法(如果其他线程写入D [v]并且我们没有在atomic_cmpxchg中失败)?

由于

0 个答案:

没有答案