Простой пример умножения матриц CUBLAS?

Я ищу очень простой пример умножения матрицы костей для CUBLAS, который может умножать M на N и помещать результаты в P для следующего кода, используя высокопроизводительные операции графического процессора:

float M[500][500], N[500][500], P[500][500];
for(int i = 0; i < Width; i++){
    for(int j = 0; j < Width; j++)
    {
        M[i][j] = 500;
        N[i][j] = 500;
        P[i][j] = 0;
    }
}

До сих пор большая часть кода, который я нахожу для выполнения любого матричного умножения с использованием CUBLAS, (казалось бы?) Слишком сложна.

Я пытаюсь разработать базовую лабораторную работу, в которой учащиеся могут сравнить производительность умножения матриц на графическом процессоре и умножения матриц на процессоре, предположительно с повышенной производительностью на графическом процессоре.


person Chris Redford    schedule 03.10.2011    source источник
comment
Считаете ли вы пример simpleCublas в CUDA SDK чрезмерно сложным?   -  person talonmies    schedule 04.10.2011
comment
да. Я имею в виду, если это так просто, я думаю, нам просто нужно с этим смириться. Я просто надеялся, что будет какой-то код с очевидным эквивалентом процессора, чтобы мы могли синхронизировать оба и сравнить результаты.   -  person Chris Redford    schedule 04.10.2011
comment
Я GTA для класса Data Structures 500 уровня. Таким образом, мы уже накачиваем их настолько подробной информацией о программировании различных деревьев, куч и других структур данных, а также о соответствующих C++ и соглашениях об экспериментах, что они узнают, что многие синтаксические детали для CUBLAS действительно выходят за рамки соответствующей информации для класс.   -  person Chris Redford    schedule 04.10.2011
comment
Сами вызовы линейной алгебры CUBLAS следуют тому же синтаксису/API, что и стандартный BLAS, который по умолчанию является абсолютно линейным. алгебра API и библиотека и существует с 1980-х годов, когда она была написана. Использование графического процессора подразумевает использование системы с неравномерным пространством памяти, что влечет за собой дополнительные накладные расходы API. Поэтому, если вы считаете, что любой из них выходит за верхний предел того, чему вы пытаетесь учить, то, я думаю, вам не повезло.   -  person talonmies    schedule 04.10.2011
comment
Хорошо. Спасибо за справочную информацию. Я буду продолжать смотреть вокруг. Возможно, мне придется задать более общий вопрос о SO. Все, что мне нужно, это всего лишь НЕКОТОРЫЙ пример, максимально простой, чтобы я мог показать, что GPU превосходит CPU в любой алгоритмической задаче, используя CUDA.   -  person Chris Redford    schedule 04.10.2011


Ответы (2)


SDK содержит matrixMul, иллюстрирующий использование CUBLAS. Более простой пример см. в руководстве по CUBLAS, раздел 1.3.

Образец matrixMul также показывает собственное ядро, которое, конечно, не будет работать так же хорошо, как CUBLAS.

person Tom    schedule 04.10.2011

CUBLAS не нужен, чтобы показать, что GPU превосходит CPU, хотя CUBLAS, вероятно, превзойдет его в большей степени. Похоже, что многие простые реализации CUDA (включая умножение матриц) могут превзойти ЦП по производительности при наличии достаточно большого набора данных, как объяснено и продемонстрировано здесь:

Простейший возможный пример демонстрации производительности GPU с использованием CUDA

person Chris Redford    schedule 08.10.2011