Ich habe eine Wrapper-Klasse CudaMatrix
, die mehrere CuBLAS-Operationen implementiert, so dass ich m1.multiply(m2)
aufrufen kann, die sgemm
Operation auf den internen Datenzeiger ausgeführt wird.Wie implementiert man eine Schnittstelle zu einer Sub-Matrix in CUDA?
Ich mag die Klasse von Operationen auf Submatrizen erweitern, so etwas wie
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
In der letzten Reihe, multiply()
muss auf einer Untermatrix sb
betreiben, so dass die Zeilen nicht zusammenhängend ist und Ich kann nicht die gleichen sgemm
Operationen wie zuvor aufrufen.
Wie implementiere ich eine effiziente Schnittstelle zu Submatrizen, die das explizite Kopieren von Daten vermeidet? Gibt es Open-Source-Implementierungen, nach denen ich suchen kann?
Ich verstehe die Frage nicht. CUBLAS verfügt bereits über alles, was erforderlich ist, um Operationen auf Submatrizen auszuführen, ohne zusätzlichen Schnittstellencode oder Wrapper zu benötigen – talonmies