Создание библиотеки для автоматического параллельного вычисления с CUDA - PullRequest
1 голос
/ 18 января 2011

Для моего проекта на последнем году я выбрал создание библиотеки, которую разработчики могли бы использовать для вычислений GPGPU с CUDA без необходимости разбираться в механизмах, лежащих в основе различных реализаций ядра API CUDA (иными словами, оболочки CUDA).Эта библиотека скорее всего будет напоминать библиотеку openMP.Для тех, кто не знаком с openMP, это API, который поддерживает многоплатформенное многопроцессорное программирование с общей памятью на C, где компоновка и декомпозиция данных обрабатываются автоматически директивами.Например, API распараллеливает каждый код в блоках:

 long sum = 0, loc_sum = 0;
 /*forks off the threads and starts the work-sharing construct*/
 #pragma omp parallel for private(w,loc_sum) schedule(static,1) 
 {
   for(i = 0; i < N; i++)
     {
       w = i*i;
       loc_sum = loc_sum + w*a[i];
     }
   #pragma omp critical
   sum = sum + loc_sum;
 }
 printf("\n %li",sum);

В моем случае я хотел бы реализовать ту же функциональность для параллельных вычислений CUDA на GPU.Следовательно, мне нужно будет создать набор директив компилятора, библиотечных подпрограмм и переменных среды, которые влияют на поведение во время выполнения.Каждый вызов в CUDA должен быть скрыт от программиста.

Поскольку CUDA представляет собой SIMD-архитектуру, я знаю, что необходимо учитывать множество факторов, особенно это касается зависимости между итерациями.Но сейчас я предполагаю, что программист знает ограничения вычислений GPGPU.

Теперь, вот где мне нужна ваша помощь.Может ли кто-нибудь дать мне какой-нибудь совет, с чего начать строить такую ​​библиотеку?Кроме того, есть ли у кого-нибудь хорошие учебники, которые могут помочь мне разобраться с директивами компилятора или переменными окружения?Или кто-нибудь знает какую-либо другую библиотеку, которая выполняет аналогичную задачу и из которой я мог бы получить хорошую документацию?

И, самое главное, считаете ли вы, что это проект, который может быть выполнен за 1200 часов?Я уже немного знаком с GPGPU и CUDA, но создание такой библиотеки является новым для меня.

Ответы [ 2 ]

1 голос
/ 20 января 2011

Это не столько написание библиотеки, сколько переписывание части компилятора. Ни GCC, ни Visual Studio, с одной стороны, не позволяют вам определять свои собственные прагмы, и вам нужно было бы хорошо играть со встроенным оптимизатором.

Честно говоря, мне кажется, что фактическая часть GPGPU - это легкая часть.

Если вы хотите посмотреть, как они работали с OpenMP в GCC, я предлагаю посмотреть историю проекта GOMP .

1 голос
/ 19 января 2011

Это немного субъективно, но звучит как очень сложный проект. Требуется немало усилий и планирование, чтобы достаточно хорошо структурировать проблему, чтобы обеспечить передачу данных с хоста на gpu, и это имеет смысл только для подмножества проблем.

Что касается существующих проектов, которые делают что-то похожее, то существуют простые обертки, такие как PyCUDA и PyOpenCL , которые заключают в себе небольшие фрагменты функций графического процессора, такие как матричная математика. Наиболее близким является theano , который сфокусирован на довольно математических вычислениях, но хорошо абстрагирует компонент GPU.

...