1、环境配置:
(1)NDK的环境;
(2)ARM的CPU;

normal neon openMP
56 64 37(存在波动)

测试实例1:normal,正常的测试一个求float类型的平方的一个例子;具体 如下
void computeMap(float* in, float* out, int LEN){
TRACE_B();
for(int i=0 ;i<LEN;i++)
{
out[i]=in[i]in[i];
}
}
测试实例 2:neno方式的应用,通过对一个128位字节,一次计算4个float类型的平方的计算来加快计算;具体如下;
void computeNeno(float
in, float* out, int LEN){
TRACE_B();
int end=LEN-LEN%4;
for(int i=0;i<end;i=i+4){
float32x4_t a = vld1q_f32(in+i);
a=vmulq_f32(a,a);
vst1q_f32(out+i,a);
}
for(int j=end;j<LEN;j++){
out[j]=in[j]in[j];
}
}
测试实例3:OpenMP方式的应用,通过设定#pragma omp parallel for来对neno方式中的for循环实现多线程的并行,但需注意每次循环之间不能有关系。不然多线程的计算时序可能会影响计算的结果,例如累加求和的方式就有一定的局限性,但是也有方式解决;
void computeOmp(float
in, float* out, int LEN){
TRACE_B();
int end=LEN-LEN%4;
#pragma omp parallel for
for(int i=0;i<end;i=i+4){
float32x4_t a = vld1q_f32(in+i);
a=vmulq_f32(a,a);
vst1q_f32(out+i,a);
}
for(int j=end;j<LEN;j++){
out[j]=in[j]*in[j];
}
}
以上测试用例中,方式一(normal)和方式二(neno)的性能测试数据,相差无几,neno 并没有起到预期的性能提升,此处怀疑normal方式的具体实现内部已经通过neno来做了性能够优化;
方式三(openmap)中通过指令来实现多线程来实现for循环的方式也不太稳定,在某些测测试中有明显提升,但是大部分的测试测试中并没有带来很好的测试预期数据;具体原因还不明;需要进一步的分析;
下面附上有几组三种测试方式的测试性能数据;每一个循环依次代表三种测试用例;
18365.047 I [T_BEG] main computeMap() E
18365.100 I [T_END] main computeMap() X. perf:53.61ms
18365.101 I [T_BEG] main computeNeno() E
18365.154 I [T_END] main computeNeno() X. perf:53.53ms
18365.154 I [T_BEG] main computeOmp() E
18365.214 I [T_END] main computeOmp() X. perf:60.01ms
18365.215 D main
round:1
18365.215 I [T_BEG] main computeMap() E
18365.272 I [T_END] main computeMap() X. perf:57.01ms
18365.272 I [T_BEG] main computeNeno() E
18365.334 I [T_END] main computeNeno() X. perf:62.33ms
18365.334 I [T_BEG] main computeOmp() E
18365.396 I [T_END] main computeOmp() X. perf:61.34ms
18365.396 D main
round:2
18365.396 I [T_BEG] main computeMap() E
18365.456 I [T_END] main computeMap() X. perf:60.05ms
18365.456 I [T_BEG] main computeNeno() E
18365.521 I [T_END] main computeNeno() X. perf:64.98ms
18365.522 I [T_BEG] main computeOmp() E
18365.584 I [T_END] main computeOmp() X. perf:62.37ms
18365.585 D main
round:3
18365.585 I [T_BEG] main computeMap() E
18365.646 I [T_END] main computeMap() X. perf:60.52ms
18365.646 I [T_BEG] main computeNeno() E
18365.712 I [T_END] main computeNeno() X. perf:65.20ms
18365.712 I [T_BEG] main computeOmp() E
18365.774 I [T_END] main computeOmp() X. perf:62.06ms
18365.775 D main
round:4
18365.775 I [T_BEG] main computeMap() E
18365.832 I [T_END] main computeMap() X. perf:57.18ms
18365.833 I [T_BEG] main computeNeno() E
18365.893 I [T_END] main computeNeno() X. perf:60.46ms
18365.893 I [T_BEG] main computeOmp() E
18365.955 I [T_END] main computeOmp() X. perf:61.68ms
18365.955 D main
round:5
18365.955 I [T_BEG] main computeMap() E
18366.008 I [T_END] main computeMap() X. perf:52.84ms
18366.008 I [T_BEG] main computeNeno() E
18366.069 I [T_END] main computeNeno() X. perf:60.86ms
18366.069 I [T_BEG] main computeOmp() E
18366.130 I [T_END] main computeOmp() X. perf:61.57ms
18366.130 D main
round:6
18366.130 I [T_BEG] main computeMap() E
18366.186 I [T_END] main computeMap() X. perf:55.90ms
18366.186 I [T_BEG] main computeNeno() E
18366.250 I [T_END] main computeNeno() X. perf:63.44ms
18366.250 I [T_BEG] main computeOmp() E
18366.311 I [T_END] main computeOmp() X. perf:60.65ms
18366.311 D main
round:7
18366.311 I [T_BEG] main computeMap() E
18366.370 I [T_END] main computeMap() X. perf:58.36ms
18366.370 I [T_BEG] main computeNeno() E
18366.434 I [T_END] main computeNeno() X. perf:64.35ms
18366.435 I [T_BEG] main computeOmp() E
18366.495 I [T_END] main computeOmp() X. perf:60.55ms
18366.495 D main
round:8
18366.495 I [T_BEG] main computeMap() E
18366.553 I [T_END] main computeMap() X. perf:57.55ms
18366.553 I [T_BEG] main computeNeno() E
18366.613 I [T_END] main computeNeno() X. perf:60.20ms
18366.614 I [T_BEG] main computeOmp() E
18366.675 I [T_END] main computeOmp() X. perf:61.62ms
18366.675 D main
round:9
18366.675 I [T_BEG] main computeMap() E
18366.732 I [T_END] main computeMap() X. perf:56.57ms
18366.732 I [T_BEG] main computeNeno() E
18366.796 I [T_END] main computeNeno() X. perf:64.04ms
18366.796 I [T_BEG] main computeOmp() E
18366.834 I [T_END] main computeOmp() X. perf:37.78ms

