问题标签 [intel-mkl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5896 浏览

python - 假设自动线程化的 scipy 和 numpy 函数没有使用多核

我正在运行 Mac OS X 10.6.8 并且正在使用 Enthought Python Distribution。我希望 numpy 函数能够利用我的两个核心。我遇到了与这篇文章类似的问题:python/numpy 中的多线程 blas,但是在完成了该海报的步骤之后,我仍然遇到了同样的问题。这是我的 numpy.show_config():

与原始帖子的评论一样,我删除了设置变量的行MKL_NUM_THREADS=1。但即便如此,应该利用多线程的 numpy 和 scipy 函数一次也只使用我的一个内核。还有什么我应该改变的吗?

编辑:为了澄清,我试图让一个单一的计算,如 numpy.dot() 根据 MKL 实现自行使用多线程,我不想利用 numpy 计算释放控制的事实GIL,因此使多线程与其他功能更容易。

这是一个应该使用多线程但不在我的机器上的小脚本:

0 投票
1 回答
1894 浏览

gcc - 在 ubuntu 下使用 gcc 与 intel mkl 的奇怪链接错误

我想在一些优化问题中使用 intel mkl,所以我使用 intel example 来测试它。测试.cpp:

当我用 "g++ -I/home/l/intel/mkl/include -w test.cpp - L"/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64" "/home/l/ 编译它时intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64"/libmkl_intel_lp64.a -Wl,--start-group"/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64"/libmkl_intel_thread.a"/home/ l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64"/libmkl_core.a -Wl,--end-group -L"/home/l/intel/composer_xe_2011_sp1.6.233/mkl/../compiler/lib/intel64 “ -liomp5 -lpthread -lm -L/home/l/intel/mkl/lib/intel64 -o 模板”,一切都很好...

但是如果我将编译步骤和链接步骤分开,它会给我一个链接错误:

test.cpp:(.text+0x10b): undefined reference to `cblas_zdotc_sub'

我用来编译和链接的命令是:

编译:

g++ -I/home/l/intel/mkl/include -w -c test.cpp -o test.o

关联:

g++ -I/home/l/intel/mkl/include -w -L"/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64""/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib /intel64"/libmkl_intel_lp64.a -Wl,--start-group "/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64"/libmkl_intel_thread.a "/home/l/intel/composer_xe_2011_sp1.6.233/mkl /lib/intel64"/libmkl_core.a -Wl,--end-group -L"/home/l/intel/composer_xe_2011_sp1.6.233/mkl/../compiler/lib/intel64" -liomp5 -lpthread -lm ./ test.o -L/home/l/intel/mkl/lib/intel64 -o 模板

我正在使用 ubuntu 12.04、gcc 4.6.3、intel composer_xe_2011_sp1.6.233。

0 投票
1 回答
5265 浏览

python - 如何在 Linux 中将 MKL 库永久链接到 Numpy?

我使用 Intel 的 MKL 库构建了 Numpy(对我来说这是一个艰难的过程,我花了一整天的时间!)。Numpy 需要使用 LD_LIBRARY_PATH 环境变量链接到 MKL 库,或者至少这是我这样做的方式......所以我在 .bashrc 中使用 export 来保存路径,当我启动新控制台并运行 python 时, Numpy 已正确加载库。

问题是它不适用于我使用 Pydev 开发程序的 Eclipse。我仍然可以在 Eclipse 的首选项中的某处添加 LD_LIBRARY_PATH,但是当我尝试安装 Scipy 时问题变得真实。Scipy 的安装脚本需要导入 Numpy,即使正确设置了 LD_LIBRARY_PATH,我仍然遇到无法导入的 MKL 库的错误:

libimf.so 是我必须链接的 MKL 共享库之一。除了直接修改__init__.pyNumpy 的文件(我宁愿避免这样做,因为可能有更简洁的方法)之外,我不知道如何将 Numpy 永久链接到 MKL 库。

谢谢你的帮助!

0 投票
1 回答
729 浏览

fortran - ifort 上的螺纹 DGEMM

我已经实现了一个调用 DGEMM 的工作程序(FORTRAN,编译器:Intel ifort 11.x)。我读过有一种快速的方法可以通过编译来并行化:

我有一个四核处理器,所以我使用(通过 bash)运行程序:

我的假设是 DGEMM 会自动调用 4 个线程,从而实现更快的矩阵乘法。这似乎没有发生。我错过了什么吗?任何帮助,将不胜感激。

0 投票
1 回答
1920 浏览

fortran - DGEMM 和数值常数作为参数

在使用 BLAS DGEMM矩阵乘法函数时,我注意到对于未初始化的结果矩阵 C,当我这样调用它时,我会在结果中得到 NaN:

但是,如果我事先声明 ALPHA 和 BETA:

然后乘法工作正常。有没有人知道为什么声明论点有效?

请注意,我使用的是 Intel Fortran 编译器及其 MKL 库。

0 投票
1 回答
201 浏览

r - 将 R 与英特尔 MKL 11.01.117 链接

我似乎无法将它们链接起来,动态链接说明似乎已经过时了。有人对此有任何见解吗?谢谢

0 投票
1 回答
1463 浏览

cuda - 对于小型数据集,为什么使用 cula(dgesv) 求解线性方程组比 mkl (dgesv) 慢

我编写了一个 CUDA C 和 C 程序来求解矩阵方程 Ax=b 使用 CULA 例程 dgesv 和 MKL 例程 dgesv。似乎对于一个小数据集,CPU 程序比 GPU 程序快。但是随着数据集增加到超过 500,GPU 克服了 CPU。我正在使用我的戴尔笔记本电脑,它有 i3 CPU 和 Geforce 525M GPU。GPU最初性能缓慢的最佳解释是什么?

我写了另一个程序,它接受两个向量,将它们相乘并相加。这就像点积一样,只是结果是向量和而不是标量。在这个程序中,即使对于小数据集,GPU 也比 CPU 快。我正在使用同一个笔记本。为什么与上面解释的相比,即使对于小数据集,该程序中的 GPU 也更快?是不是因为求和涉及的计算量不多?

0 投票
4 回答
11057 浏览

python - 为 pip 提供 NumPy site.cfg 参数

我正在使用针对英特尔的数学内核库构建的 NumPy。我使用 virtualenv,通常使用 pip 来安装软件包。

但是,为了让 NumPy 找到 MKL 库,有必要在编译之前在 NumPy 源目录中创建一个 site.cfg 文件,然后手动构建和安装。我可以编写整个过程的脚本,但我希望有一个更简单的解决方案。

我有一个标准的 site.cfg 文件,可以在版本控制下用于此目的。是否有任何 pip 命令行选项会告诉它在构建包之前将特定文件复制到源目录?

或者,是否可以设置任何环境变量而不是在 site.cfg 文件中提供库路径?这是我使用的 site.cfg 文件。它几乎一字不差地取自英特尔的网站

作为参考,我正在运行 Ubuntu、Python 2.7 和 NumPy 1.6。

0 投票
1 回答
6173 浏览

fortran - OpenMP 和 MKL 线程

我在 Fortran 中有一个代码,它使用DGESVDMKL 并使用 Intel 编译器在 8 个内核上运行。代码通过 OpenMP 加速。我也知道 OpenMP 和 MKL 有自己的设置来设置线程数(omp_num_threadsmkl_num_threads)。我想知道最佳线程数。我应该OMP_NUM_THREADS=1在调用 LAPACK 例程之前设置吗?OpenMP 线程数会影响 MKL 线程数吗?

0 投票
2 回答
4712 浏览

c++ - 在 Python-C++-C-Fortran 2003 程序中链接英特尔的 MKL

我正在尝试链接一个性质非常复杂的程序:

  • 在 Linux Fedora 下开发和运行
  • 用 fortran 2003 编写的主要代码在很大程度上依赖于 Intel 的 MKL 库和一小段 ANSI C 代码
  • 它有 C++ 接口(使用 iso_c_binding)
  • 通过 boost.python 从 python 访问 c++ 接口

在运行时我得到以下文本

之后程序停止。

我已经检查了两者libmkl_avx.so并且libmkl_def.so都在$LD_LIBRARY_PATH

最终链接通过以下方式完成:

libFrrBoost 是被链接的模块,那么

导入模块 libFrrBoost 的运行python t83.py(特别是链接器在准备二进制文件时不会抱怨)会导致错误。

试图谷歌。我发现的所有信息都与用 C/Fortran 编写的“常规程序”有关,其中包括英特尔的 MKL。我能够毫无问题地运行这类程序。我认为 Makefile 中链接行的 MKL 部分在这两种情况下都是等价的,但一定有一个隐藏的谜团。问题通常是错误的链接 - 我认为这不适用(这些库与英特尔手册中的完全一样 - 接口、线程和计算库非常标准)

使用的编译器:

ifort 12.1.0、icpc 12.1.0、python Python 2.7.1、icc 12.1.0(小 C 代码段也调用 MKL,但是)

编辑(由于 Hirsto Iliev 的评论)

我已经以这种方式运行了 strace strace python t83.py:; 结果是(在 grepping 之后libmkl

我知道 open 的规范在这里是特别的,因为 3,4 是肯定的,表明 open 找到了一个文件并为其分配了文件描述符。我已经验证该文件确实存在于那个地方。

这也是“好”的英特尔编译器目录:

所以版本是一样的——显然这不是版本问题。

一切都是一样的libmkl_def.so

免责声明:虽然我听起来对我写的东西很有信心,但我不是。每个句子都应该以“如果我没记错的话”开头。