如何在CUDA中实现到子矩阵的接口
How to implement an interface to a sub-matrix in CUDA?
我有一个包装类CudaMatrix
,它实现了几个cuBLAS操作,允许我调用对内部数据指针运行sgemm
操作的m1.multiply(m2)
。
我想通过对子矩阵的运算来扩展类,比如
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
运算。
如何实现子矩阵的高效接口,避免显式复制数据?有什么开源实现我可以寻找吗?
可以使用API调用的ldx参数执行子矩阵乘法。
索引在1.1 DataLayout部分进行了描述:
#定义IDX2C(i,j,ld)(((j)*(ld))+(i))
然后使用立方体Sgemm,例如lda
参数等于的行数
cuBLAS库使用列主存储器
原始矩阵的m
、n
、k
。
注释索引在fortran for C索引方案中可能有所不同。
因此,您真正需要的是子矩阵(col,rows)的大小,以及输入矩阵中列的大小(其行数)。
相关文章:
- 如何从实现接口的模板化类实例访问结构
- 传递实现特定接口的类
- 如何在C++中实现接口
- C++ 使用接口和默认实现继承
- unique_ptr实现接口时对已删除函数的引用
- C++接口实现和子类化对象识别
- 接口实现和私有继承之间的交互
- Pimpl习惯用法、单独的接口/实现文件和多个虚拟继承.如何
- 定义大量的接口实现
- cpp文件中的纯虚拟接口实现
- 如何使用接口实现回调
- 继承接口实现
- 如何在C++中编写类java参数级接口实现
- 具有其他默认参数的接口实现
- Mixin和接口实现
- 如何在许多类中重用接口实现
- Emscripten Javascript接口实现
- 获取Firefox内置组件的接口实现
- c++中的头文件和Java中的抽象类/接口实现是相同的想法,这是正确的吗?
- C++中的接口+实现:代码不执行