附一:OpenMP多线程应用程序性能的 影响因素:
1、OpenMP本身的开销; OpenMP获得应用程序多线程并行化的能力需要程序库的支持,程序库的执行需要开销,所以只有在并行执行代码负担足够大,而引入OpenMP本身的开销又足够小时,引入并行化操作才能提高程序执行效率。
2、负载均衡;
3、线程同步带来的开销;
附二:OpenMP的常用制导指令;
1、parallel制导指令用来创建并行域,后边要跟一个大括号将要并行执行的代码放在一起
#pragma omp parallel
{
cout << “Test” << endl;
}
其中的输出test会根据所应用的CPU是几核而输出几次;
2、使用parallel制导指令只是产生了并行域,让多个线程分别执行相同的任务,并没有实际的使用价值。parallel for用于生成一个并行域,并将计算任务在多个线程之间分配,从而加快计算运行的速度。可以让系统默认分配线程个数,也可以使用num_threads子句指定线程个数。
#pragma omp parallel for num_threads(6)
for (int i = 0; i < 12; i++)
{
printf(“OpenMP Test, 线程编号为: %d\n”, omp_get_thread_num());
}

但是实例三的测试验证中通过设定#pragma omp parallel for num_threads()设定1 2 4 8等线程数时性能都没有多大的变化。。。。。。

