FFTW在物探领域的并行应用实现.pdf
《FFTW在物探领域的并行应用实现.pdf》由会员分享,可在线阅读,更多相关《FFTW在物探领域的并行应用实现.pdf(49页珍藏版)》请在一课资料网上搜索。
1、FFTW在物探领域的并行实现在物探领域的并行实现 吴迪 目录 FFT简述 FFTW简介 FFTW用法 并行代码优化 总结 3 一一 FFT简述简述 模拟域 FT 模拟域 DFT 时间域 t 连续 频率域 s 连续 时间域 n 离散 频率域 k 离散 4 1 1 1 Fourier Transform FT 2 Forward FT kx F kf x edx 2 Inverse FT kx f xF k edk 一一 FFT简述简述 5 1 1 2 Discrete Fourier Transform DFT One dimension Multi dimension 1 2 0 0 1 1
2、n rki n nrknn k yF xyx wwern 2 with 0 1 1 1 i i i n nii wernid 12 1 12 21 1 121 12 111 11 000 d d nnn rkr krk ddnnn kkk y iix kkwww 一一 FFT简述简述 目录 FFT简述 FFTW简介 FFTW用法 并行代码优化 总结 7 FFTW the Fastest Fourier Transform in the West 由麻省理工学院计算机科学实验室超级计算技术组开 发的一套离散傅立叶变换 DFT 的计算库 开源 高效和 标准C语言编写的代码使其得到了非常广泛的应用
3、Intel 的数学库和Scilib 类似于Matlab的科学计算软件 都使用 FFTW做FFT计算 二二 FFTW简介简介 8 FFTW是计算离散Fourier变换 DFT 的快速C程序的一 个完整集合 1 它可计算一维或多维 实和复数据以及任意规模的 DFT 2 FFTW输入数据长度任意 3 FFTW支持任意多维数据 4 FFTW 支持SSE SSE2 Altivec和MIPS指令集 二二 FFTW简介简介 9 5 FFTW 还包含对共享和分布式存储系统的并行变换 它可自动适应你的机器 缓存 存储器大小 寄存器个数 FFTW 通常比目前其它开源Fourier变换程序都要快 FFTW 最新版本
4、为fftw 3 3 3 http www fftw org 二二 FFTW简介简介 lib machine ix86 def libfftw3 3 def 10 二二 FFTW简介简介 11 6 FFTW有三个版本的数据类型 double float和long double 使用方法如下 链接对应的库 比如libfftw3 3 libfftw3f 3 或 ibfftw3l 3 包含同样的头文件fftw3 h 将所有以小写 fftw 开头的名字替换为 fftwf float 版本 或 fftwl long double版本 比如将 fftw complex替换为fftwf complex 将ff
5、tw execute替换 为fftwf execute等 二二 FFTW简介简介 lib machine ix86 def libfftw3 3 def 目录 FFT简述 FFTW简介 FFTW用法 并行代码优化 总结 二二 FFTW用法用法 13 1 复一维变换复一维变换 include fftw complex in N out N 定义数据类型 复数组 fftw plan p 定义计划 创建计划 向前变换 p fftw plan dft 1d N in out FFTW FORWARD FFTW ESTIMATE ESTIMATE表示不运行任何计算而只是建立一个合理的计 划 fftw o
6、ne p in out 一维变换的输入 出 数组 fftw destroy plan p 用完后 取消计划 在Unix上 一个使用FFTW的程序应该与 lfftw lm相连接 二二 FFTW用法用法 14 typedef double fftw complex 2 FFTW默认使用双精度浮点进行运算 用户可以 使用float和long double来改变运算精度 虽然更 高精度的数据进行运算理论上会得到更高精度的结 果 但是由于软件系统和硬件的限制往往适得其反 因此用户要结合软硬件 系统来选择FFTW的数据类型 一 数据格式 二二 FFTW用法用法 15 void fftw malloc si
7、ze t n void fftw free void p fftw malloc考虑了数据对齐 以便使用SIMD指 令加速 所以最好不要用C函数malloc替代 而且 不要将fftw malloc和free delete等混用 尽量使 用fftw malloc分配数组 而不是上面的固定数组 因为固定数组是在栈上分配的 并且未考虑对齐 二 内存申请与释放 二二 FFTW用法用法 16 fftw plan fftw plan dft 1d int n fftw complex in fftw complex out int sign unsigned flags 第一个参数n是你要进行变换的数据大
8、小 n可以是 任何大小的正整数 接下来的两个参数是输入输出数组 的指针 这两个指针可以相同 表示就地转换以节省空 间 第四个参数sign 可以是FFTW FORWARD 1 或 FFTW BACKWARD 1 指出变换的方向 从技术角度讲 它是变换中的指数标志 三 一维计算方案 二二 FFTW用法用法 17 参数flags可以是FFTW MEASURE或FFTW ESTIMATE FFTW MEASURE表示FFTW会先计算一些FFT并测量所用的时间 以便为大小为n的变换寻找最优的计算方法 依据 机器配置和变 换的大小 n 这个过程耗费约数秒 时钟clock精度 FFTW ESTIMATE则相
9、反 它直接构造一个合理的但可能是次最优 的方案 总体来说 如果你的程序需要进行大量相同大小的FFT 并且初始化时间不重要 可以使用FFTW MEASURE FFTW MEASURE 模式下in和out数组中的值会被覆盖 所以该方式应该在用户初 始化输入数据in之前完成 二二 FFTW用法用法 18 fftw plan fftw plan dft 2d int n0 int n1 fftw complex in fftw complex out int sign unsigned flags fftw plan fftw plan dft 3d int n0 int n1 int n2 fftw
10、 complex in fftw complex out int sign unsigned flags fftw plan fftw plan dft int rank const int n fftw complex in fftw complex out int sign unsigned flags 四 多维计算方案 二二 FFTW用法用法 19 多维复数据的DFT同一维复数据的DFT用法类似 数 组in out为行优先方式 存储 fftw plan dft是一个通用的复 DFT函数 可以执行一维 二维或多维复DFT 比如对于图 像 2维数据 其变换为 fftw plan dft 2d
11、 height width 85 因为原始图像数据为height width的矩 阵 即第一维 n0 为行数 height 二二 FFTW用法用法 20 void fftw execute const fftw plan plan 一旦变换方案创建完成你就可以刷新使用你的输入 输出数组而执行多次变换 实际的变换计算工作由 fftw execute plan 来完成 完成变换后调用 fftw destroy plan plan 销毁方案 void fftw destroy plan fftw plan plan 五 方案执行 二二 FFTW用法用法 21 2 复多维变换复多维变换 include
12、 对于FFTW3 0以上版本则采用fftw3 h fftw complex in L M N 数据类型 fftwnd plan p fftwnd代表N维fftw p fftw plan dft 3d L M N in out FFTW FORWARD FFTW MEASURE 在位 in place 变换 用输出数组覆盖组 MEASURE即FFTW实际执行和测量几个FFT的执行时间 以发现计算规模为N的变换的最好方式 fftwnd one p fftwnd destroy plan p 程序编译时需与 lfftwnd lfftw lm相连接 二二 FFTW用法用法 22 3 实一维变换实一维变
13、换 include 专门针对实型数据的rfftw变换 数据类型 double in N out N rfftw plan p 计划 int k 创建计划 实到复的变换 复到实则为逆变换 p fftw plan r2r 1d N in out FFTW R2HC FFTW ESTIMATE rfftw one p in out rfftw destroy plan p 程序编译时需与 lrfftw lfftw lm相连接 二二 FFTW用法用法 23 4 实多维变换实多维变换 include 专门针对实型数据的rfftw变换 数据类型 double in M N out M N rfftw pl
14、an p 计划 int k 创建计划 实到复的变换 复到实则为逆变换 p fftw plan r2r 2d M N in out FFTW R2HC FFTW R2HC FFTW ESTIMATE rfftwnd one p in out rfftwnd destroy plan p 程序编译时需与 lrfftwnd lfftw lm相连接 二二 FFTW用法用法 24 5 FFTW的的多线程并行多线程并行 1 头文件 2 线程初始化 int fftw threads init void 3 指定线程数 fftw plan with nthreads num 4 线程清除 fftw clean
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FFTW 物探 领域 并行 应用 实现