0

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

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
4

1 回答 1

1

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

英特尔® 优化通知:

英特尔® 编译器、相关库和相关开发工具可能包含或利用针对英特尔® 和非英特尔微处理器中可用的指令集(例如 SIMD 指令集)进行优化的选项,但对非英特尔微处理器的优化并不相同. 此外,英特尔编译器的某些编译器选项,包括一些不是特定于英特尔微架构的编译器选项,是为英特尔微处理器保留的。有关英特尔编译器选项的详细说明,包括它们所涉及的指令集和特定微处理器,请参阅“编译器选项”下的“英特尔® 编译器用户和参考指南”。作为英特尔® 编译器产品一部分的许多库例程针对英特尔微处理器的优化程度高于其他微处理器。虽然英特尔® 编译器产品中的编译器和库为英特尔和英特尔兼容的微处理器提供优化,但根据您选择的选项、您的代码和其他因素,您可能会在英特尔微处理器上获得额外的性能。

英特尔® 编译器、相关库和相关开发工具可能会或可能不会针对非英特尔微处理器进行相同程度的优化,以实现并非英特尔微处理器独有的优化。这些优化包括英特尔® 流式 SIMD 扩展 2(英特尔® SSE2)、英特尔® 流式 SIMD 扩展 3(英特尔® SSE3)和补充流式 SIMD 扩展 3(英特尔® SSSE3)指令集和其他优化。英特尔不保证对非英特尔制造的微处理器的任何优化的可用性、功能或有效性。本产品中与微处理器相关的优化旨在与英特尔微处理器一起使用。

虽然英特尔认为我们的编译器和库是帮助在英特尔® 和非英特尔微处理器上获得最佳性能的绝佳选择,但英特尔建议您评估其他编译器和库以确定最能满足您的要求的编译器和库。我们希望通过努力提供任何编译器或库的最佳性能来赢得您的业务;如果您发现我们没有,请告诉我们

于 2011-01-18T08:39:20.807 回答