【问题标题】:using FFTW compatablity mode in cuFFT在 cuFFT 中使用 FFTW 兼容模式
【发布时间】:2013-08-19 19:06:30
【问题描述】:

我有一个使用 FFTW 创建的完整项目。我想过渡到使用 cuFFT。我了解 cuFFT 具有“兼容模式”。但这究竟是如何工作的? The cuFFT manual 说:

应用程序使用 FFTW3 界面运行后,用户可以 想要修改他们的代码以将数据移入和移出 GPU 并使用 FFTW 转换指南中记录的例程以获得最佳效果 性能。

这是否意味着我实际上需要更改我的各个函数调用?例如,调用 cufftPlan1d() 而不是 fftw_plan_dft_1d()

我是否还必须更改我的数据类型?

    fftw_complex *inputData;    // fftw data storage gets replaced..
    cufft_complex *inputData;   // ... by cufft data storage?

    fftw_plan forwardFFT;       // fftw plan gets replaced...
    cufftHandle forwardFFT;     // ... by cufft plan?

如果我必须重写所有代码,cufftSetCompatabilityMode(.) 的意义何在?

【问题讨论】:

    标签: cuda fftw cufft


    【解决方案1】:

    您可能想要的是cuFFTW interface to cuFFT。我建议您阅读此文档,因为它可能与您的想法很接近。这将允许您以最少的更改在 FFTW 应用程序中使用 cuFFT。如文档中所述,应该只需要两个步骤:

    • 建议将包含文件fftw3.h替换为cufftw.h
    • 不要与双精度/单精度库(如 fftw3/fftw3f 库)链接,而是与 CUFFT 和 CUFFTW 库链接

    关于您摘录的文档项目,如果您只是使用 cuFFTW 兼容性界面,则不需要该步骤(显式移动数据)。但是,您可能无法通过这种方式获得最佳性能。如果您想获得最高性能,您可能需要在本地使用 cuFFT,例如,这样您就可以明确地管理数据移动。这是否重要取决于您的应用程序的特定结构(例如,您正在执行多少个 FFT,以及是否有任何数据在多个 FFT 之间共享。)如果您打算原生使用 cuFFT,则适用以下 cmets :

    是的,您需要更改各个函数调用。它们必须与 API 中的函数名称、相关的头文件和库保持一致。 fftw_ 函数名称不在 cuFFT 库中。

    您可以检查您的数据类型,并且应该发现对于floatdouble、复杂等基本数据类型,它们在 cuFFT 和 FFTW 之间应该是布局兼容的。我个人建议将您的数据类型更改为 cuFFT 数据类型,但此时应该没有功能或性能差异。

    虽然你没有提到,cuFFT 也会要求你在 CPU/Host 和 GPU 之间移动数据,这个概念与 FFTW 无关。

    关于cufftSetCompatibilityModefunction documentationFFTW compatibility mode 的讨论很清楚它的目的。它与整体数据布局有关,尤其是 FFTW 的数据填充。

    【讨论】:

    • 所以cufftSetCompatabilityMode() 仅在我使用本机 cuFFT 时才相关?该方法的第一个参数是 cuFFT 句柄,如果我使用 FFTW,我可能没有。是否有可能将两者“混合”?例如,将接口用于除“执行”之外的所有内容,然后将本机 cuFFT 用于“执行”?另外,如果我只使用接口,有没有办法获取函数返回值(即 CUFFT_SUCCESS)?
    • 是的,如果您严格使用 cuFFTW 界面,cufftSetCompatibilityMode() 不相关。是的,可以混合使用 2 个 API。除了“执行”之外,您不能将 FFTW 接口用于所有操作,因为它不会影响数据复制过程,除非您实际使用 FFTW 接口执行。 cuFFT“执行”假定数据已被复制。我不知道如何严格使用 cuFFTW 接口获取函数返回值。然而对于支持的 fftw 函数,任何类型的状态参数也应该被支持。
    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2012-05-22
    • 2011-07-11
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多