【问题标题】:Storing data on GPU and parallelizing convolution in MATLAB在 GPU 上存储数据并在 MATLAB 中并行化卷积
【发布时间】:2013-07-27 19:57:46
【问题描述】:

我有一个严重依赖卷积的代码。它负责 80% 以上的时间运行时间。 我想使用 gpu 让它更快,但有些东西我不完全理解,(我还没有权限为我自己测试这个)

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

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

谢谢!

【问题讨论】:

  • 不完全是你问的,但你考虑过使用 fftfilt 吗?这是在 FFT 算法的帮助下使用重叠相加方法的卷积,比直接卷积要快得多。顺便说一句:这可能也可以在 GPU 上运行。
  • 我已经问了另一个问题,这可能是一个答案。但是那里的评论者测试了 FFT 卷积,并说我使用的矩阵大小比较慢。

标签: matlab multi-gpu


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2011-11-23
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多