当你有 AMD CPU 时,你可以加速使用 Intel-MKL 的代码吗?
When you have an AMD CPU, can you speed up code that uses the Intel-MKL?
我有一个 AMD cpu,我正在尝试 运行 一些使用 Intel-MKL 的代码。代码比我预期的要慢得多。
当你有 AMD CPU 时,你可以加速使用 Intel-MKL 的代码吗?怎么样?
更新 2021-08-26:您可以从大约 2020-08-31 之前加速旧版本的 MKL。设置环境变量 MKL_DEBUG_CPU_TYPE=5
然后 运行 你的代码。
注意:我不知道英特尔删除环境变量解决方法的确切日期或版本。
仅供参考,此减速会影响 任何使用 Intel-MKL 库和 AMD CPU 上的 运行 的东西(即影响所有操作系统并影响所有编程语言和所有程序(older versions of Matlab, C, C++, Python, Anaconda-Python, Machine-Learning like Tensorflow and Pytorch,再次 任何在 AMD CPU 上使用 Intel-MKL 库的东西)。
仅供参考设置和获取环境变量超出了这个问题的范围,但这里有一些有用的链接:
- 对于Windows and another link with screenshots
- 我个人是:“旧”控制面板 --> 系统 --> 高级 --> 环境变量 --> 系统变量 --> ceate new
- 为 Linux here is a general guide
- 对于想要仅为自己的用户设置环境变量的
bash
用户的简单情况,将 export MKL_DEBUG_CPU_TYPE=5
行附加到您用户的 .bashrc
文件
p.s.
关于问题“why/how 将环境变量设置为 运行 是否明显更快?”
- 如果检测到非英特尔,Intel-MKL 的默认行为是检查 CPU 和 运行 较慢的代码。
- 设置环境变量会覆盖默认行为并使代码执行得更快,尽管没有 Intel 硬件。
您可能想知道“为什么英特尔会在他们的 MKL 库中放慢软件速度?
- 英特尔多年来让他们的编译代码首先检查 CPU 然后如果 CPU 被检测为非英特尔代码将选择 运行 较慢的代码
- 有官司
- 诉讼的结果是英特尔不得不披露他们正在做的事情,但不必停止他们正在做的事情
- 这是包含更多历史和信息的维基页面:https://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Reception
截至 2021 年,英特尔不幸 removed MKL_DEBUG_CPU_TYPE
以防止 AMD 用户使用已接受答案中提供的解决方法。这意味着解决方法不再有效,AMD 用户必须切换到 OpenBLAS 或继续使用 MKL。
要使用解决方法,请遵循此方法:
- 使用
conda
和 NumPy 的 MKL=2019 创建一个 conda
环境。
- 激活环境
- 设置
MKL_DEBUG_CPU_TYPE
= 5
上述步骤的命令:
conda create -n my_env -c anaconda python numpy mkl=2019.* blas=*=*mkl
conda activate my_env
conda env config vars set MKL_DEBUG_CPU_TYPE=5
就是这样!
我有一个 AMD cpu,我正在尝试 运行 一些使用 Intel-MKL 的代码。代码比我预期的要慢得多。
当你有 AMD CPU 时,你可以加速使用 Intel-MKL 的代码吗?怎么样?
更新 2021-08-26:您可以从大约 2020-08-31 之前加速旧版本的 MKL。设置环境变量 MKL_DEBUG_CPU_TYPE=5
然后 运行 你的代码。
注意:我不知道英特尔删除环境变量解决方法的确切日期或版本。
仅供参考,此减速会影响 任何使用 Intel-MKL 库和 AMD CPU 上的 运行 的东西(即影响所有操作系统并影响所有编程语言和所有程序(older versions of Matlab, C, C++, Python, Anaconda-Python, Machine-Learning like Tensorflow and Pytorch,再次 任何在 AMD CPU 上使用 Intel-MKL 库的东西)。
仅供参考设置和获取环境变量超出了这个问题的范围,但这里有一些有用的链接:
- 对于Windows and another link with screenshots
- 我个人是:“旧”控制面板 --> 系统 --> 高级 --> 环境变量 --> 系统变量 --> ceate new
- 为 Linux here is a general guide
- 对于想要仅为自己的用户设置环境变量的
bash
用户的简单情况,将export MKL_DEBUG_CPU_TYPE=5
行附加到您用户的.bashrc
文件
- 对于想要仅为自己的用户设置环境变量的
p.s.
关于问题“why/how 将环境变量设置为 运行 是否明显更快?”
- 如果检测到非英特尔,Intel-MKL 的默认行为是检查 CPU 和 运行 较慢的代码。
- 设置环境变量会覆盖默认行为并使代码执行得更快,尽管没有 Intel 硬件。
您可能想知道“为什么英特尔会在他们的 MKL 库中放慢软件速度?
- 英特尔多年来让他们的编译代码首先检查 CPU 然后如果 CPU 被检测为非英特尔代码将选择 运行 较慢的代码
- 有官司
- 诉讼的结果是英特尔不得不披露他们正在做的事情,但不必停止他们正在做的事情
- 这是包含更多历史和信息的维基页面:https://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Reception
截至 2021 年,英特尔不幸 removed MKL_DEBUG_CPU_TYPE
以防止 AMD 用户使用已接受答案中提供的解决方法。这意味着解决方法不再有效,AMD 用户必须切换到 OpenBLAS 或继续使用 MKL。
要使用解决方法,请遵循此方法:
- 使用
conda
和 NumPy 的 MKL=2019 创建一个conda
环境。 - 激活环境
- 设置
MKL_DEBUG_CPU_TYPE
= 5
上述步骤的命令:
conda create -n my_env -c anaconda python numpy mkl=2019.* blas=*=*mkl
conda activate my_env
conda env config vars set MKL_DEBUG_CPU_TYPE=5
就是这样!