我正在运行Mac OS X 10.6.8并使用Enthought Python Distribution.我想要numpy函数来利用我的核心.我遇到了类似于这篇文章的问题:python/numpy中的多线程blas但是在完成该海报的步骤之后,我仍然遇到同样的问题.这是我的numpy.show_config():
lapack_opt_info:
libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include']
blas_opt_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include']
lapack_mkl_info:
libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include']
blas_mkl_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
library_dirs = …Run Code Online (Sandbox Code Playgroud) 以下简单的四行代码在我的Python 2.6.6/NumPy 1.7.0/MKL 10.3.6设置中产生内存泄漏:
import numpy as np
t = np.random.rand(10,10)
while True:
t = t / np.trace(t)
Run Code Online (Sandbox Code Playgroud)
每次操作时,使用的内存都会增加10x10矩阵的大小.但是,当我使用NumPy 1.4.1/ATLAS设置时,没有这种行为.
我已经读过关于MKL不一定自动释放内存,所以我猜这就是爆炸的原因.是否有一种简单的方法来修改NumPy(编译之前或之后),这样四线程可以正常工作?
输出np.show_config()
numpy 1.7.0
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', …Run Code Online (Sandbox Code Playgroud) 我需要弄清楚我可以提供给gcc的编译器/链接器指令,以便在指定-fopenmp时它不会自动链接libgomp.
原因是我正试图建立英特尔的MKL BLAS.MKL需要添加单独的英特尔库来处理多线程(例如,libmkl_intel_thread或libmkl_gnu_thread).但是,用于链接MKL和libgomp的库并不适用于包括我在内的每个操作系统.这迫使我链接libmkl_intel_thread,而libmkl_intel_thread又必须链接libiomp5.
虽然我能够构建我的包,但是一些二进制文件链接到libgomp和libiomp5.我不积极,这是造成问题,但也出现了一些事故,联动组合是可疑的,即使它不会导致崩溃的肯定是一个可怕的低效率.
我正在尝试使用gcc 4.9.1.
不幸的是,避免-fopenmp不是一种选择.原因是这是用于编译由几个子包组成的相当大的包,其Makefile不是最好的形状,并且可以在以后编译来自其他源(插件)的其他包.强制通用编译器/链接器指令并不困难.但是,启用--enable-openmp会激活-fopenmp和定义用于触发与多线程相关的代码的定义.试图将三者(--enable-openmp,-fopenmp和链接到--enable-openmp的代码)分开是不可行的.
我查看了手册页,我没有看到任何允许选择openmp库的gcc指令.英特尔的论坛有一个非常古老的讨论,他们建议在-fopenmp之后立即指定一个静态库,然后是--as-needed.这似乎非常摇摇晃晃,并且还有很多潜在的干扰插件包.llvm-openmp似乎在某一点上考虑了-fopenmp = libiomp5指令,但它似乎已经在3.5版本中被删除了,我试图使用gcc.
谢谢.
我一直在尝试使用 MSVC 编译器和英特尔 MKL 从 Windows 10 上的源代码编译 NumPy。我正在使用 Microsoft Visual Studio 2019 (16.8.4) 和 Intel MKL 2017.8.275 运行 Windows 10.0.18363。
我设法使用最新的 Python 和 NumPy 以最少的设置重现了这个问题。
下载最新的 Python (3.9.1) 和最新的 NumPy (1.20.1) 源。
打开 VS 命令提示符,解压 Python 源代码,构建 PCbuild\build.bat
运行mklvars.bat intel64以获得正确的环境变量集。
将英特尔编译器(ifort 所需)添加到 PATH:
set PATH=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\bin\intel64;%PATH%
Run Code Online (Sandbox Code Playgroud)
创建一个虚拟环境,从 Python 构建中复制一些文件并激活虚拟环境:
copy Python\PCbuild\amd64\python39.dll venv\Scripts
copy Python\PC\pyconfig.h venv\Include
Run Code Online (Sandbox Code Playgroud)
从源代码构建 NumPy 并安装: pip install . -v
尝试导入 NumPy: python -c "import numpy"
Traceback (most recent call last):
File "C:\cygwin\home\user\numpy_clean_env\venv\lib\site-packages\numpy\core\__init__.py", …Run Code Online (Sandbox Code Playgroud) 我在Fortran中有一个代码,它使用DGESVDMKL并在8核上运行英特尔编译器.代码通过OpenMP加速.另外我知道OpenMP和MKL有自己的设置来设置线程数(omp_num_threads和mkl_num_threads).我想知道最佳线程数.我应该OMP_NUM_THREADS=1在调用LAPACK例程之前设置吗?OpenMP线程的数量是否会影响MKL线程数?
Anaconda Python 发行版使用针对 Intel-MKL 库而不是“标准”NumPy 编译的 NumPy(和相关包)。如何在特定的 conda 环境中使用带有“标准”NumPy 的 Anaconda?不幸的是,目前还不能使用另一个 Python 发行版。如果相关:我使用的是 Windows 和 Python 3.6。
以前我问过一个类似的问题:cx_Freeze无法找到mkl:MKL FATAL ERROR:无法加载mkl_intel_thread.dll
但现在我有一个微妙的区别。我想在不安装 anaconda 的情况下运行程序,只是在cmd.exe终端内,但似乎我做错了什么或者这是不可能的。
python setup.py bdist_msi使用 using生成我的应用程序后cx-freeze,我可以在 anaconda 环境中安装然后运行它,但是如果我只是打开一个cmd.exe终端并运行它,我会得到
INTEL MKL ERROR: The specified module could not be found. mkl_intel_thread.dll.
Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.
Run Code Online (Sandbox Code Playgroud)
但是,运行时
where mkl_intel_thread.dll
Run Code Online (Sandbox Code Playgroud)
dll找到了,所以我认为这意味着它已在系统中注册(我更习惯使用Linux,所以可能是我错了)。
我怎么能解决这个问题?
在我的 RHEL 服务器上,我没有管理员权限,但我可以创建 Conda 环境。我想使用英特尔 MKL(英特尔® 数学核心函数库)创建一个运行 R 的 Conda 环境。
我使用R_defaults.yml创建环境,运行$> conda env create --file R_defaults.yml:
name: R_defaults
channels:
- defaults
- conda-forge
dependencies:
- pkgs/r::r-essentials=3.6.0=r36_0
Run Code Online (Sandbox Code Playgroud)
激活环境,启动 R 和 sessionInfo() 我发现没有使用 MKL:
R version 3.6.1 (2019-07-05)
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server 7.7 (Maipo)
Matrix products: default
BLAS/LAPACK: /home/geiringe/miniconda3/envs/R_r/lib/R/lib/libRblas.so
Run Code Online (Sandbox Code Playgroud)
Microsoft R Open ( https://mran.microsoft.com/download ) 可以与 MKL 一起安装。
Anaconda 似乎改变了对 Microsoft R Open 的看法。2018 年 6 月,据说它成为 Anaconda 发行版的默认 R(https://www.anaconda.com/introducing-microsoft-r-open-as-default-r-for-anaconda-distribution/ …
我正在为项目使用 conda 环境,当我安装 matplotlib 时,尝试运行 python 时出现以下错误:
(conda environment path)/bin/python (Project path)/src/__init__.py
INTEL MKL ERROR: dlopen((conda environment path)/lib/libmkl_intel_thread.dylib, 9): Library not loaded: @rpath/libiomp5.dylib
Referenced from: (conda environment path)/lib/libmkl_intel_thread.dylib
Reason: image not found.
Intel MKL FATAL ERROR: Cannot load libmkl_intel_thread.dylib.
Run Code Online (Sandbox Code Playgroud)
我到处寻找解决方案,似乎绝大多数类似问题都出现在 Windows 上,而 macOS 上没有公认的解决方案。看起来这似乎是我的DYLD_LIBRARY_PATH环境变量的问题,该变量当前为空。如果是这种情况,我不知道如何填充它。
我想测试和比较使用英特尔 MKL 和不使用英特尔 MKL 的 Numpy 矩阵乘法和特征分解性能。
我已经使用pip install mkl(Windows 10(64位),Python 3.8)安装了MKL。
然后我使用这里的示例进行 matmul 和特征分解。
我现在如何启用和禁用 MKL 以便检查使用 MKL 和不使用 MKL 时的 numpy 性能?
参考代码:
import numpy as np
from time import time
def matrix_mul(size, n=100):
# reference: https://markus-beuckelmann.de/blog/boosting-numpy-blas.html
np.random.seed(112)
a, b = np.random.random((size, size)), np.random.random((size, size))
t = time()
for _ in range(n):
np.dot(a, b)
delta = time() - t
print('Dotted two matrices of size %dx%d in %0.4f ms.' % (size, size, delta / n …Run Code Online (Sandbox Code Playgroud) intel-mkl ×10
python ×7
numpy ×4
conda ×3
dll ×2
openmp ×2
anaconda ×1
cx-freeze ×1
fortran ×1
gcc ×1
libgomp ×1
matplotlib ×1
memory-leaks ×1
microsoft-r ×1
r ×1
scipy ×1
visual-c++ ×1