Fortran 英特尔VML添加速度慢

Fortran 英特尔VML添加速度慢,fortran,intel-mkl,intel-fortran,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需要两倍于其他方法的时间! (循环有时比直接更快) 子例程可以在下面找到 并通过 program test use vmltests implicit none call vmlTes

我编写了一个比较简单向量数学函数的小子程序,可以通过循环执行:

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需要两倍于其他方法的时间! (循环有时比直接更快)

子例程可以在下面找到 并通过

program test

  use vmltests
  implicit none

  call vmlTest()

end program

您的示例代码存在潜在的二级缓存问题,可以通过阻塞优化来克服它。有关详细信息,请参阅英特尔®软件网络论坛答案:

英特尔®优化公告:

英特尔编译器、关联库 以及相关的开发工具 包括或利用以下选项: 针对以下指令集进行优化: 可在英特尔®和非英特尔®中使用 微处理器(例如SIMD 指令集),但不进行优化 同样适用于非英特尔微处理器。 此外,某些编译器选项 适用于英特尔编译器,包括一些 这不是英特尔特有的 微体系结构,是为 英特尔微处理器。详细的 英特尔编译器选项说明, 包括指令集和 他们使用的特定微处理器 如有任何疑问,请参阅“英特尔®” “编译器用户和参考指南” 在“编译器选项”下。许多 作为 英特尔®;编译器产品更多 针对英特尔的高度优化 微处理器,而不是其他 微处理器。而编译器 “英特尔编译器”中的函数和库 产品为这两个方面提供了优化 英特尔与英特尔兼容 微处理器,取决于 您选择的选项、代码和 其他因素,你可能会 英特尔上的额外性能 微处理器

英特尔编译器、关联库 以及相关的开发工具 或者可能不会优化到相同的程度 适用于非英特尔微处理器 不是唯一的优化 英特尔微处理器 优化包括英特尔®流媒体 单指令多数据扩展指令集2(英特尔®;SSE2), 英特尔®数据流单指令多数据扩展指令集3 (英特尔®;SSE3)和补充 数据流单指令多数据扩展指令集3(英特尔® SSSE3)指令集和其他 优化。英特尔没有 保证可用性, 功能,或任何 微处理器的优化 由英特尔制造。 依赖微处理器的优化 在本产品中,所有产品均为预期用途 使用英特尔微处理器

英特尔相信我们的编译器和 图书馆是一个很好的选择 协助取得最佳成绩 在英特尔®和非英特尔上的性能 微处理器,英特尔建议 您可以评估其他编译器和 库来确定哪一个最适合 你的要求。我们希望获胜 通过努力提供 任何编译器或应用程序的最佳性能 图书馆;如果您需要帮助,请告诉我们 发现我们没有