当前位置: 首页 > news >正文

大型网站域名西宁解封最新通知

大型网站域名,西宁解封最新通知,番禺做网站800元,网站乱码FFTW基本概念与安装使用 1 基本概念2 编译安装3 使用实例3.1 单线程3.2 多线程 本文主要介绍FFTW库的基本概念、编译安装和使用方法。 1 基本概念 FFTW (Fastest Fourier Transform in the West)是C语言的一个子程序库#xff0c;用于计算一维或多维离散傅里叶变换(Discrete … FFTW基本概念与安装使用 1 基本概念2 编译安装3 使用实例3.1 单线程3.2 多线程 本文主要介绍FFTW库的基本概念、编译安装和使用方法。 1 基本概念 FFTW (Fastest Fourier Transform in the West)是C语言的一个子程序库用于计算一维或多维离散傅里叶变换(Discrete Fourier transform, DFT)输入可以是任意长度的实数或复数数组。最新的版本为3.3.10所以也记为FFTW3。 FFTW的计算流程包括规划(planning)和执行(execution)两个阶段。在规划阶段规划器(planner)会根据用户输入的复杂问题递归的分解为更简单的子问题当子问题足够简单时便调用预定义的代码直接解决。由此形成诸多解决问题的方案(plans)并从其中选择速度最快的一种方案确定后便可进入执行阶段。在执行阶段用户按照数据结构输入待变换数组然后按照方案逐步执行最后输入变换后的数组。 对于给定傅里叶变换问题FFTW规划器能够给出解决问题的一系列方案并从中选择最快的一种。FFTW能够解决多维的傅里叶变换问题定义二维傅里叶变换的输入数据数组为n0×n1三维傅里叶变换的输入数据数组为n0×n1×n2。数组中数据的顺序为row-major顺序即最后一个维度的索引变化最快(n0×n1表示n0个n1点的序列n1连续变化)。FFTW有4中工作模式 单线程单内存使用一个线程、且数据存储到一个内存中。多线程共享内存为提升计算速度可以使用多线程并行进行一维或多维的傅里叶变换所有线程使用同一共享内存。多核分布式内存当变换的矩阵非常大以至于单处理器的内存容量不足时分布式内存并行处理架构则变得非常实用。在该架构下每个处理器具备独立的内存成千上万个处理器构成一个集群。每个处理器对应的内存仅存储待变换数组的一部分数据从内存中读取相应的数据进行傅里叶变换。因此在进行多维傅里叶变换时需要在分布式内存之间进行数据交互数据交互方式使用MPI (Message-Passing Interface)。多处理器多线程FFTW也支持多处理器和多线程同时使用例如具备4个支持共享内存的处理器节点可以在每个节点内使用多线程进行并行计算在节点间使用MPI进行数据交互。由于计算流程和数据交互更加复杂需要进行详细的设计。 2 编译安装 从FFTW官网下载FFTW3.3.10依次执行下述命令对软件进行配置、编译和安装。 配置./configure --enable-threads编译make安装make install安装依赖 Ubuntusudo apt-get install libfftw3-dev libfftw3-doc libfftw3-double3CentOSyum install fftw-devel 卸载make distclean 根据第三节说明编写程序程序命名为fftw.cpp执行下述编译语句进行编译和运行-lfftw3表示使用fftw3的库进行编译-lfftw3_threads表示使用多线程的库。 编译 单线程编译g -o fftw fftw.cpp -lfftw3多线程编译g -o fftw fftw.cpp -lfftw3 -lfftw3_threads -lm 运行./fftw 3 使用实例 3.1 单线程 一维傅里叶变换 #include complex #include fstream #include iomanip #include iostream #include ctime #include chrono #include unistd.h #include fftw3.husing namespace std;int main() {const int len 8; //序列长度fftw_complex *in, *out; //定义输入输出变量fftw_plan plan; //定义方案in (fftw_complex*) fftw_malloc (sizeof(fftw_complex) * len); //分配输入空间out (fftw_complex*) fftw_malloc (sizeof(fftw_complex) * len); //分配输出空间// 初始化输入信号for (int i 0; i len; i) {in[i][0] 35.24 * i; //实部in[i][1] -27.62 * i; //虚部std::cout in[i][0] in[i][1] std::endl;}// 定义fftw_planplan fftw_plan_dft_1d(len, in, out, FFTW_FORWARD, FFTW_ESTIMATE);//plan fftw_plan_dft_1d(len, in, out, FFTW_FORWARD, FFTW_MEASURE);// 执行fftauto start std::chrono::high_resolution_clock::now();fftw_execute(plan);//usleep(1);auto end std::chrono::high_resolution_clock::now();auto duration std::chrono::duration_caststd::chrono::microseconds(end - start).count();std::cout 程序运行时间: duration 微秒 std::endl;// 输出结果ofstream fout(out.txt);int w 36;for (int i 0; i len; i) {if (out[i][1] 0) {fout out[i][0] out[i][1] ;}else {fout out[i][0] out[i][1] ;}}// 释放内存fftw_cleanup();fftw_free(in);fftw_free(out);return 0; }二维傅里叶变换 #include complex #include fstream #include iomanip #include iostream #include ctime #include chrono #include unistd.h #include fftw3.husing namespace std;#define ROWS 64 #define COLS 64int main() {fftw_complex *in, *out; //定义输入输出变量fftw_plan plan; //定义方案in (fftw_complex*) fftw_malloc (sizeof(fftw_complex)*ROWS*COLS); //分配输入空间out (fftw_complex*) fftw_malloc (sizeof(fftw_complex)*ROWS*COLS); //分配输出空间// 初始化输入信号for (int i 0; i ROWS; i) {for (int j 0; j COLS; j) {in[i*COLSj][0] 35.24 * i; //实部in[i*COLSj][1] -27.62 * j; //虚部std::cout in[i*COLSj][0] in[i*COLSj][1] std::endl;}}// 定义fftw_planplan fftw_plan_dft_2d(ROWS, COLS, in, out, FFTW_FORWARD, FFTW_ESTIMATE);//plan fftw_plan_dft_1d(len, in, out, FFTW_FORWARD, FFTW_MEASURE);// 执行fftauto start std::chrono::high_resolution_clock::now();fftw_execute(plan);//usleep(1);auto end std::chrono::high_resolution_clock::now();auto duration std::chrono::duration_caststd::chrono::microseconds(end - start).count();std::cout 程序运行时间: duration 微秒 std::endl;// 输出结果ofstream fout(results_cpp);int w 36;for (int i 0; i ROWS; i) {for (int j 0; j COLS; j) {if (out[i*COLSj][1] 0) {fout out[i*COLSj][0] out[i*COLSj][1] ;}else {fout out[i*COLSj][0] out[i*COLSj][1] ;}if (j COLS-1) {fout endl;}}}// 释放内存fftw_cleanup();fftw_free(in);fftw_free(out);return 0; }三维傅里叶变换 #include complex #include fstream #include iomanip #include iostream #include ctime //计时 #include chrono //计时 #include unistd.h //usleep函数 #include string.h #include stdio.h #include fftw3.husing namespace std;#define HIGH 64 #define ROWS 64 #define COLS 64int main() {fftw_complex *in, *out; //定义输入输出变量fftw_plan plan; //定义方案int i, j, k;in (fftw_complex*) fftw_malloc (sizeof(fftw_complex)*HIGH*ROWS*COLS); //分配输入空间out (fftw_complex*) fftw_malloc (sizeof(fftw_complex)*HIGH*ROWS*COLS); //分配输出空间// 初始化输入信号for (k 0; k HIGH; k) {for (j 0; j ROWS; j) {for (i 0; i COLS; i) {in[k*ROWS*COLSj*COLSi][0] k*215.42 35.24*i; //实部in[k*ROWS*COLSj*COLSi][1] k*215.42 - 27.62*j; //虚部//std::cout in[k*ROWS*COLSj*COLSi][0] in[k*ROWS*COLSj*COLSi][1] std::endl;}}}/*ifstream fin(data);string line; //读取文件的每一行string value; //每一行的数据int cnt;int pos; //分割符位置int len; //字符串长度k j cnt 0;while (getline(fin, line)) {j cnt / COLS;if (cnt COLS * ROWS) {k;cnt 0;} else {cnt cnt COLS;}len line.size(); //字符串长度if (len 0) {continue; //跳过空行}for (i 0; i COLS; i) {len line.size();pos line.find( ); //查找字符在字符串中的位置value line.substr(0,pos);//std::cout value ;line line.substr(pos1,len); //剩余字符串//std::cout line endl;//if (i COLS-1) {// std::cout endl;//}in[k*ROWS*COLSj*COLSi][0] stof(value); //实部in[k*ROWS*COLSj*COLSi][1] 0; //虚部//std::cout in[k*ROWS*COLSj*COLSi][0] in[k*ROWS*COLSj*COLSi][1] std::endl;}}*/// 定义fftw_planplan fftw_plan_dft_3d(HIGH, ROWS, COLS, in, out, FFTW_FORWARD, FFTW_ESTIMATE);// 执行fftauto start std::chrono::high_resolution_clock::now();fftw_execute(plan);//usleep(1);auto end std::chrono::high_resolution_clock::now();auto duration std::chrono::duration_caststd::chrono::microseconds(end - start).count();std::cout 程序运行时间: duration 微秒 std::endl;// 输出结果ofstream fout(results_cpp);for (k 0; k HIGH; k) {for (j 0; j ROWS; j) {for (i 0; i COLS; i) {if (out[k*ROWS*COLSj*COLSi][1] 0) {fout out[k*ROWS*COLSj*COLSi][0] out[k*ROWS*COLSj*COLSi][1] ;} else {fout out[k*ROWS*COLSj*COLSi][0] out[k*ROWS*COLSj*COLSi][1] ;}if (i COLS-1) {fout endl;}if (jROWS-1 iCOLS-1) {fout endl;}}}}// 释放内存fftw_cleanup();fftw_free(in);fftw_free(out);return 0; }3.2 多线程 三维傅里叶变换 #include complex #include fstream #include iomanip #include iostream #include ctime //计时 #include chrono //计时 #include unistd.h //usleep函数 #include string.h #include stdio.h #include fftw3.husing namespace std;#define HIGH 64 #define ROWS 64 #define COLS 64int main() {fftw_complex *in, *out; //定义输入输出变量fftw_plan plan; //定义方案int nthreads; //使用的线程数int i, j, k;in (fftw_complex*) fftw_malloc (sizeof(fftw_complex)*HIGH*ROWS*COLS); //分配输入空间out (fftw_complex*) fftw_malloc (sizeof(fftw_complex)*HIGH*ROWS*COLS); //分配输出空间nthreads 12;// 初始化输入信号for (k 0; k HIGH; k) {for (j 0; j ROWS; j) {for (i 0; i COLS; i) {in[k*ROWS*COLSj*COLSi][0] k*215.42 35.24*i; //实部in[k*ROWS*COLSj*COLSi][1] k*215.42 - 27.62*j; //虚部//std::cout in[k*ROWS*COLSj*COLSi][0] in[k*ROWS*COLSj*COLSi][1] std::endl;}}}/*// 从文件输入数据 ifstream fin(data);string line; //读取文件的每一行string value; //每一行的数据int cnt;int pos; //分割符位置int len; //字符串长度k j cnt 0;while (getline(fin, line)) {j cnt / COLS;if (cnt COLS * ROWS) {k;cnt 0;} else {cnt cnt COLS;}len line.size(); //字符串长度if (len 0) {continue; //跳过空行}for (i 0; i COLS; i) {len line.size();pos line.find( ); //查找字符在字符串中的位置value line.substr(0,pos);//std::cout value ;line line.substr(pos1,len); //剩余字符串//std::cout line endl;//if (i COLS-1) {// std::cout endl;//}in[k*ROWS*COLSj*COLSi][0] stof(value); //实部in[k*ROWS*COLSj*COLSi][1] 0; //虚部//std::cout in[k*ROWS*COLSj*COLSi][0] in[k*ROWS*COLSj*COLSi][1] std::endl;}}*/fftw_init_threads();fftw_plan_with_nthreads(nthreads);plan fftw_plan_dft_3d(HIGH, ROWS, COLS, in, out, FFTW_FORWARD, FFTW_ESTIMATE); // 定义fftw_planauto start std::chrono::high_resolution_clock::now();fftw_execute(plan); // 执行fft//usleep(1);auto end std::chrono::high_resolution_clock::now();auto duration std::chrono::duration_caststd::chrono::microseconds(end - start).count();std::cout 程序运行时间: duration 微秒 std::endl;// 输出结果ofstream fout(results_cpp);for (k 0; k HIGH; k) {for (j 0; j ROWS; j) {for (i 0; i COLS; i) {if (out[k*ROWS*COLSj*COLSi][1] 0) {fout out[k*ROWS*COLSj*COLSi][0] out[k*ROWS*COLSj*COLSi][1] ;} else {fout out[k*ROWS*COLSj*COLSi][0] out[k*ROWS*COLSj*COLSi][1] ;}if (i COLS-1) {fout endl;}if (jROWS-1 iCOLS-1) {fout endl;}}}}// 释放内存fftw_cleanup();fftw_free(in);fftw_free(out);return 0; }
http://www.hkea.cn/news/14335987/

