Параллельное матричное умножение с использованием нескольких GPU

Я установил в свою систему два графических процессора (2x Nvidia Quadro 410) в разные слоты PCI. Чтобы решить умножение Martix на обоих этих графических процессорах, как я могу разделить входные матрицы так, чтобы каждый графический процессор обрабатывал/вычислял часть выходной матрицы, а затем возвращал ее обратно. Например. для двух матриц A, B каждая порядка 10x10, затем вычислить выходную матрицу C = A x B, так что из 100 элементов (10 x 10) 50 элементов должны быть рассчитаны на 1-м графическом процессоре, а другая половина, т. е. от 50 до b рассчитано на втором графическом процессоре. Я пытаюсь реализовать это на OpenCL. Но приветствуется любой алгоритм, который поможет мне найти решение.


person pradyot    schedule 05.05.2016    source источник


Ответы (1)


В общем, если у вас есть матрицы X (размером axb, сначала строки) и Y (размером bxc),

X * Y = vcat(X[0:a/2,0:b] * Y, X[a/2:a,0:b] * Y)

В этом псевдокоде vcat — это вертикальная конкатенация (наложение одной матрицы друг на друга, например, матрица 4x3, объединенная с матрицей 2x3, даст матрицу 6x3), : обозначает диапазоны, а [] — индексирование.

Оба аргумента для vcat могут быть вычислены на разных графических процессорах, а конкатенация может быть достигнута просто путем указания выходных данных на разные подобласти выходного буфера (при условии, что у нас есть массивы C-упорядочения). Начальное разделение X может быть достигнуто аналогичным образом, просто используя разные подобласти (поскольку оно разделено по строке).

person fjarri    schedule 05.05.2016
comment
Спасибо. Я начну реализовывать это и сообщу вам о прогрессе. Также вы думаете, что это самый эффективный способ сделать это? так как он не делит все элементы пополам.. - person pradyot; 05.05.2016
comment
Я не уверен, что понимаю, что вы имеете в виду. Это деление является чисто виртуальным, на самом деле вы просто указываете свою процедуру умножения матриц на разные части массива для разных графических процессоров. - person fjarri; 05.05.2016