如何使用线程和不同精度设置FFTW?

路易斯

我需要使用具有不同算术精度和多线程计划的FFTW。

我需要为所有精度设置多线程吗?像这样:

fftwf_init_threads();
fftwf_plan_with_nthreads(nthreads);
fftw_init_threads();
fftw_plan_with_nthreads(nthreads);
fftwl_init_threads();
fftwl_plan_with_nthreads(nthreads);

或者在我的启动例程中编写

fftw_init_threads();
fftw_plan_with_nthreads(nthreads);

够了吗?

弗朗西斯

不同精度的fftw库彼此完全独立。因此,您需要通过调用fftw的相应函数为所有精度设置多线程

int nbthreads=2;
fftw_init_threads();
fftw_plan_with_nthreads(nbthreads);
fftwf_init_threads();
fftwf_plan_with_nthreads(nbthreads);
fftwq_init_threads();
fftwq_plan_with_nthreads(nbthreads);

...

fftw_cleanup_threads();
fftwf_cleanup_threads();
fftwq_cleanup_threads();

这是一个使您信服的示例代码。gcc main.c -o main -lfftw3_threads -lfftw3 -lfftw3f_threads -lfftw3f -lfftw3q_threads -lfftw3q -lm -lpthread -Wall一旦建立了相应的库,就可以在Unix上对其进行编译

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#include <fftw3.h>

int main ( ){
    int n = 40000000;
    int nf = n*2;
    int nq =n/32;

    fftw_complex *in;
    fftw_complex *in2;
    fftw_complex *out;
    fftw_plan plan_backward;
    fftw_plan plan_forward;

    fftwf_complex *inf;
    fftwf_complex *in2f;
    fftwf_complex *outf;
    fftwf_plan plan_backwardf;
    fftwf_plan plan_forwardf;

    fftwq_complex *inq;
    fftwq_complex *in2q;
    fftwq_complex *outq;
    fftwq_plan plan_backwardq;
    fftwq_plan plan_forwardq;

    //thread parameters
    int nbthreads=2;
    fftw_init_threads();
    fftw_plan_with_nthreads(nbthreads);
    fftwf_init_threads();
    fftwf_plan_with_nthreads(nbthreads);
    fftwq_init_threads();
    fftwq_plan_with_nthreads(nbthreads);

    in = fftw_malloc ( sizeof ( fftw_complex ) * n );
    out = fftw_malloc ( sizeof ( fftw_complex ) * n );

    inf = fftwf_malloc ( sizeof ( fftwf_complex ) * nf );
    outf = fftwf_malloc ( sizeof ( fftwf_complex ) * nf );

    inq = fftwq_malloc ( sizeof ( fftwq_complex ) * nq );
    outq = fftwq_malloc ( sizeof ( fftwq_complex ) * nq);

    // forward fft
    plan_forward = fftw_plan_dft_1d ( n, in, out, FFTW_FORWARD, FFTW_ESTIMATE );
    fftw_execute ( plan_forward );

    plan_forwardf = fftwf_plan_dft_1d ( nf, inf, outf, FFTW_FORWARD, FFTW_ESTIMATE );
    fftwf_execute ( plan_forwardf );

    plan_forwardq = fftwq_plan_dft_1d ( nq, inq, outq, FFTW_FORWARD, FFTW_ESTIMATE );
    fftwq_execute ( plan_forwardq );

    // backward fft
    in2 = fftw_malloc ( sizeof ( fftw_complex ) * n );
    plan_backward = fftw_plan_dft_1d ( n, out, in2, FFTW_BACKWARD, FFTW_ESTIMATE );
    fftw_execute ( plan_backward );

    in2f = fftwf_malloc ( sizeof ( fftwf_complex ) * nf );
    plan_backwardf = fftwf_plan_dft_1d ( nf, outf, in2f, FFTW_BACKWARD, FFTW_ESTIMATE );
    fftwf_execute ( plan_backwardf );

    in2q = fftwq_malloc ( sizeof ( fftwq_complex ) * nq );
    plan_backwardq = fftwq_plan_dft_1d ( nq, outq, in2q, FFTW_BACKWARD, FFTW_ESTIMATE );
    fftwq_execute ( plan_backwardq);

    fftw_cleanup_threads();
    fftw_destroy_plan ( plan_forward );
    fftw_destroy_plan ( plan_backward );

    fftw_free ( in );
    fftw_free ( in2 );
    fftw_free ( out );

    fftwf_cleanup_threads();
    fftwf_destroy_plan ( plan_forwardf );
    fftwf_destroy_plan ( plan_backwardf );

    fftwf_free ( inf );
    fftwf_free ( in2f );
    fftwf_free ( outf );

    fftwq_cleanup_threads();
    fftwq_destroy_plan ( plan_forwardq);
    fftwq_destroy_plan ( plan_backwardq );

    fftwq_free ( inq );
    fftwq_free ( in2q );
    fftwq_free ( outq );

    return 0;
}

