【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧

image.png

本文分享至飞腾开发者平台《飞腾平台FFTW-FT安装使用指南》

1 介绍

  FFTW (Faster Fourier Transform in the West)是一个快速计算离散傅里叶变换的标准C语言程序集,本文介绍了如何在飞腾平台上安装使用FFTW-FT。

2 环境要求

2.1 硬件环境

  硬件环境如下表所示。

项目说明
CPUFT-2000+/64、飞腾腾云 S2500、FT-2000/4、飞腾腾锐 D2000
网络
存储
内存

2.2 软件环境

  软件环境如下表所示。

项目版本下载地址
OScentos8.2、Kylin V10、 Ubuntu19.10
GCC9.2.1、7.3.0、8.3.1、 9.3.0
GNU Binutils2.32、2.33、2.34、 2.35
Glibc2.28、2.23、2.31、 2.30
FFTW-FT源代码包3.3.8fftw_double-3.3.8.tar.gz fftw_single-3.3.8.tar.gz
FFTW-FT库 fftwlib.tar.gz
Benchfft3.1http://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和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。


飞腾开发者
6 声望3 粉丝

飞腾开发者技术小助手,定期分享飞腾技术文档,助力开发者打怪升级。更多材料获取:[链接]