MATLAB-在GPU上并行使用用户定义的类方法

MATLAB-在GPU上并行使用用户定义的类方法,matlab,parallel-processing,gpu,Matlab,Parallel Processing,Gpu,假设我有一个名为Stack的类,它有一个方法,该方法将Stack对象的一些其他属性作为输入参数,输入参数由向量和标量组成。输入向量和输出矩阵根据对象改变大小 classdef堆栈 ... ... 函数out=某些方法(scalar1、scalar2、…、vec1、vec2…)%out具有不同数量的 %列的大小取决于vec1、vec2等的大小。 ... out=…%(4,m)的大小,其中m随每个对象而变化 结束 这种特定的堆栈方法应该被调用数千次,以便在另一个脚本中用于其他目的。由于串行使用此方

假设我有一个名为Stack的类,它有一个方法,该方法将Stack对象的一些其他属性作为输入参数,输入参数由向量和标量组成。输入向量和输出矩阵根据对象改变大小

classdef堆栈
...
...
函数out=某些方法(scalar1、scalar2、…、vec1、vec2…)%out具有不同数量的
%列的大小取决于vec1、vec2等的大小。
...
out=…%(4,m)的大小,其中m随每个对象而变化
结束
这种特定的堆栈方法应该被调用数千次,以便在另一个脚本中用于其他目的。由于串行使用此方法需要时间,因此并行解决方案将为更大的计算节省大量时间

我试图通过传递函数中堆栈对象的索引来使用cellfun,希望能在我的GPU上运行它,但cellfun不支持GPU计算。我还尝试使用arrayfun,但它不支持GPU上的UniformOutput参数。如果我想使用我的GPU,我不能在一个单元中存储不同大小的输出

我的问题是,对于每次返回不同大小输出的类方法/函数,GPU上的并行计算是否可能?如果没有,这个问题可能的解决方法是什么


更新:我的问题的简短总结是;我想为每个堆栈对象分别运行相同的函数,每个堆栈对象都有自己的输入,知道它们的输出大小不匹配,并在最后将它们收集到单元格数组中。

不清楚您真正想要的是什么。当然,GPU计算支持不同大小的输入和输出,例如,取两个随机(但兼容)大小的矩阵,使用
gpuArray
将它们相乘。你需要明确你的目标problem@AnderBiguri通过不同大小的输入和输出,我的意思是,对于每个迭代,每个类对象的输入和输出大小都会改变。例如,我第一次调用该方法时,其中一个输入向量的大小为(1,20),因此,第一次迭代的输出为(4,20)。这是我第二次调用该方法,假设输入的大小为(1,18),输出的大小为(4,18)。我希望能够考虑迭代之间的大小变化,并多次调用该方法以在单元阵列中立即获得输出。GPU计算是一种并行执行相同操作的技术。GPU不能对每个处理器执行不同的操作。这就是他们现在的工作方式。您可以在gpu中输入“同一任务”X1000次,但一次可以输入10000个不同的任务。