用于单核的英特尔编译器标志

问题描述 投票:0回答:1

[我注意到在我看来,大多数包含矩阵/矩阵和矩阵/矢量乘法的fortran代码的行为令人惊讶。

最初,代码是使用gfortran编译的,并且乘法是在矩阵的行和列上使用双“ DO”循环进行的。我使用以下代码编译了代码:

gfortran -c -g -O3 ...

执行代码使用的是8核i7处理器的单核。

然后我使用intel编译器使用以下代码编译了代码:

ifort -c -g -O3 ...

仍然使用单个内核,代码运行速度明显加快。然后,我决定分别使用众所周知的dgemmdgemv函数针对矩阵/矩阵和矩阵/矢量乘法来优化代码。

然后我使用以下代码进行编译:

ifort -c -g -O3 ...

结果代码正常运行,但是使用了我的i7处理器的8个内核,而没有任何显着的性能改进。有没有办法从编译命令控制我的代码使用的内核数?

fortran intel compiler-optimization intel-fortran
1个回答
0
投票

编译器本身不会生成任何并行代码。但是Intel Math Kernel Library(MKL)(DGEMM和朋友居住的地方)可以自动并行化和CPU分配。

MKL文档说:

使用以下技术来指定要在英特尔MKL中使用的OpenMP线程数:

设置OpenMP或Intel MKL环境变量之一:OMP_NUM_THREADSMKL_NUM_THREADSMKL_DOMAIN_NUM_THREADS

[OpenMP或Intel MKL功能:OMP_SET_NUM_THREADS()mkl_set_num_threads()mkl_domain_set_num_threads()mkl_set_num_threads_local()

© www.soinside.com 2019 - 2024. All rights reserved.