批处理矩阵和CUDA multiplicaion

1视图(30天)
彼得·艾格力
彼得·艾格力 2020年4月28日
编辑: 埃里克·米德 2020年5月5日
你好,
我看到Matlab R2020a GPU编码器实现的新功能,特别是 gpucoder.stridedMatrixMultiply 。不过,我不懂如何批量定义。如果你看看生成的CUDA的例子所示的代码,它州1批大小(cf。 NVIDIA的文档 )。的变量A, B和C预计将2 d和矩阵的维数的过程。
如何正确使用这个函数?我有一个3 d矢量在Matlab中持有许多小矩阵,因此(:,:1),一个(:,:2)等等。同样的申请我想过程都使用CUDA在同一时间。我想计算(:,:1)* B(:,: 1)使用CUDA函数等。我如何才能实现这一新的GPU编码器功能?我从Matlab接口,如何?
彼得

答案(1)

埃里克·米德
埃里克·米德 2020年5月5日
编辑:埃里克·米德 2020年5月5日
嗨,彼得,
gpucoder.stridedMatrixMultiplyworks exactly as you want. You can directly pass A and B to gpucoder.stridedMatrixMultiply and it will compute them in the way you want.
一个小例子,假设您有一个名为stridedMultiply的函数:
函数c = stridedMultiply (a, b)
c = gpucoder。stridedMatrixMultiply (a, b);
结束
然后我们可以生成代码,验证答案是正确的,下面的代码:
% 3 d向量输入
一个=兰德(4100);
b =兰德(5100);
%生成代码
codegen配置coder.gpuConfig(墨西哥人)参数{a、b} stridedMultiply
%验证正确性
c_mex = stridedMultiply_mex (a, b);
c = 0(大小(c_mex));
i = 1:10 0
c (:,:, i) = a(:,:我)*(:,:我);
结束
%核对MATLAB的答案与stridedMatrixMultiply生成的代码
公差= 1 e-8;
断言(所有(abs (c (:)——c_mex(:)) <公差);
如果我们看一下生成的代码,我们将看到,批量大小已经正确地设置为100:
cublasDgemmStridedBatched (getCublasGlobalHandle ()、CUBLAS_OP_N CUBLAS_OP_N, 5,
5、4(双*)gpu_alpha1(双*)& (* gpu_a)[0] 5, 20日(双*)
& (* gpu_b)[0], 4, 20日(双*)gpu_beta1(双*)& (* gpu_c)[0] 5, 25岁,100);
关于的例子 文档页面 你引用,因为输入矩阵都是2 d的示例中,只有1批处理计算,因此,参数设置为1。不过我理解你的困惑,因为gpucoder。stridedMatrixMultiply主要是为了使用3 d输入。gpucoder澄清。沿着第一个二维唯一stridedMatrixMultiply繁殖。然而,我理解这个例子可以令人困惑,我们会更新这个例子。
我希望回答了你的问题!

类别

找到更多的在开始使用GPU编码器帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!