OpenCl:使用全局内存和私有内存的速度比较

时间:2017-12-07 03:52:00

标签: opencl

我正在学习OpenCl并且我偶然发现了这两个代码片段,现在我想知道为什么使用私有内存要比使用全局内存快得多。

kernel void mmul(
   const int N,
   global float* A,
   global float* B,
   global float* C)
 {
     int k, j;
     int i = get_global_id(0);
     float tmp;
     if (i < N) {
         for (j = 0; j < N; j++) {
             tmp = 0.0f;
             for (k = 0; k < N; k++)
                 tmp += A[i*N+k] * B[k*N+j];
             C[i*N+j] = tmp;
         }
     }
 }

之间

kernel void mmul(
   const int N,
   global float* A,
   global float* B,
   global float* C)
 {
     int k, j;
     int i = get_global_id(0);
     float Awrk[2048];
     float tmp;
     if (i < N) {
         for (k = 0; k < N; k++)
             Awrk[k] = A[i*N+k];

         for (j = 0; j < N; j++) {
             tmp = 0.0;
             for (k = 0; k < N; k++)
                 tmp += Awrk[k] * B[k*N+j];
             C[i*N+j] = tmp;
         }
     }
 }

在底部代码片段中,代码分配一个内存,Awrk [2048],并从全局浮动A中复制数据,我认为这是浪费操作。但是,底部代码比顶部代码(大约14秒)快得多(4.27秒)。那是为什么?

谢谢。

0 个答案:

没有答案