英特尔 MKL 和 Oracle R 分发版

Posted

技术标签:

【中文标题】英特尔 MKL 和 Oracle R 分发版【英文标题】:Intel MKL and Oracle R Distribution 【发布时间】:2014-05-24 02:39:37 【问题描述】:

我正在尝试测试使用 Oracle R Distribution 的多线程优势。我有一台配备 12 核 CPU 和 32 GB RAM 的工作站,我真的很想利用它。

我已经下载了最新的 Oracle R 发行版和英特尔 MKL 11.1 的 30 天试用版。我已经根据 Oracle 文档指定了我的 PATH,当我在 R Studio 中运行 Sys.BlasLapack() 时,我得到了英特尔数学内核库(英特尔 MKL)。

但是我的作业并没有运行得更快。我是否需要运行 .bat 文件之一来实际编译和设置 MKL 的参数?我没有 Visual Studio,我在网上找不到任何告诉我如何执行此操作的内容。任何指针?我正在使用 Windows 7 专业版。

【问题讨论】:

您尝试使用哪些 Oracle R 函数?像 ore.odmGLM 这样的 Oracle 特定函数可能运行得更快,像 glm 这样的标准 R 函数不会以任何不同的方式运行。事实上,它们会很慢,因为它们会将数据从 Oracle 假脱机到您的本地 R 实例。 这可能会帮助您安装 BLAS:cran.r-project.org/doc/manuals/R-admin.html#BLAS。我记得当我这样做时,我必须重新编译 R 以指定要使用的 BLAS。 我没有运行 Oracle 特定的功能。我正在执行我的一项常规工作,但使用的是 Oracle 发行版。我的理解是大多数数学计算会更快。快多少取决于 MKL 的利用程度。 【参考方案1】:

简短回答:在标准 BLAS 和英特尔 MKL 下从 here 运行基准测试,以查看 MKL 是否正常工作。 MKL 只会提高某些操作的性能。

要真正获得 Oracle R 实现的全部功能,您必须使用embedded R functions。这些是以ore开头的。

在 Oracle R Enterprise 中,嵌入式 R 执行是存储 R Oracle 数据库中的脚本并调用这些脚本,然后 在数据库中运行的一个或多个 R 引擎中执行 由数据库动态启动和管理。

我们已经在办公室试用了 ORE,Oracle 在 Exadata 机器上运行;只有当数据集非常大时,我们才开始看到性能提升。

如果您的目标是利用更强大的 BLAS,您实际上并不需要 Oracle R 来做到这一点。在 Unix 发行版上,您可以使用 --with-blas 选项构建开源 R(参见 this link)。我相信同样的方法可以用于 Windows,尽管我从未使用 Windows 从源代码编译 R。

并不是所有的 R 函数都使用不同的 BLAS 运行得更快,尤其是像 glm 这样的大多数建模函数不使用 BLAS。为了使用不同的 BLAS 检查系统的性能,我使用了scripts from this site。如果使用英特尔 MKL,它们将运行得更快。也许您应该在您的 Oracle R 发行版上试一试,并与您的开源安装进行比较,以确认 ORE 正在使用英特尔 BLAS。

总的来说,当我尝试安装英特尔 BLAS 时,我并没有获得太多日常性能提升。 Revolution Analytics 对他们的非免费 R 分发如何利用英特尔 MKL 做出了重大贡献。但他们必须重写许多 R 函数以利用提高的速度。

【讨论】:

以上是关于英特尔 MKL 和 Oracle R 分发版的主要内容,如果未能解决你的问题,请参考以下文章

将 gfortran 与英特尔 MKL 链接

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

英特尔至强融核上的 MKL 3D 双精度复数 FFT

编译使用带有gfortran的英特尔MKL模块的代码

在 python 的 c 扩展中包括外部共享英特尔的 mkl 库

英特尔 MKL 或一些类似的库是不是提供了一种矢量化方式来计算数组中满足 C 中某些条件的元素数量?