【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧
本文分享至飞腾开发者平台《飞腾平台FFTW-FT安装使用指南》
1 介绍
FFTW (Faster Fourier Transform in the West)是一个快速计算离散傅里叶变换的标准C语言程序集,本文介绍了如何在飞腾平台上安装使用FFTW-FT。
2 环境要求
2.1 硬件环境
硬件环境如下表所示。
项目 | 说明 |
---|---|
CPU | FT-2000+/64、飞腾腾云 S2500、FT-2000/4、飞腾腾锐 D2000 |
网络 | |
存储 | |
内存 |
2.2 软件环境
软件环境如下表所示。
项目 | 版本 | 下载地址 |
---|---|---|
OS | centos8.2、Kylin V10、 Ubuntu19.10 | |
GCC | 9.2.1、7.3.0、8.3.1、 9.3.0 | |
GNU Binutils | 2.32、2.33、2.34、 2.35 | |
Glibc | 2.28、2.23、2.31、 2.30 | |
FFTW-FT源代码包 | 3.3.8 | fftw_double-3.3.8.tar.gz fftw_single-3.3.8.tar.gz |
FFTW-FT库 | fftwlib.tar.gz | |
Benchfft | 3.1 | http://www.fftw.org/benchfft/benchfft-3.1.tar.gz |
3 部署FFTW-FT
两种安装方式:
3.1 库安装
步骤一 获取FFTW-FT库压缩包fftwlib.tar.gz
步骤二 解压缩fftwlib.tar.gz,解压缩目录下包含FFTW单/双精度库的动态库和静态库以及头文件
步骤三 设置库路径
export LD_LIBRARY_PATH=$FFTW_LIB_PATH/lib:$LD_LIBRARY_PATH
生成的库在解压文件夹中的 lib 目录中
3.2 源代码安装
3.2.1 双精度库安装
步骤一 获取FFTW-FT双精度安装包fftw_double-3.3.8.tar.gz。
步骤二 解压FFTW-FT双精度安装包fftw_double-3.3.8.tar.gz。
步骤三 进入解压后文件夹,执行以下命令进行配置编译安装。
./configure --enable-shared --disable-fortran --prefix="$FFTW_LIB_PATH"
make –j
make install
步骤四 设置库路径
export LD_LIBRARY_PATH=\$FFTW_LIB_PATH/lib:\$LD_LIBRARY_PATH
3.2.2 单精度库安装
步骤一 获取FFTW-FT单精度安装包fftw_single-3.3.8.tar.gz。
步骤二 解压FFTW-FT单精度安装包fftw_single-3.3.8.tar.gz。
步骤三 进入解压后文件夹,执行以下命令进行配置编译安装。
./configure --enable-shared --disable-fortran --enable-float
--prefix="$FFTW_LIB_PATH"
make -j
make install
步骤四 设置库路径
export LD_LIBRARY_PATH=\$FFTW_LIB_PATH/lib:\$LD_LIBRARY_PATH
4 使用FFTW-FT
4.1 示例程序框架
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "$FFTW_INC_PATH/fftw3.h" //fftw头文件所在路径
int main(void)
{
fftwf_complex *in,*out;
fftwf_plan p;
int N=4*1024*1024;
int i;
for(N=128;N\<=4\*1024\*1024;N\*=2)
{
in=(fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*N);
out=(fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*N);
p=fftwf_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_PATIENT); //生成策略
if((in == NULL)\|\|(out==NULL))
{
printf("Error:insufficient available memory!\n");
}
else
{
for(i=0;i<N;i++)
{
in[i][0]=i+1;
in[i][1]=0;
}
}
fftwf_execute(p); //执行变换
fftwf_destroy_plan(p);
fftwf_cleanup();
fftwf_free(in);
ftwf_free(out);
}
}
4.2 程序框架说明
本程序框架首先需要用户初始化输入数据,然后调用库函数接口来生成策略,最后调用策略执行接口执行策略。
4.2.1 内存空间的申请与释放
使用库函数fftwf_malloc分配空间,使用库函数fftwf_free来释放相应的地址空间。
使用库函数fftwf_plan声明的变量,使用库函数fftwf_destroy_plan来释放相应的地址空间。
4.2.2 FFTW策略接口
上面程序框架中,FFTW的策略生成接口函数为fftwf_plan_dft_1d,其参数列表为(int n,fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags)。参数n为待变换的数据规模,in、out分别为输入、输出数据的地址。sign控制是做DFT变换(FFTW_FORWARD)还是IDFT变换(FFTW_BACKWARD)。flags控制使用哪种策略生成方案,一般为FFTW_PATIENT、FFTW_MEASURE、FFTW_ESTIMATE等。
4.3 示例程序编译
4.3.1 使用动态库
export LD_LIBRARY_PATH=$FFTW_LIB_PATH/lib:$LD_LIBRARY_PATH
gcc demo.c -I$FFTW_INC_PATH -L$FFTW_LIB_PATH -lfftw3f -lm
4.3.2 使用静态库
gcc demo.c -I$FFTW_INC_PATH -L$FFTW_LIB_PATH $FFTW_LIB_PATH/libfftw3f.a
-lm
其中的$FFTW_INC_PATH和$FFTW_LIB_PATH即FFTW头文件和库文件所在位置
5 使用benchfft进行性能验证
针对单精度或双精度分别进行验证,验证之前确保单精度fftw库和双精度fftw库都已正确生成。
5.1 单精度性能验证
步骤一 获取性能测试工具安装包benchfft-3.1.tar.gz。
步骤二 解压性能测试工具安装包benchfft-3.1.tar.gz。
步骤三 在解压后的benchfft文件夹中执行以下命令:
./configure --build=arm-aarch64-linux CC="gcc -march=armv8-a+simd"
CFLAGS="-O3 -ftree-vectorize -ffast-math -L$FFTW _LIB_PATH" --enable-single
其中$FFTW _LIB_PATH为单精度fftw库的安装路径,确保该目录下已生成libfftw3f.a
make -k
进入benchfft/benchees/fftw3/,确保该目录下生成最新的可执行文件doit即可,然后运行:
make -k benchmark
目录benchfft/benchees/fftw3/下生成的doit.single.info文件描述本次批量测试的环境配置信息,
doit.single.speed文件描述本次批量测试中不同规模不同类型的fft实际执行性能。
5.2 双精度性能验证
步骤一 获取性能测试工具安装包benchfft-3.1.tar.gz。
步骤二 解压性能测试工具安装包benchfft-3.1.tar.gz。
步骤三 在解压后的benchfft文件夹中执行以下命令:
./configure --build=arm-aarch64-linux CC="gcc -march=armv8-a+simd"
CFLAGS="-O3 -ftree-vectorize -ffast-math -L$FFTW _LIB_PATH"
其中$FFTW _LIB_PATH为双精度fftw库的安装路径,确保该目录下已生成libfftw3.a
make -k
进入benchfft/benchees/fftw3/,确保该目录下生成最新的可执行文件doit即可,然后运行:
make -k benchmark
目录benchfft/benchees/fftw3/下生成doit.double.info文件描述本次批量测试的环境配置信息,doit.double.speed文件描述本次批量测试中不同规模不同类型的fft实际执行性能。
推荐阅读
欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料
如开发者在使用飞腾产品有任何问题可通过在线工单联系我们
版权所有。飞腾信息技术有限公司 2023。保留所有权利。
未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。
商标声明
Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。
本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。