英特尔多核编程大赛优化报告

dwbclz 2007-01-21 04:01:24
本来昨天就应该发上来的,不过陪女朋友逛街去了,延迟一天。

链接如下:
http://blog.csdn.net/dwbclz/archive/2007/01/21/1489261.aspx
...全文
2079 46 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
wei45782 2008-01-30
  • 打赏
  • 举报
回复
niu~!
xymao123 2008-01-30
  • 打赏
  • 举报
回复
mark
wangweixing2000 2008-01-27
  • 打赏
  • 举报
回复
都是牛人!:)
xoyojank 2008-01-27
  • 打赏
  • 举报
回复
过来凑个热闹
housisong 2007-08-15
  • 打赏
  • 举报
回复
今天换了台新电脑,有机会在酷睿的电脑上测试了一下我的代码和搂主的代码的成绩
(用的高精度计时器QueryPerformanceCounter)

酷睿2 4400 2.0G : 搂主的程序 0.2628s 我的程序 0.2644s
以高优先级多次测量,各有胜负,一般差距很小,但搂主的还是快些

在我的另一台AMDx2 3600+上搂主的比我的代码快20%以上!
前程序员 2007-06-05
  • 打赏
  • 举报
回复
今天看见强人了,作个标记学习
cbaihiqpl 2007-02-14
  • 打赏
  • 举报
回复
呵呵
i_am_xiaoga 2007-02-06
  • 打赏
  • 举报
回复
to dwbclz
hehe,刚注册就碰到科大的牛师兄了,拜一下 :)
dwbclz 2007-01-25
  • 打赏
  • 举报
回复
VS2005是没有问题的。
请问,什么硬件配置?
CPU必须要支持SSE3。
icansaymyabc 2007-01-25
  • 打赏
  • 举报
回复
icc 过期了。vs2005编译的结果在我的机上运行直接出错。是我的CPU太差还是VC2005太糟?
celineshi 2007-01-23
  • 打赏
  • 举报
回复
感谢各位对大赛的支持,之后我们还会邀请大家进一步交流相关的技术
dwbclz 2007-01-22
  • 打赏
  • 举报
回复
呵呵,还有人记得侠客行,感动ing。那都是上学时候
的事情了。

现在俺在做网游,在“像素软件”,就是做刀剑封魔录
的那个公司。谁在北京谋职,欢迎加入俺们公司!
housisong 2007-01-22
  • 打赏
  • 举报
回复
细看了dwbclz(dw编程浪子)"的代码: 8重展开,然后前4组和后4组首尾相连,将数据密集和运算密集合理搭配,减少依赖; 这才是楼主代码快的最重要的原因;

总感觉"dwbclz(dw编程浪子)"名字很熟悉,千年上的《侠客行》是否是楼主的作品:)
那时我还在学着写程序,佩服不已啊:D
zjmzs 2007-01-22
  • 打赏
  • 举报
回复
dwbclz (dw编程浪子)强啊,瞻仰一下。。。:)
huanyun 2007-01-22
  • 打赏
  • 举报
回复
另外
for(j = i+4; j < NPARTS; j+=2)
{
t00 = _mm_sub_pd(a00, _mm_load_pd(r[j]));
t10 = _mm_sub_pd(a10, _mm_load_pd(r[j]));
t01 = _mm_sub_pd(a01, _mm_load_pd(r[j]+2));
t11 = _mm_sub_pd(a11, _mm_load_pd(r[j]+2));
t02 = _mm_sub_pd(a02, _mm_load_pd(r[j]+4));
t12 = _mm_sub_pd(a12, _mm_load_pd(r[j]+4));

dArray[j] = _mm_add_pd(_mm_add_pd(_mm_mul_pd(t00, t00), _mm_mul_pd(t01, t01)), _mm_mul_pd(t02, t02));
dArray[j+1] = _mm_add_pd(_mm_add_pd(_mm_mul_pd(t10, t10), _mm_mul_pd(t11, t11)), _mm_mul_pd(t12, t12));
}

for(j = i+4; j < NPARTS; j+=2)
{
ft1 = _mm_movelh_ps(_mm_cvtpd_ps(dArray[j]), _mm_cvtpd_ps(dArray[j+1]));
ft0 = _mm_rsqrt_ps(ft1);
ft0 = _mm_mul_ps(_mm_mul_ps(g_fhalf, ft0), _mm_sub_ps(g_f3, _mm_mul_ps(ft1, _mm_mul_ps(ft0, ft0))));

t01 = _mm_cvtps_pd(ft0);
t02 = _mm_cvtps_pd(_mm_movehl_ps(ft0, ft0));

t01 = _mm_mul_pd(_mm_mul_pd(g_dhalf, t01), _mm_sub_pd(g_d3, _mm_mul_pd(dArray[j], _mm_mul_pd(t01, t01))));
t02 = _mm_mul_pd(_mm_mul_pd(g_dhalf, t02), _mm_sub_pd(g_d3, _mm_mul_pd(dArray[j+1], _mm_mul_pd(t02, t02))));

dret = _mm_add_pd(dret, _mm_add_pd(t01, t02));
}

去掉dArray这个缓存和第二个循环
也会慢 应该也是寄存器使用的问题
huanyun 2007-01-22
  • 打赏
  • 举报
回复
我的CodeSpeed是使用的8重展开 但是好像更慢 主要是寄存器不够用
赖勇浩 2007-01-22
  • 打赏
  • 举报
回复
我也是做游戏的。看来做游戏的比较多性能狂人。
housisong 2007-01-22
  • 打赏
  • 举报
回复
我也是写游戏的:)

在我的电脑上(AMD64x2 3600+)
dwbclz(dw编程浪子)"的代码: 0.375; 我的代码 0.453 ,他的快出20%

所以也测试了一下8重展开的效果:
(对我的高级语言实现版本进行改写)
主要操作步骤:复制4重展开代码,变成2段,
对后半段简单修改数据访问偏移量,变量名进行名称修改避免冲突;
速度几乎不变:(
然后把后半段的代码拖拽到我任为比较合理的地方(凭感觉:) 把两段代码混合;
速度一下子就提高12%-15%左右:)
对应的汇编版和代码细调就不做了:D



huanyun 2007-01-22
  • 打赏
  • 举报
回复
我建的 通过您的申请了 :)
赖勇浩 2007-01-22
  • 打赏
  • 举报
回复
看来游戏公司的人比例不小啊,以后去北京还请浪子大侠多多关注~
昨天谁建QQ群的,通过我的申请没有?
加载更多回复(26)

568

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