验证NVIDIA __shared__内存是在存在缓存指令时使用的

时间:2014-12-18 08:39:51

标签: cuda openacc

我正在使用PGI 14.10试验OpenACC的缓存子句。我有一个基于[1]幻灯片中的简单循环:

#include <stdlib.h>

int main(int argc, char **argv) {
    int N = 1024;
    int *restrict x = (int *)malloc(sizeof(int) * N);
    int *restrict y = (int *)malloc(sizeof(int) * N);

#pragma acc parallel loop copy(x[0:N], y[0:N])
    for (int i = 1; i < N - 1; i++) {
#pragma acc cache(x[i-1:2])
        y[i] = (x[i - 1] + x[i + 1]) / 2.0;
    }
    return 0;
}

当我使用--metrics shared_load_transactions在nvprof下运行它时,shared_store_transactions它报告没有加载或存储。那么缓存指令没有我想要的效果(如果是这样,为什么它不起作用)?或者使用nvprof来测量共享事务是否错误?

Minfo输出低于。

[1] http://www.pgroup.com/lit/presentations/cea-3.pdf

main:
      6, Generating copy(x[:N])
         Generating copy(y[:N])
         Accelerator kernel generated
          9, #pragma acc loop gang, vector(256) /* blockIdx.x threadIdx.x */
      6, Generating Tesla code

1 个答案:

答案 0 :(得分:3)

在PGI论坛上回答:http://www.pgroup.com/userforum/viewtopic.php?t=4611&start=0&postdays=0&postorder=asc&highlight=

显然,在PGI 14.x编译器上几乎完全禁用了缓存指令,但将在2015版本中提供。