CUDA内核可以调用cublas函数吗?

Hai*_*ang 16 cuda gpu cublas

我知道这听起来很奇怪,但这是我的情景:

我需要进行矩阵 - 矩阵乘法(A(n*k)*B(k*n)),但我只需要对输出矩阵求对角元素.我搜索了cublas库,并没有找到任何能够做到这一点的2级或3级功能.所以,我决定将A的每一行和B的每一列分配到CUDA线程中.对于每个线程(idx),我需要计算点积"A [idx,:]*B [:,idx]"并将其保存为相应的对角线输出.现在因为这个点产品也需要一些时间,我想知道我是否可以在某种程度上调用cublas函数(比如cublasSdot)来实现它.

如果我错过了一些可以直接实现我的目标的cublas函数(只计算矩阵 - 矩阵乘法的对角元素),这个问题可能会被丢弃.

dre*_*ash 11

是的,它可以.

"CUDA C/C++中提供的语言界面和Device Runtime API是主机上可用的CUDA运行时API的子集.CUDA运行时API的语法和语义已保留在设备上,以便于代码重用对于可能在主机或设备环境中运行的API例程.内核也可以直接调用诸如CUBLAS之类的GPU库,而无需返回CPU." 资源

在这里,您可以使用cuda和CUBLAS库函数cublasSgemv查看和Matrix-Vector Multiplication.

  • 请注意,动态并行性(允许嵌套内核调用的功能)仅在Kepler GK110上得到支持,Kepler GK110是刚刚发布的芯片.GK110仅适用于高端计算产品,中级产品为特斯拉K20,售价为3200美元. (7认同)