使用适用于 X64 的 Intel Visual FORTRAN 对代码进行矢量化
我正在 Windows Server 2003 Enterprise X64 Edition 上使用 Intel Visual FORTRAN 编译我的 fortran90 代码。当我编译 32 位结构的代码并使用自动和手动矢量化选项时。代码将被编译、矢量化。当我在 8 核系统上运行它时,编译后的代码使用了 70% 的 CPU,这表明矢量化正在发挥作用。但是,当我使用 64 位编译器编译代码时,它说代码已矢量化,但当我运行它时,它仅显示 CPU 使用率约为 12%,即 8 个核心中的一个核心的完全使用率,因此这意味着虽然编译器说代码是矢量化的,矢量化不起作用。
这对我来说很奇怪,因为它是在 X64 版 Windows 上,而我本来希望看到相反的结果。我认为在 64 位 Windows 上运行针对 64 位架构编译的代码应该更好。
任何人都知道为什么编译后的代码无法充分利用 64 位编译版本的多核功能?
I'm compiling my fortran90 code using Intel Visual FORTRAN on Windows Server 2003 Enterprise X64 Edition. When I compile the code for 32 bit structure and using automatic and manual vectorizing options. The code will be compiled, vectorized. And when I run it on 8 core system the compiled code uses 70% of CPU that shows me that vectorizing is working. But when I compile the code with 64 Bit compiler, it says that the code is vectorized but when I run it it only shows CPU usage of about 12% that is full usage for one core out of 8, so it means that while the compiler says that code is vectorized, vectorization is not working.
And it's strange for me because it's on a X64 Edition Windows and I was expecting to see the reverse result. I thought that it should be better to run a code that is compiled for 64 Bit architecture on a 64 bit windows.
Anyone have any idea why the compiled code is not able to use the full power of multiple cores for 64 Bit Compiled version?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我没有使用过 Windows 版本的 Intel Fortran 编译器,只使用过 Mac 和 Linux。在英特尔术语中,“矢量化”使用单个处理器/内核上可用的小规模并行指令/多媒体扩展 SSE、SSE2、SSE3、SSSE3、SSE4。这些编译器能够自动跨多个处理器/内核进行多线程执行的特点就是“并行化”。选项为 -vec 或 /Qvec 与 -parallel 或 /Qparallel。那么您使用哪些编译器选项?
I haven't used the Windows versions of the Intel Fortran compilers, only the Mac and Linux. In Intel nomenclature, "vectorization" uses the small-scale parallel instructions / multimedia extensions SSE, SSE2, SSE3, SSSE3, SSE4 that are available on a single processor / core. The feature of these compilers that can automatically multithread execution across multiple processors / cores is "parallelization". The options are -vec or /Qvec versus -parallel or /Qparallel. So which compiler options are you using?