您可以注释fftwq_init_threads(); fftwq_plan_with_nthreads(nbthreads);fftwq_cleanup_threads();监视cpu的使用情况,以检查fftw在这种情况下不会为四精度使用多线程。

要使用intel simd sse2构建具有不同精度的fftw3 ,请执行以下操作:

./configure --enable-threads --enable-shared --enable-sse2
make 
make install
./configure --enable-threads --enable-shared --enable-sse2 --enable-float
make 
make install
./configure --enable-threads --enable-shared --enable-quad-precision
make
make install

sse2不支持四精度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为不同的线程组设置不同数量的线程?

来自分类Dev

如何使用精度和距离

来自分类Dev

通过两个不同的线程设置和访问变量

来自分类Dev

如何使用计时器和不同的线程使代码平稳运行

来自分类Dev

如何使用匿名方法设置线程名称?

来自分类Dev

RaisePropertyChanged和不同的线程

来自分类Dev

使用不同的游戏模式和设置来创建游戏,如何处理所有不同的设置?

来自分类Dev

在fortran上使用openmp和fftw

来自分类Dev

在fortran上使用openmp和fftw

来自分类Dev

如何使用cex.axis为x和y轴设置不同的字体大小

来自分类Dev

如何使用构建类型(调试与发行版)设置不同的样式和应用名称?

来自分类Dev

如何使用构建类型(调试与发行版)设置不同的样式和应用名称?

来自分类Dev

Dart:如何在调试和生产模式下使用不同的设置?

来自分类Dev

如何使用cex.axis为x和y轴设置不同的字体大小

来自分类Dev

如何设置numpy浮点精度?

来自分类Dev

如何使用jmeter为每个线程使用不同的CSV

来自分类Dev

如何使用正确的架构编译FFTW库?

来自分类Dev

如何使用JQuery设置不同的CSS属性?

来自分类Dev

如何使用JQuery设置不同的CSS属性?

来自分类Dev

如何使用matplotlib在pytorch上显示损耗和精度图

来自分类Dev

如何使用升压多精度计算大整数和双精度数

来自分类Dev

Keras:使用model.train_on_batch()和model.fit()获得不同的精度。可能是什么原因以及如何解决?

来自分类Dev

背景工和不同的线程

来自分类Dev

背景工和不同的线程

来自分类Dev

如何使用OpenMP为每个功能分配不同数量的线程

来自分类Dev

使用桃子时,随机状态如何传播到不同的线程?

来自分类Dev

如何从不同的线程使用java.util.logging.Logger?

来自分类Dev

如何使用 gdb 从不同线程获取 ruby 回溯

来自分类Dev

如何使用一个按钮将 getText 和 setText 设置为 3 个不同的 EditTexts 和 TextViews

Related 相关文章

  1. 1

    如何为不同的线程组设置不同数量的线程?

  2. 2

    如何使用精度和距离

  3. 3

    通过两个不同的线程设置和访问变量

  4. 4

    如何使用计时器和不同的线程使代码平稳运行

  5. 5

    如何使用匿名方法设置线程名称?

  6. 6

    RaisePropertyChanged和不同的线程

  7. 7

    使用不同的游戏模式和设置来创建游戏,如何处理所有不同的设置?

  8. 8

    在fortran上使用openmp和fftw

  9. 9

    在fortran上使用openmp和fftw

  10. 10

    如何使用cex.axis为x和y轴设置不同的字体大小

  11. 11

    如何使用构建类型(调试与发行版)设置不同的样式和应用名称?

  12. 12

    如何使用构建类型(调试与发行版)设置不同的样式和应用名称?

  13. 13

    Dart:如何在调试和生产模式下使用不同的设置?

  14. 14

    如何使用cex.axis为x和y轴设置不同的字体大小

  15. 15

    如何设置numpy浮点精度?

  16. 16

    如何使用jmeter为每个线程使用不同的CSV

  17. 17

    如何使用正确的架构编译FFTW库?

  18. 18

    如何使用JQuery设置不同的CSS属性?

  19. 19

    如何使用JQuery设置不同的CSS属性?

  20. 20

    如何使用matplotlib在pytorch上显示损耗和精度图

  21. 21

    如何使用升压多精度计算大整数和双精度数

  22. 22

    Keras:使用model.train_on_batch()和model.fit()获得不同的精度。可能是什么原因以及如何解决?

  23. 23

    背景工和不同的线程

  24. 24

    背景工和不同的线程

  25. 25

    如何使用OpenMP为每个功能分配不同数量的线程

  26. 26

    使用桃子时,随机状态如何传播到不同的线程?

  27. 27

    如何从不同的线程使用java.util.logging.Logger?

  28. 28

    如何使用 gdb 从不同线程获取 ruby 回溯

  29. 29

    如何使用一个按钮将 getText 和 setText 设置为 3 个不同的 EditTexts 和 TextViews

热门标签

归档