OpenACC совместим с GNU Scientific Library (GSL)?

#gsl #acc

#gsl #acc

Вопрос:

Я тестирую, могу ли я даже использовать функции GSL в вычислительных областях OpenACC. В Main.c я пробую следующий (глупый) цикл for, который использует функции GSL,

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

который выделяет память для матрицы 10×10 нулей, а затем освобождает память 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», что невозможно использовать функции GSL в вычислительных областях acc?

Ответ №1:

Я не видел прямой поддержки библиотек GSL.

Вам нужно будет получить исходный код для используемых вами подпрограмм GSL и вставить прагмы «! $ acc routine», где определены подпрограммы или функции.

Это даст указание компилятору генерировать ядра для графического процессора. После этих вставок pragma вы должны скомпилировать библиотеки GSL, используя флаг -acc во время компиляции.