英特尔VML添加速度很慢

时间:2011-01-17 17:11:06

标签: fortran intel-mkl intel-fortran

我编写了这个小子程序,它比较了简单的向量数学函数,用循环执行:

f(i) = a(i) + b(i)

或直接:

f = a + b

或使用英特尔MKL VML:

vdAdd(N,A,B,F)

n = 50000000的时间结果是:

VML 0.9秒 直接0.4 循环0.4

我不明白,为什么VML需要的时间是其他方法的两倍! (循环有时比直接更快)

子程序可以在http://paste.ideaslabs.com/show/L6dVLdAOIf下找到 并通过

进行调用
program test

  use vmltests
  implicit none

  call vmlTest()

end program

1 个答案:

答案 0 :(得分:1)

您的示例代码存在潜在的L2缓存问题,可以通过阻止优化来克服它。有关详细信息,请参阅英特尔®软件网络论坛答案:http://software.intel.com/en-us/forums/showthread.php?t=80041

英特尔®优化通知:

  

英特尔®编译器,相关库   和相关的开发工具可能   包括或利用那些选项   优化指令集   适用于英特尔®和非英特尔   微处理器(例如SIMD   指令集),但不优化   同样适用于非英特尔微处理器。   另外,某些编译器选项   对于英特尔编译器,包括一些   这不是英特尔特有的   微架构,保留   英特尔微处理器。详细说明   英特尔编译器选项的描述,   包括指令集和   特定的微处理器   有意义,请参阅“英特尔®   编译器用户和参考指南“   在“编译器选项”下。很多   属于的库例程   英特尔®编译器产品更多   为英特尔高度优化   微处理器比其他   微处理器。而编译器   和英特尔®编译器中的库   产品为两者提供优化   英特尔和英特尔兼容   微处理器,取决于   您选择的选项,代码和   其他因素,你可能会得到   英特尔的额外性能   微处理器。

     

英特尔®编译器,相关库   和相关的开发工具可能   或者可能没有达到相同程度的优化   适用于非英特尔微处理器   优化不是唯一的   英特尔微处理器。这些   优化包括英特尔®流媒体   SIMD扩展2(英特尔®SSE2),   英特尔®StreamingSIMD扩展3   (英特尔®SSE3)和补充   流式SIMD扩展3(英特尔®   SSSE3)指令集等   优化。英特尔没有   保证可用性,   功能,或任何有效性   对微处理器的优化没有   由英特尔制造。   依赖于微处理器的优化   本产品适合使用   使用英特尔微处理器。

     

虽然英特尔认为我们的编译器和   图书馆是很好的选择   协助获得最好的   英特尔®和非英特尔的性能   微处理器,英特尔建议   你评估其他编译器和   图书馆,以确定最佳会面   你的要求。我们希望赢   通过努力提供您的业务   任何编译器或的最佳性能   图书馆;如果你,请告诉我们   发现我们没有