Проверка использования памяти NVIDIA __shared__ при наличии директивы кеша
Я экспериментирую с предложением кеша OpenACC, используя PGI 14.10. У меня есть простой цикл, основанный на слайде в [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;
}
Когда я запускаю это под nvprof с --metrics shared_load_transactions,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 ответ
Ответил на форумах PGI: http://www.pgroup.com/userforum/viewtopic.php?t=4611&start=0&postdays=0&postorder=asc&highlight=
Очевидно, директива кеша была почти полностью отключена в компиляторах PGI 14.x, но будет доступна в версии 2015 года.