У меня есть класс-обертка CudaMatrix
, который реализует несколько операций cuBLAS, позволяя мне позвонить m1.multiply(m2)
, который запускает операцию sgemm
на внутренних указателях данных.Как реализовать интерфейс для подматрицы в CUDA?
Я хотел бы расширить класс по операциям на подматрице, что-то вроде
CudaMatrix a(100,100);
CudaMatrix b(100,100);
// fill a and b
int i=5, j=15;
CudaSubMatrix sa(a, i, j, i+10, j+10); // sa := a[5:15, 15:25]
i=50, j=60;
CudaSubMatrix sb(b, i, j, i+10, j+10); // sb := b[50:60, 60:70]
CudaMatrix res;
res.copy(sa);
res.multiply(sb) // res = sa*sb
В последнем ряде, multiply()
должен работать на подматрице sb
, поэтому строки не являются смежными и Я не могу назвать те же операции sgemm
, что и раньше.
Как реализовать эффективный интерфейс для подматриц, который позволяет избежать копирования данных явно? Есть ли какие-либо версии с открытым исходным кодом, которые я могу найти?
Непонятный вопрос. CUBLAS уже имеет все необходимое для выполнения операций над подматрицами без необходимости дополнительного кода интерфейса или обертки – talonmies