Neno和OpenMP的性能提升验证相关推荐

  1. 图像检索:layer选择与fine-tuning性能提升验证

    这个世界上肯定有另一个我,做着我不敢做的事,过着我想过的生活.一个人逛街,一个人吃饭,一个人旅行,一个人做很多事.极致的幸福,存在于孤独的深海.在这样日复一日的生活里,我逐渐和自己达成和解. 作为迁移 ...

  2. 深度干货!如何将深度学习训练性能提升数倍?

    作者 | 车漾,阿里云高级技术专家 顾荣,南京大学副研究员 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 近些年,以深度学习为代表的人工智能技术 ...

  3. 干货回顾丨深度学习性能提升的诀窍

    Pedro Ribeiro Simoes拍摄 原文: How To Improve Deep Learning Performance 作者: Jason Brownlee 你是如何提升深度学习模型的 ...

  4. Puppet 4 性能提升超2倍,升级前应该你知悉的变化

    1.激动人心的改进 \ Puppet4的第一个正式版本于2015年4月15日发布截止到2016年12月28日Puppet已正式发布了4.8.1版本.Puppet4与3.x版本相比有两点不同:很多的变化 ...

  5. huge page 能给MySQL 带来性能提升吗?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 转自公众号:yangyidba 一 前言 最近一直在做性能压测相关的事情,有公众号的读者朋友 ...

  6. 深度学习性能提升的诀窍

    from: http://geek.csdn.net/news/detail/104190 原文: How To Improve Deep Learning Performance 作者: Jason ...

  7. 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿上市,性能提升20%,AI算力乘5倍...

    对于笔记本用户来说,今年底似乎是个换机的好时候. 机器之心报道,机器之心编辑部. 传闻已久的 11 代酷睿正式发布了.Tiger Lake 今天的上市,预示着英特尔的 10 纳米芯片正式铺开.这一次新 ...

  8. python gc内存_禁用 Python GC,Instagram 性能提升10%

    通过关闭 Python 垃圾收集(GC)机制,该机制通过收集和释放未使用的数据来回收内存,Instagram 的运行效率提高了 10 %.是的,你没听错!通过禁用 GC,我们可以减少内存占用并提高 C ...

  9. 性能提升约 7 倍!Apache Flink 与 Apache Hive 的集成

    导读:随着 Flink 在流式计算的应用场景逐渐成熟和流行,如果 Flink 能同时把批量计算的应用场景处理好,就能减少用户在使用 Flink 时开发和维护的成本,并且能够丰富 Flink 的生态.S ...

最新文章

  1. RichTextBox的使用
  2. 费用节省 50%,函数计算 FC 助力分众传媒降本增效
  3. IntelliJ IDEA 最常用配置详细图解,新手入门必看
  4. “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
  5. SQL Server执行计划
  6. Openfire插件开发
  7. 聊聊四种Oracle数字取整函数
  8. (55)FPGA基本约束-UCF与XDC(第11天)
  9. RS232通信之C++实现---PC端
  10. 阶段3 1.Mybatis_03.自定义Mybatis框架_1.自定义Mybatis的分析-执行查询所有分析
  11. WebService 入门教程(Java)
  12. MySQL数据库如何建立视图
  13. Linux安装Ant
  14. java计算机毕业设计学生成绩管理系统源程序+mysql+系统+lw文档+远程调试
  15. 一起学爬虫(Python) — 10
  16. canvas——绘制文字
  17. Android网页打开指定App
  18. 手把手教您搭建 AWS 大数据云平台
  19. android屏幕广播软件,广西视听app下载 广西视听(广西广播电视台手机客户端) for Android v2.2.0 安卓手机版 下载-脚本之家...
  20. 按单词的第二个字母在字母表中的顺序进行排序

热门文章

  1. 蓝墨云班课在计算机应用基础的教学,蓝墨云班课在高职《计算机应用基础》教学改革中的应用研究...
  2. 关于蓝墨云班课,视频不能拖动,但想快速搞完的解决方法
  3. 小奇的矩阵(动态规划
  4. ios 改变图片尺寸_iOS基础(十八)——调整图片尺寸和大小
  5. bzoj4246: 两个人的星座
  6. python人工智能之:六边形矩阵热图程序实战篇(一)
  7. 计算机毕业设计之java+ssm校园外卖配送系统
  8. 华为2288服务器不显示BIOS,设置BIOS - RH2288H V3 服务器 V100R003 用户指南 41 - 华为
  9. [渝粤教育] 西南科技大学 英语泛读 在线考试复习资料
  10. OpenCV (c++)使用KDTree时,得到正确结果后报Segmentation fault (core dumped)