#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 во время компиляции.