0

我正在测试是否可以在 OpenACC 计算区域中使用 GSL 函数。在 Main.c 我尝试使用 GSL 函数的以下(愚蠢的)循环,

#pragma acc kernels
for(int i=0; i<100; i++){
    gsl_matrix *C = gsl_matrix_calloc(10, 10);
    gsl_matrix_free(C);
}

它为 10x10 的零矩阵分配内存,然后释放内存 100 次。但是,当我编译时,

pgcc -pg -fast -acc -Minfo=all,intensity -lgsl -lgslcblas -lm -o Main Main.c

我收到以下消息,

PGC-S-0155-Procedures called in a compute region must have acc routine information: gsl_matrix_calloc (Main.c: 60)
PGC-S-0155-Accelerator region ignored; see -Minfo messages  (Main.c: 57)
main:
57, Accelerator region ignored
58, Intensity = 1.00    
Loop not vectorized/parallelized: contains call
60, Accelerator restriction: call to 'gsl_matrix_calloc' with no acc routine information

特别是,关于“acc 例程信息”的第一条和最后一条消息是否意味着无法在 acc 计算区域内使用 GSL 函数?

4

1 回答 1

0

我还没有看到对 GSL 库的直接支持。

您需要获取您正在使用的 GSL 例程的源代码,并在定义子例程或函数的位置插入“!$accroutine”编译指示。

这将指示编译器为 GPU 生成内核。在这些 pragma 插入之后,您应该在编译期间使用 -acc 标志编译 GSL 库。

于 2016-10-28T14:43:19.700 回答