PyCUDA: включает C / C ?

#python #cuda #gpgpu #inline-code #pycuda

#python #cuda #gpgpu #встроенный код #pycuda

Вопрос:

Что-то, что на самом деле нигде не упоминается (по крайней мере, я вижу), это то, какие библиотечные функции доступны встроенным ядрам CUDA.

В частности, я выполняю небольшие / глупые матричные умножения, которые не заслуживают индивидуальной загрузки на графический процессор, но я выгружаю большую часть алгоритма, которая включает это умножение. Никому никогда не нравилось использовать свои собственные функции linalg, поскольку кто-то всегда делал это лучше.

TLDR С какими библиотеками я могу играть во встроенных ядрах под PyCUDA?

Ответ №1:

Я не знаю ни одного, и я всегда думал, что было бы полезно иметь.

Для решения проблем, с которыми я обычно работаю (небольшие матрицы и тензоры, возникающие в методе конечных элементов), я просто написал шаблоны C для выполнения операций. Создание шаблонов функций позволяет компилятору знать количество отключений во время компиляции, и он может разворачивать циклы и сохранять результаты или промежуточные результаты в регистре, что, как правило, очень эффективно для пропускной способности ядра. Итак, продукт matrix-matrix объявляется как

 template < typename Real, unsigned int l, unsigned int m, unsigned int n >
__device__ __host__ 
void matmul(const Real *a,
            const Real *b,
                  Real *c)
{
    for(int i=0; i<l; i  ) {
        for(int j=0; j<n; j  ) {
            Real dotprod = Real(0);
               for(int k=0; k<m; k  ) {
                   dotprod  = a[idx2c(i,k,l)] * b[idx2c(k,j,m)];
                }
                c[idx2c(i,j,l)] = dotprod;
           }
     }
}
  

Для тех размеров, которые возникают в моих ядрах (2×2, 3×3, 4×4, 8×8, 9×9), выполнение вышеуказанного и разрешение компиляции работать, похоже, так же хорошо, как и любой другой подход, который я пробовал. Поскольку на уровне потока CUDA эффективно скалярна, не существует никаких векторных примитивов или чего-то подобного, что можно использовать для ускорения такого рода небольших операций.

Комментарии:

1. У вас случайно нет такого удобного фрагмента для решений Ax = B, не так ли? 😛 Спасибо за всю вашу помощь.

2. @Andrew Bolster: Я полагаю, вы действительно имеете в виду Ax = b, и это связано с вашим другим вопросом? Возможно, мы могли бы перенести это туда…