微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MATLAB 中的 GPU Coder 用于高度面向对象的代码

如何解决MATLAB 中的 GPU Coder 用于高度面向对象的代码

我正在 MATLAb 中使用大量面向对象的代码。我想使用 GPU 编码器来加速代码。但是 GPU 编码器仅适用于函数,并且应明确指定函数的参数。输入参数可以是除对象之外的任何东西。这实际上使我的工作变得非常困难,如果不是不可能的话。类中的几乎所有函数都接受对象并返回相同的对象。知道我如何为至少一些计算密集型函数隔离这种行为。我有一个模糊的想法,也许包装器可以做到这一点,但不确定。谢谢 谢谢。

@rlivings39,在您发表评论后,我创建了这个简单的类,转换后我只看到调用函数的占位符。你能看看吗,让我知道这是否正确。再次感谢。

classdef MyClass
   properties
      Prop
   end
   methods
      function obj = MyClass(val)
         if nargin > 0
            obj.Prop = 10^val;
         end
      end
   end
end


function sampleClass
a = MyClass(2);
disp(a.Prop)
end


//
// sampleClass.cpp
//
// Code generation for function 'sampleClass'
//
// Include files
#include "sampleClass.h"

// Function DeFinitions
void sampleClass()
{
}

// End of code generation (sampleClass.cpp)

解决方法

MATLAB Coder 和 GPU Coder 支持值类作为顶级函数 I/O。句柄类不是。这里要考虑的是,只有顶级函数不能将句柄对象作为 I/O。如果您有从入口点调用的内部函数,则这些函数可以使用句柄对象 I/O。

包装器的想法是正确的方法。您可以编写包装函数作为 Coder 的入口点函数。在内部,它们可以像其他函数一样创建、修改和使用您的对象。然后,他们应该采用和返回编码器支持的顶级 I/O 类型。

如果要加速算法,请尽量减少对生成的 MEX 文件的调用次数,因为这些调用会产生开销。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。