проверка использования памяти NVIDIA __shared__ при наличии директивы cache

Я экспериментирую с предложением кеширования 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

person agrippa    schedule 18.12.2014    source источник
comment
Добавление -ta = keepptx, keepgpu показывает, что разделяемая память не используется, поэтому теперь нужно выяснить, почему директива кеширования не действует?   -  person agrippa    schedule 18.12.2014
comment
предоставить полный код. SO ожидает, что вы предоставите MCVE. Вы где-нибудь используете ключевое слово restrict?   -  person Robert Crovella    schedule 18.12.2014
comment
Конечно, я обновил исходный пост полным рабочим примером неработающего кеша.   -  person agrippa    schedule 18.12.2014


Ответы (1)


Ответы на форумах PGI: http://www.pgroup.com/userforum/viewtopic.php?t=4611&start=0&postdays=0&postorder=asc&highlight=

Судя по всему, директива кеширования была почти полностью отключена в компиляторах PGI 14.x, но будет доступна в версии 2015 года.

person agrippa    schedule 18.12.2014