Можно ли использовать CUBLAS с OpenACC?

Мне нужно реализовать функцию, которая у меня уже есть в CUDA-C, используя директивы OpenACC (мне нужно сделать сравнение). В исходном коде есть вызов cubasSgemv, есть ли способ использовать библиотеку cublas под openacc?


person Angantyr    schedule 03.02.2014    source источник


Ответы (1)


Да, для этого вы можете использовать конструкцию host_data. Вот пример вызова cublasSaxpy из OpenACC:

 #pragma acc data create(x[0:n]) copyout(y[0:n])
  {
    #pragma acc kernels
    {
      for( i = 0; i < n; i++)
      {
        x[i] = 1.0f;
        y[i] = 0.0f;
      }
    }

    #pragma acc host_data use_device(x,y)
    {
      cublasSaxpy(n, 2.0, x, 1, y, 1);
    }
  }

У меня есть другие примеры в статье, которую я написал о совместимости OpenACC несколько месяцев назад. Вы можете найти его по адресу http://www.pgroup.com/lit/articles/insider/v5n2a2.htm .

person jefflarkin    schedule 04.02.2014
comment
Большое спасибо! Пишу код так, а компилятор говорит: вызов cuEventSynchronize вернул ошибку 700: Ошибка запуска. Итак, я попытался запустить программу с помощью cuda-memcheck и обнаружил, что для двух потоков в каждом блоке возникает ошибка Invalid global read of size 4 (...) address xxx is out of bounds. Может ли это зависеть от первого аргумента cublasSgemv, который имеет тип cublasHandle_t? Я использую статус cublasStatus_t; дескриптор cublasHandle_t; статус=cublasCreate(&handle); чтобы он работал, но я не знаю, как это взаимодействует с OpenACC... пожалуйста, помогите - person Angantyr; 05.02.2014
comment
конечно! здесь код dropbox.com/s/dh5jhgz2uva78cp/kernel_matrix_calculation.c . Я не знаю, правильный ли это способ опубликовать это, я надеюсь, что это сработает. большое спасибо за вашу помощь. Вам тоже нужен исходный код CUDA-C? - person Angantyr; 05.02.2014
comment
что-то не так со ссылкой? Извините, что раздражаю вас, но я действительно не знаю, как поступить, некоторые советы будут полезны. - person Angantyr; 07.02.2014