【问题标题】:3d convolution in c++c++中的3d卷积
【发布时间】:2009-12-22 20:24:45
【问题描述】:

我正在寻找一些实现 3d 卷积的源代码。理想情况下,我需要 C++ 代码或 CUDA 代码。如果有人能指出一个不错且快速的实现,我将不胜感激:-)

干杯

【问题讨论】:

    标签: c++ 3d cuda convolution


    【解决方案1】:

    你知道卷积通常是通过使用 fft 来完成的吗?例如,参见http://en.wikipedia.org/wiki/Convolution

    所以你需要一个 fft 库。

    Fastest method to compute convolution 建议 http://www.fftw.org/(对于传统 cpu)。

    对于 cuda,使用 cufft - http://www.gsic.titech.ac.jp/~ccwww/tebiki/tesla_e/tesla6_e.html

    【讨论】:

    • 对于小内核,在有硬件支持的情况下(例如,用于 4x4 或 8x8 内核的 GPU),有时使用矩阵卷积会更快。对于大内核,傅里叶肯定是个好人。
    • FWIW,袖口文档的原始来源在这里:nvidia.com/object/cuda_develop.html
    【解决方案2】:

    您是注册开发者吗?如果是这样,您应该下载 3.0 SDK 并查看 FDTD3d 示例,该示例显示了应用于显式有限差分应用程序的 3d 卷积。在 2.3 SDK 中有一个名为 3dfd 的示例,它与此类似(现在已被替换)。

    如果您的脉冲响应很短,使用这种方法可能比 FFT 更有效。

    【讨论】:

    • 您可以在nvidia.com/object/cuda_get.html注册,点击“立即申请”。或者,您可以只查看当前 SDK 中的 3dfd 示例,概念保持不变。
    【解决方案3】:

    英特尔有一个很好的例子——使用 SSE + OpenMP 及其串行版本。该代码主要用于分析串行和并行方法,但以一种很好的方式完成。 http://software.intel.com/en-us/articles/16bit-3d-convolution-sse4openmp-implementation-on-penryn-cpu/

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多