相关文章:

  • 高阳县做企业网站qq手机版在线登录入口
  • 汽修网站建设免费溧阳网页设计
  • 图库网站cms网站模板定制
  • 一站式外贸服务平台网站流量统计表格
  • php wordpress 关系南通百度网站快速优化
  • 怎么查询网站有没备案源码如何搭建网站
  • 做啤酒纸箱包装的网站医药外贸是做什么的
  • 什么是自主设计网站常州网站建设书生商友
  • 万网网站开发wordpress搜索框
  • 卡盟网站开发阿里云网站模板
  • 公司网站主页怎么做免费动漫网站
  • 大二学生做网站难吗百度seo营销推广多少钱
  • 网站更新迭代运营公众号还是做网站
  • 网站交互行为做面食专业网站
  • 手机膜 东莞网站建设东莞常平翔龙天地
  • 长沙创意网站建设网站和搜索引擎
  • 网页游戏网站排行猪八戒小程序开发报价
  • 广州做网站公司电话太原小程序制作电话
  • 别人做的网站域名到期怎么办扬州天达建设集团有限公司网站
  • 模板建站适屏黑龙江网站建设seo优化
  • 做网站公司需要多少钱四川建设银行手机银行下载官方网站下载安装
  • 关于网站建设管理的通知超级软文网
  • 密云做网站的分类信息网站发布标题
  • 重庆网站开发公阿克苏网站开发
  • 做网站后有人抢注关键词软件开发技术服务合同
  • 网站建设公司发展理念计算机培训机构
  • 网站前端如何做兼职网站宣传平台
  • 如何在自己电脑上做网站网站入侵怎么做
  • 手机如何做车载mp3下载网站网址域名查询
  • html5video网站佛山市企业网站seo点击软件