对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数。将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间。

比较串行for循环和并行for循环的运行时间。

//并行计算
//调用openmp,通过g++ -fopenmp test.cpp -o out 编译程序
#pragma omp parallel for
for(int i=;i<LEN;i++)
fft(num[i],LEN,);

最终的运行时间:247,844,013 us

而串行fft,不调用openmp,它的运行时间为: 779,387,651 us

测试了,将32k*32k float型矩阵存储在堆上和栈上,并对比运行时间: 几乎没有区别。

查阅资料:栈的大小为1M, 大数组应该放在堆上,或者通过定义成全局变量/静态变量放在静态存储区。

fft算法:(该fft算法,不适合并行化处理,将来会寻找能够进行并行化的fft算法,继续改进)

void fft(complex<float> *x, int n, int inv)
{
complex<float> u, w, t, tt;
int m, nv2, nm1, l, le1, le, i, j, k, ip;
m = int(log(double(n)) / log(2.) + 0.5);
nv2 = n / 2;
nm1 = n - 1;
j = 0;
for (i = 0; i<nm1; i++)
{
if (i >= j) goto a;
tt = x[j];
x[j] = x[i];
x[i] = tt; a: k = nv2; b:
if (k>j) goto c;
j = j - k;
k = k / 2;
goto b; c: j = j + k;
}
for (l = 1; l <= m; l++){
le = int(pow(2.0, double(l)));
le1 = le / 2;
u = complex<float>(1.0 , 0.0);
w = complex<float>((float)cos(pi / le1), -(float)sin(pi / le1));
if (inv != 0) w = conj(w);
for (j = 0; j<le1; j++){
for (i = j; i<n; i = le + i){
ip = i + le1;
t = x[ip] * u;
x[ip] = x[i] - t;
x[i] = x[i] + t;
}
u = u*w;
}
}
if (inv != 0) {
for (i = 0; i<n; i++){
x[i] = x[i] / float(n);
}
}
}

并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)的更多相关文章

  1. WebGL着色器32位浮点数精度损失问题

    问题 WebGL浮点数精度最大的问题是就是因为js是64位精度的,js往着色器里面穿的时候只能是32位浮点数,有效数是8位,精度丢失比较严重. 这篇文章里讲了一些处理方式,但是视坐标这种方式放在我们的 ...

  2. IEEE754 32位浮点数表示范围

    6.1浮点数的数值范围 根据上面的探讨,浮点数可以表示-∞到+∞,这只是一种特殊情况,显然不是我们想要的数值范围. 以32位单精度浮点数为例,阶码E由8位表示,取值范围为0-255,去除0和255这两 ...

  3. [转载]使用32位64位交叉编码混淆来打败静态和动态分析工具 - wildsator

    0×00 摘要 混淆是一种能增加二进制分析和逆向工程难度与成本的常用技术.主流的混淆技术都是着眼于使用与目标CPU相同的机器代码,在相同的处理器模式下,隐藏代码并进行控制.本文中引入了一种新的混淆方法 ...

  4. 图像转置的SSE优化(支持8位、24位、32位),提速4-6倍。

    一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...

  5. SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍

    一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...

  6. Win10 PC一周年更新正式版14393.447 32位/64位更新补丁KB3200970下载 Flash补丁Kb3202790下载

    微软在今天凌晨推送了Win10 PC一周年更新正式版14393.447,本次更新补丁代号为KB3200970,面向Win10一周年更新正式版的PC用户. 更新日志 • 提升了多媒体音频.远程桌面以及I ...

  7. 最新Internet Download Manager (IDMan) 6.25 Build 20 32位 64位注册破解补丁

    0x00 IDMan介绍 Internet Download Manager提升你的下载速度最多达5倍,安排下载时程,或续传一半的软件.Internet Download Manager的续传功能可以 ...

  8. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

  9. iOS-程序发布-32位和64位系统的兼容

    在苹果推出iPhone5S时,64位的应用就走到了眼前.当时就看见苹果官方资料宣布iOS7.x的SDK支持了64位的应用,而且内置的应用都已经是64位. 我记得自己刚刚接触电脑时还有16位的系统,指针 ...

随机推荐

  1. Beginners Guide To Web Development

    Web Development Front End Development Back End Development

  2. Bootstrap相关资料

    WEB项目中,使用Bootstrap较多.但是一些插件却比较确实,所以整理了一份Bootstrap相关插件的地址.基本满足日常WEB开发中插件需求.并且还挺好用的 bootstrap说明文档,有问题可 ...

  3. jQuery的DOM操作实例(3)——创建节点&&编写一个弹窗

    一.原生JavaScript编写弹窗 二.jQuery编写弹窗 知识点归纳总结: 在原生JavaScript中,创建一个节点: var oDiv=document.createElement(&quo ...

  4. 你真的会玩SQL吗?EXISTS和IN之间的区别

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. 使用CoreProfiler/NanoProfiler实现跨平台&应用的整合性能调试

    摘要 NanoProfiler是一个开源.NET性能调试类库,CoreProfiler是其.NET Core版本的实现.在之前的一些文章中,我曾介绍过NanoProfiler的主要使用方式,以及如何为 ...

  6. Basic Tutorials of Redis(8) -Transaction

    Data play an important part in our project,how can we ensure correctness of the data and prevent the ...

  7. asp.net DataTable导出Excel 自定义列名

    1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ...

  8. Servlet3.0的动态

    动态的创建是为了简化配置文件的.对于我们创建的servlet,filter和listener后可以使用.这也是注解的另外一种替代方式. 动态的添加有两种,一种是基于ContextListener的,另 ...

  9. Atitit.eclise的ide特性-------abt 编译

    Atitit.eclise的ide特性-------abt 编译 为什么要在Intellij IDEA中使用Eclipse编译器 如果你使用Intellij Idea,你应该考虑使用Eclipse编译 ...

  10. JAVA的序列化和持久化的区别与联系

      持久化(Persistence) 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中.XML数据文 ...