GPU数据存储与MATLAB并行卷积

GPU数据存储与MATLAB并行卷积,matlab,multi-gpu,Matlab,Multi Gpu,我有一个很大程度上依赖于卷积的代码。它负责80%以上的时间运行时间。 我想用gpu来加快速度,但有些事情我还不完全了解(我自己还没有机会测试) 如果我在类的构造函数中传递信息(继承自handle)以存储在GPU内存中(使用gpuArray),它会保留在那里吗?将类作为参数传递给函数会有问题吗? 对数据本身执行的操作都可以在GPU上完成(我猜在数组上循环也可以,无论数组存储在哪里) 我有一个矩阵size(MyMat)=[s,s,b,n],我想在其中存储n个不同大小的矩阵[s,s,b],这些矩阵是同

我有一个很大程度上依赖于卷积的代码。它负责80%以上的时间运行时间。 我想用gpu来加快速度,但有些事情我还不完全了解(我自己还没有机会测试)

  • 如果我在类的构造函数中传递信息(继承自handle)以存储在GPU内存中(使用
    gpuArray
    ),它会保留在那里吗?将类作为参数传递给函数会有问题吗? 对数据本身执行的操作都可以在GPU上完成(我猜在数组上循环也可以,无论数组存储在哪里)

  • 我有一个矩阵
    size(MyMat)=[s,s,b,n]
    ,我想在其中存储n个不同大小的矩阵
    [s,s,b]
    ,这些矩阵是同时计算出来的(操作可以在GPU上完成) 我必须使用parfor吗?(我知道在大多数情况下,开销会让它成为一个坏主意)或者有没有更快的方法让GPU快速完成这项任务?在这种情况下,我需要执行的唯一计算是卷积(但它不能全部在一个convn操作中完成)

  • 谢谢大家!

    1)只需像使用任何其他变量一样使用gpuArray即可。很可能不需要对代码进行任何修改,否则您将收到一个指向该问题的异常


    2) gpuArray和parfor的结合是在多个gpu上并行gpu计算的典型方式?你有多个GPU吗?如果是,请尝试parfor,如果不是,它可能会更慢,因为只有一个工人可以使用gpu,而所有其他工人都必须等待

    不完全是您要求的,但是您考虑过使用fftfilt吗?这是使用重叠加法和FFT算法的卷积,比直接卷积快得多。顺便说一句:这可能也可以在GPU上运行。我问了另一个问题,这可能是一个答案。但是一位评论员测试了FFT卷积,并说对于我使用的矩阵大小来说,它比较慢。