普通P4处理器用MKL效果很差,是不是CPU不支持指令集的原因?

oxromantic 2006-12-18 03:52:39
没用MKL时耗时3.8s
用了MKL耗时100+s
...全文
875 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
housisong 2006-12-28
  • 打赏
  • 举报
回复
pow(x,y)的实现的时候,有一个两难的选择,就是要不要特殊处理y是整数的情况;
因为y是整数的时候就可以用一个快速算法完成(一般用2分法);
如果y有小数部分,就会采用其他方案,(不考虑正负号)一般的实现是:exp(ln(x)*y) ,这个就比较慢了

有的库设计者可能会要求调用者自己决定调用intpow或pow函数,从而得到最快的速度;
有的库的实现可能就把这两个函数都实现在pow里,对调用者降低要求
茶禅如水 2006-12-28
  • 打赏
  • 举报
回复
可以参考 intel c编译器关于openmp帮助,因为mkl是用openmp实现的,应该有关系
茶禅如水 2006-12-28
  • 打赏
  • 举报
回复
以递增方式不需要选择判断的语句,而你的8,16,32,64,128,256,512,1024,10240,40960的方式计算应该要有if的,如果你用openmp的话,分支语句会降低性能
oxromantic 2006-12-27
  • 打赏
  • 举报
回复
你是说MKL pow 用法有问题还是cpu不支持?
IntelPerLib() ( ) 信誉:100 Blog 2006-12-25 21:58:28 得分: 0



这个结果像是合理的.



赖勇浩 2006-12-27
  • 打赏
  • 举报
回复
今天下午试了这些情况,发现从n值从1到1000递增的方式计算总是好过以8,16,32,64,128,256,512,1024,10240,40960的方式计算。真的很奇怪啊。。。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++
有关示意代码能说明这个问题吗? 期望中应该不是这样的...大的数据应该会更好.
-----------
我用vdInvSqrt的时候,发现集成1024个再用vdInvSqrt并没有在较小的n使用的时候好用。。。
IntelPerLib 2006-12-27
  • 打赏
  • 举报
回复
有关示意代码能说明这个问题吗? 期望中应该不是这样的...大的数据应该会更好.
-----------
我用vdInvSqrt的时候,发现集成1024个再用vdInvSqrt并没有在较小的n使用的时候好用。。。
茶禅如水 2006-12-27
  • 打赏
  • 举报
回复
mkl是没有问题的 我的机器是赛扬2.66GHz的 没用mkl的代码最快跑2.2s 单线程
用了 mkl 速度可以到1.4s 而且 符合 小数点后7位精度的要求 (还没有在双核上测试 添加mkl后的代码)
intel的mkl 中几乎每个函数都有相关代码例子的,可以看一下到底怎么用
IntelPerLib 2006-12-27
  • 打赏
  • 举报
回复
CPU是支持的. 指数为2的时候,就不要用MKL 函数了, 没有效率.
-----------------------------------------
你是说MKL pow 用法有问题还是cpu不支持?
PrideRock 2006-12-27
  • 打赏
  • 举报
回复
up
赖勇浩 2006-12-25
  • 打赏
  • 举报
回复
我用vdInvSqrt的时候,发现集成1024个再用vdInvSqrt并没有在较小的n使用的时候好用。。。
IntelPerLib 2006-12-25
  • 打赏
  • 举报
回复
这个结果像是合理的.
oxromantic 2006-12-25
  • 打赏
  • 举报
回复
MKL pow去掉用乘法结果 0: Potential: 686445.957
10: Potential: 280129.985
20: Potential: 206437.945
30: Potential: 170828.518
40: Potential: 147831.460
50: Potential: 133650.139
60: Potential: 122234.989
70: Potential: 114473.868
80: Potential: 106560.989
90: Potential: 99199.081
100: Potential: 93318.977
110: Potential: 89056.673
120: Potential: 85229.771
130: Potential: 82200.783
140: Potential: 79693.601
150: Potential: 77797.890
160: Potential: 75235.849
170: Potential: 73208.540
180: Potential: 71404.941
190: Potential: 69980.301
200: Potential: 68477.591
Seconds = 3.227000000
MKL Times = 1.041000000
MKL OpCount = 9849
IntelPerLib 2006-12-22
  • 打赏
  • 举报
回复
将MKL的Pow调用去掉有改进吗?
oxromantic 2006-12-20
  • 打赏
  • 举报
回复
0: Potential: 686445.957
10: Potential: 280129.985
20: Potential: 206437.945
Seconds = 10.539000000
MKL Times = 10.334000000
MKL OpCount = 2058
Press any key to continue . . .

这是我的测试结果, MKL pow 一次对10240*3操作, invsqrt对10240个数据操作
测试21次运算,调用MKL函数次数2058, 但耗时10.334s
oxromantic 2006-12-19
  • 打赏
  • 举报
回复
我每次送的都是10000个数据,但性能就很差了
我在虚拟机中编译的,这个有关系吗
m2213231 2006-12-19
  • 打赏
  • 举报
回复
MKL里面的vdSqrt这种函数在计算向量的时候才会提高速度,也就是说把数据一组一组地送给函数,而不要直接一个一个地给。
比如这样vdSqrt(100,src,dest),src和dest都是数据指针,例子的函数调用不一定正确,就是说这个意思。
IntelPerLib 2006-12-19
  • 打赏
  • 举报
回复
有测试代码说明这个问题吗? 输入的计算数据是否合法?

Intel 工具有一个技术支持的网站. https://premier.intel.com 你也可到上面提交你的一个问题. 这个网站是需要注册的,在申请工具的时候, 需要选择"技术支持"
--------------------------------
我每次送的都是10000个数据,但性能就很差了
我在虚拟机中编译的,这个有关系吗
oxromantic 2006-12-19
  • 打赏
  • 举报
回复
发现很多人遇到这个问题,是不是还要开启什么编译参数之类?

568

社区成员

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

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