MATLAB 中的 GPU 编码器,用于大量面向对象的代码

Posted

技术标签:

【中文标题】MATLAB 中的 GPU 编码器,用于大量面向对象的代码【英文标题】:GPU Coder in MATLAB for heavily object oriented code 【发布时间】:2021-06-14 08:42:31 【问题描述】:

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

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

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)

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢。我创建了这个简单的类,转换后我只看到调用函数的占位符。 classdef MyClass 属性 Prop 结束方法 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 // // 函数 'sampleClass' 的代码生成 // // 包含文件 #include "sampleClass.h" // 函数定义 void sampleClass() //代码生成结束(sampleClass.cpp)

以上是关于MATLAB 中的 GPU 编码器,用于大量面向对象的代码的主要内容,如果未能解决你的问题,请参考以下文章

我读到霍夫曼编码不适用于 GPU,但本文声称并非如此

MATLAB使用GPU

如何在ffmpeg中指定nvenc使用的GPU [关闭]

matlab读取motorola编码

用于转换特征提取函数的 Matlab 编码器

用于矩阵运算的 OpenCV GPU 库有多好?