我编写了这个小子程序,它比较了简单的向量数学函数,用循环执行:
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
答案 0 :(得分:1)
您的示例代码存在潜在的L2缓存问题,可以通过阻止优化来克服它。有关详细信息,请参阅英特尔®软件网络论坛答案:http://software.intel.com/en-us/forums/showthread.php?t=80041
英特尔®优化通知:
英特尔®编译器,相关库 和相关的开发工具可能 包括或利用那些选项 优化指令集 适用于英特尔®和非英特尔 微处理器(例如SIMD 指令集),但不优化 同样适用于非英特尔微处理器。 另外,某些编译器选项 对于英特尔编译器,包括一些 这不是英特尔特有的 微架构,保留 英特尔微处理器。详细说明 英特尔编译器选项的描述, 包括指令集和 特定的微处理器 有意义,请参阅“英特尔® 编译器用户和参考指南“ 在“编译器选项”下。很多 属于的库例程 英特尔®编译器产品更多 为英特尔高度优化 微处理器比其他 微处理器。而编译器 和英特尔®编译器中的库 产品为两者提供优化 英特尔和英特尔兼容 微处理器,取决于 您选择的选项,代码和 其他因素,你可能会得到 英特尔的额外性能 微处理器。
英特尔®编译器,相关库 和相关的开发工具可能 或者可能没有达到相同程度的优化 适用于非英特尔微处理器 优化不是唯一的 英特尔微处理器。这些 优化包括英特尔®流媒体 SIMD扩展2(英特尔®SSE2), 英特尔®StreamingSIMD扩展3 (英特尔®SSE3)和补充 流式SIMD扩展3(英特尔® SSSE3)指令集等 优化。英特尔没有 保证可用性, 功能,或任何有效性 对微处理器的优化没有 由英特尔制造。 依赖于微处理器的优化 本产品适合使用 使用英特尔微处理器。
虽然英特尔认为我们的编译器和 图书馆是很好的选择 协助获得最好的 英特尔®和非英特尔的性能 微处理器,英特尔建议 你评估其他编译器和 图书馆,以确定最佳会面 你的要求。我们希望赢 通过努力提供您的业务 任何编译器或的最佳性能 图书馆;如果你,请告诉我们 发现我们没有