社区
英特尔边缘计算技术
帖子详情
我的优化报告和源代码
housisong
2007-01-20 04:03:59
英特尔最近举办了一次多核平台编码优化大赛,我也参加了这次比赛;大赛代码提交阶段已经结束,所以也可以公开自己的优化过程;
源代码和详细的优化说明:
http://blog.csdn.net/housisong/archive/2007/01/20/1488465.aspx
我实现了很多个版本(包括很多失败的版本,还有很多想到的但没有空余时间去实现的方案;这部分的补充文章还没有完成),文章只介绍了我的提交过程中的优化的主线;
...全文
1083
22
打赏
收藏
我的优化报告和源代码
英特尔最近举办了一次多核平台编码优化大赛,我也参加了这次比赛;大赛代码提交阶段已经结束,所以也可以公开自己的优化过程; 源代码和详细的优化说明: http://blog.csdn.net/housisong/archive/2007/01/20/1488465.aspx 我实现了很多个版本(包括很多失败的版本,还有很多想到的但没有空余时间去实现的方案;这部分的补充文章还没有完成),文章只介绍了我的提交过程中的优化的主线;
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
flyingdog
2007-01-21
打赏
举报
回复
为什么说对于我的代码应该有效?
的确像是在拼体力活。太累了。
housisong
2007-01-21
打赏
举报
回复
其实这次的竞赛还是比较简单的;
最优方案路径很多人可能都能一眼看出来; (我走了一个弯路,跑去用代码的复杂性换取内存的顺序读取,后来发现,这完全没有意义:) 不过对于flyingdog的代码应该有效)
还是喜欢那种有一定复杂性的题,允许自己设计算法的那种:) ,但问题也不能太过复杂(时间耗不起)
拼代码级的优化好像在干体力活,呵呵
huanyun
2007-01-21
打赏
举报
回复
感觉housisong(HouSisong) flyingdog(flyingdog)以及我自己的优化方式很像啊
都是_mm_rsqrt_ps一次float迭代 一次double迭代
^_^
甚至我和housisong(HouSisong)的线程任务分配都很相似是根据CPU个数动态计算的
赖勇浩
2007-01-21
打赏
举报
回复
vc6都支持的,只不过你需要下载相应的SP包而已。
flyingdog
2007-01-21
打赏
举报
回复
哦。intel的文档中有对应的函数形式我知道。
但是我一直以为这个是icc特有的。
没想到vc2005也支持。
sjjf
2007-01-21
打赏
举报
回复
mark
茶禅如水
2007-01-21
打赏
举报
回复
谢谢了,呵呵
flyingdog
2007-01-21
打赏
举报
回复
to zidongli
有关我的程序的并行化说明,请看
http://blog.csdn.net/flyingdog/archive/2007/01/21/1489183.aspx
huanyun
2007-01-21
打赏
举报
回复
试过啊 不过非常慢 4秒左右
很多时间都在线程切换上了
茶禅如水
2007-01-21
打赏
举报
回复
我的是单核的,1个进程跑2个线程,
用SetPriorityClass(hProcess, REALTIME_PRIORITY_CLASS);就死机了几乎,因为没反应了。
你的程序在我这上面只能跑1个线程,呵呵!
不知道是不是不能线程数多于cpu数
huanyun你有把你的程序改成3个或更多试验一下吗?
huanyun
2007-01-21
打赏
举报
回复
死机估计是线程调度的问题
我之前也没用这个 后来发现开的软件多了就慢好多
我就加上了 SetPriorityClass(hProcess, REALTIME_PRIORITY_CLASS);
一直也没有发现死机.
flyingdog
2007-01-21
打赏
举报
回复
但是我觉得整个r数组才20来K,对于L1 cache 32K来说,可以算好几乎所有的数据都在L1 cache中。而对于L1 cache的访问,酷睿 2每次访问128bit,延迟都是3周期,写入是2周期。写入可以进去store buffer,所以实际这种强度的写入不占用周期数。读取也因为浮点加和乘耗费了大量的周期,真的到要用数据的时候都已经准备好了。而且酷睿 2支持6条还是8条正向(指针增加)访问的cache 预取。
到是当一个核计算完r数组,另外一个核要用时。即数据在原来核的L1 cache中,并且是改写状态。在酷睿 2的cache结构上,那种访问想访问内存一样。需要几十个周期。
茶禅如水
2007-01-21
打赏
举报
回复
huanyun 和 housisong 都把那段pow汇编实现了,而flyingdog没有
在icc下pow可以自动向量化,是使用了SSE2,其实达到了同样的效果
我用Vtune看了flyingdog的程序,2个线程分配的极好!有什么经验啊?!
huanyun使用了SetPriorityClass(hProcess, REALTIME_PRIORITY_CLASS);
我用了这个参数,REALTIME_PRIORITY_CLASS
机器就死机了,实时用不好很危险啊!呵呵,不过你的程序很稳定,能介绍一下吗?
茶禅如水
2007-01-21
打赏
举报
回复
huanyun
housisong
flyingdog
学习了你们的代码,很有收获。
如果用icc来编译你们的代码,我想速度其实不差多少在0.0x,呵呵
不知有没有用vc8来编译你们的代码
huanyun
2007-01-21
打赏
举报
回复
转换
double r[DIMS][NPARTS];
double r[NPARTS][DIMS];
应该有一定效果吧!
我也花了不少时间在这上面
housisong
2007-01-20
打赏
举报
回复
"编译器:Visual Studio 2005支持
#include <emmintrin.h>
_mm_sub_pd
之类的?"
恩,vc2005编译器支持; icc也支持;
你查intel的汇编指令文档的时候,都会告诉你对应的函数调用形式;
housisong
2007-01-20
打赏
举报
回复
"可惜没看到你结合Intel提供的那些工具啊"
我的AMD CPU 啊:(
pipilu1984
2007-01-20
打赏
举报
回复
优化效果很不错
可惜没看到你结合Intel提供的那些工具啊
CruelYoung123
2007-01-20
打赏
举报
回复
学习
flyingdog
2007-01-20
打赏
举报
回复
问题:
编译器:Visual Studio 2005支持
#include <emmintrin.h>
_mm_sub_pd
之类的?
加载更多回复(2)
java项目开发10例
源代码
7. **异常处理与日志记录**:
源代码
中会展示如何正确地捕获和处理异常,以及使用日志工具(如log4j)记录程序运行状态,这对调试和问题定位至关重要。 8. **单元测试与持续集成**:如果项目包含测试代码,那么你...
notepad++
源代码
本文将深入探讨Notepad++的
源代码
,揭示其背后的设计原理和实现机制,帮助你了解如何利用这些
源代码
打造一款具有个人特色和功能强大的文本编辑器。 一、
源代码
结构解析 Notepad++的
源代码
包含了多个关键模块,如...
C++“超级玛丽”游戏的
源代码
10. **
优化
与性能**: 为了提供流畅的游戏体验,
源代码
可能会包含一些性能
优化
技巧,如减少不必要的计算、使用适当的数据结构或算法等。 通过深入研究这个“超级玛丽”游戏的
源代码
,不仅可以提升C++编程技能,还...
Java 45款 游戏
源代码
通过分析
源代码
,开发者可以学习到如何组织代码结构、如何实现用户界面、如何处理事件,以及如何
优化
性能等方面的知识。此外,对于初学者来说,这些
源代码
还可以作为理解面向对象编程、多线程、数据结构和算法等核心...
android
源代码
分析电子书
《Android
源代码
分析》这本书是Android开发者和学习者不可或缺的参考资料。它深入解析了Android操作系统的内部机制,帮助读者理解Android应用开发背后的原理,从而提升开发技能和
优化
应用性能。 一、Android系统...
英特尔边缘计算技术
568
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章