[Eigen中文文档] 在 BLAS/LAPACK 、英特尔® MKL 和 CUDA 中使用 Eigen

news2024/11/24 3:10:27

文档总目录

本文目录

    • 在BLAS/LAPACK使用 Eigen
    • 在英特尔® MKL使用 Eigen
      • 链接
    • 在 CUDA 内核中使用 Eigen

在BLAS/LAPACK使用 Eigen

英文原文(Using BLAS/LAPACK from Eigen)

自Eigen 3.3版本以及以后,任何F77兼容的BLAS或LAPACK库都可以用作稠密矩阵乘积和稠密矩阵分解的后端。例如,可以在OSX上使用Intel® MKL,Apple的Accelerate框架,OpenBLAS,Netlib LAPACK等。

请务必查看此页面以进一步讨论关于使用Intel® MKL(也包括VML,PARDISO等)的具体用法。

为了使用外部BLAS和LAPACK库,您必须将自己的应用程序链接到相应的库及其依赖项。对于LAPACK,还必须链接到标准的Lapacke库,它用作Eigen的C++代码和LAPACK F77接口之间方便的中间层。然后,必须通过定义以下一个或多个宏(在包含任何Eigen头文件之前)来激活它们的使用:

注意:

对于Mac用户,为了使用与Accelerate框架一起提供的lapack版本,您还需要lapacke库。使用MacPorts很容易实现:

sudo port install lapack

然后使用以下链接标志:-framework Accelerate /opt/local/lib/lapack/liblapacke.dylib

描述
EIGEN_USE_BLAS启用外部BLAS级别2和3例程的使用(与任何F77 BLAS接口兼容)。
EIGEN_USE_LAPACKE启用通过Lapacke C接口到Lapack的外部Lapack例程的使用(与任何F77 LAPACK接口兼容)。
EIGEN_USE_LAPACKE_STRICTEIGEN_USE_LAPACKE相同,但数字鲁棒性较低的算法被禁用。
这目前仅涉及JacobiSVD,否则会被gesvd替换,后者比Jacobi旋转不太稳健。

在这种情况下,Eigen的一些算法会被隐式地替换为对BLAS或LAPACK例程的调用。这些替换仅适用于使用以下四种标准标量类型之一的动态或足够大的对象:floatdoublecomplex<float>complex<double>。对其他标量类型的操作或混合实数和复数的操作将继续使用内置的算法。

可以被替换的Eigen功能的广度如下表所示:

在这里插入图片描述

在这些例子中,m1m2是密集矩阵,v1v2是密集向量。

在英特尔® MKL使用 Eigen

英文原文(Using Intel® MKL from Eigen)

自Eigen 3.1版本及以后,用户可以使用Intel®Math Kernel Library(MKL)如果安装了Intel MKL 10.3(或更高版本)。

Intel MKL 提供了针对x86兼容架构高度优化的多线程数学例程。Intel MKL可在LinuxMacWindows上使用,适用于Intel64IA32架构。

注意:

Intel® MKL是专有软件,用户需要购买或注册社区(免费)Intel MKL许可证来使用它。此外,用户产品的许可证必须允许链接到专有软件,但不包括任何未经修改的GPL版本。

通过Eigen使用Intel MKL很容易:

  1. 在包含任何Eigen的头文件之前定义EIGEN_USE_MKL_ALL宏。
  2. 将你的程序链接到MKL库(请参阅MKL链接指南)。
  3. 在64位系统上,你必须使用LP64接口(而不是ILP64接口)。

在这样做时,一些Eigen的算法会被替换为调用Intel MKL例程,而这种替换仅适用于具有以下四种标准标量类型之一的动态或足够大的对象:floatdoublecomplex<float>complex<double>。使用其他标量类型或混合实数和复数的操作仍将使用内置的算法。

此外,您可以选择定义以下一个或多个宏来决定哪些部分将被替换:

描述
EIGEN_USE_BLAS启用使用外部BLAS Level 2Level 3例程。
EIGEN_USE_LAPACKE启用使用Lapacke C接口到Lapack的外部Lapack例程。
EIGEN_USE_LAPACKE_STRICTEIGEN_USE_LAPACKE相同,但将禁用鲁棒性较低的算法。这仅涉及到JacobiSVD,否则将被gesvd替换,后者比Jacobi旋转算法鲁棒性更低。
EIGEN_USE_MKL_VML启用Intel VML(向量操作)的使用。
EIGEN_USE_MKL_ALL定义了EIGEN_USE_BLASEIGEN_USE_LAPACKEEIGEN_USE_MKL_VML

EIGEN_USE_BLASEIGEN_USE_LAPACKE*宏可以与EIGEN_USE_MKL结合使用,以显式告诉Eigen底层的BLAS/Lapack实现是Intel MKL。主要效果是启用MKL直接调用功能(MKL_DIRECT_CALL)。这可能有助于提高某些MKL BLAS?GEMM?GEMV?TRSM?AXPY?DOT)和LAPACKLUCholeskyQR)例程对非常小的矩阵的性能。可以通过定义EIGEN_MKL_NO_DIRECT_CALL来禁用MKL直接调用。

请注意,BLASLAPACKE后端可用于任何F77兼容的BLASLAPACK库。有关详细信息,请参见 此页面。

最后,Intel MKL附带的PARDISO稀疏求解器可以通过PardisoSupport模块的PardisoLUPardisoLLTPardisoLDLT类来使用。

下表总结了EIGEN_USE_MKL_VML覆盖的函数列表:

在这里插入图片描述

在这些例子中,v1v2是密集的向量。

链接

  • Intel MKL可以在这里购买和下载。
  • Intel MKL还捆绑在Intel Composer XE中。

在 CUDA 内核中使用 Eigen

英文原文(Using Eigen in CUDA kernels)

CUDA 5.5Eigen 3.3开始,可以在CUDA核函数内使用Eigen的矩阵、向量和数组(fixed size)。这在处理众多但小型问题时特别有用。默认情况下,当在由nvcc编译的.cu文件中包含Eigen头文件时,大多数Eigen的函数和方法都会被设备主机关键字前缀,使它们可从主机和设备代码中调用。这种支持可以通过在包含任何Eigen头文件之前定义EIGEN_NO_CUDA来禁用。这在仅在主机端使用Eigen的.cu文件使用时可能有用。但是,在两种情况下,主机的SIMD矢量化必须在.cu文件中禁用。因此,强烈建议将所有昂贵的主机计算从.cu文件恰当地移动到常规的.cpp文件中。

已知问题:

  • nvccMS Visual Studio不兼容(欢迎提交补丁)。
  • nvcc 5.5gcc-4.7(或更高版本)使用标准库<limits>头文件有问题。为了解决这个问题,您可以在包含任何其他文件之前添加以下内容:
// workaround issue between gcc >= 4.7 and cuda 5.5
#if (defined __GNUC__) && (__GNUC__>4 || __GNUC_MINOR__>=7)
  #undef _GLIBCXX_ATOMIC_BUILTINS
  #undef _GLIBCXX_USE_INT128
#endif
  • 在64位系统上,Eigen默认使用长整型作为索引和大小的类型。在CUDA设备上,默认使用32位整型是有意义的。但是,为了使主机和CUDA代码兼容,Eigen不能自动完成此操作。因此,用户需要在整个代码中(如果没有通过Eigen对象在主机和CUDA代码之间进行交互,则仅在CUDA代码中)定义EIGEN_DEFAULT_DENSE_INDEX_TYPEint

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第九十四天学习记录:C++核心:类和对象Ⅲ(五星重要)

深拷贝与浅拷贝 深浅拷贝是面试经典问题&#xff0c;也是常见的一个坑 浅拷贝&#xff1a;简单的赋值拷贝操作 深拷贝&#xff1a;在堆区重新申请空间&#xff0c;进行拷贝操作 #define _CRT_SECURE_NO_WARNINGS 1#include<iostream> using namespace std;class Perso…

简述环保用电监管云平台

1、概述 推进打赢蓝天保卫战&#xff0c;打好碧水保卫战&#xff0c;打胜净土保卫战&#xff0c;加快生态环境保护、建设美丽中国&#xff0c;各省市结合物联网和大数据政策&#xff0c;也相继颁布有关污染治理设施用电监管平台等相关政策。针对企业内的环保设施、设备运行状况…

Spring Boot中Elasticsearch的连接配置、原理与使用

Spring Boot中Elasticsearch的连接配置、原理与使用 引言 Elasticsearch是一种开源的分布式搜索和数据分析引擎&#xff0c;它可用于全文搜索、结构化搜索、分析等应用场景。在Spring Boot中&#xff0c;我们可以通过Elasticsearch实现对数据的搜索和分析。本文将介绍Spring …

力扣 -- 62.不同路径、63.不同路径2

题目链接&#xff1a;64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 以下是用动态规划的思想来解决这两道类似的动规的题目&#xff0c;相信各位老铁都是能够学会并且掌握这两道经典的题目的。 参考代码&am…

mac上使用brew安装mysql5.7

使用Homebrew进行MySQL数据库的安装需要MacOS系统中已经安装了相关环境 1.查询软件信息 首先使用search命令搜索MySQL数据库完整名称&#xff1a; brew search mysql可以看到5.7版本的MySQL数据库完整名称是mysql5.7 2. 执行安装命令 使用install命令进行软件安装&#xf…

Proxy vs Object.defineProperty:哪种对象拦截机制更适合你?

文章目录 简述版详解版相同点不同点1. 功能不同2. 语法和使用方式不同3. 支持程度不同4. 性能差异 简述版 Proxy 和 Object.defineProperty 是 JavaScript 中用于实现对象拦截和代理的两种不同机制。 Object.defineProperty 是一种在对象上定义新属性或修改现有属性的方式。 …

eNSP-DHCP全局配置和接口配置

eNSP-DHCP全局配置和接口配置 文章目录 eNSP-DHCP全局配置和接口配置一、题目要求二、题目分析三、拓扑结构搭建四、基本配置五、测试验证 一、题目要求 要求 &#xff1a; 1 、GE0/0/0 口所在广播域使用全局配置模式 2 、 GE0/0/1 口所在广播域使用接口配置模式 3 、 租期时间…

远古 Windows 98 SE 和 putty 0.63 连接 SSH

远古 Windows 98 SE 和 putty 0.63 连接 SSH 不忘初心一、故障表现二、产生原因三、解决办法四、重启 SSHD 服务生交配置参考 作者&#xff1a;高玉涵 时间&#xff1a;2023.7.1 操作系统&#xff1a; Windows 98 第二版 4.10.2222 A Linux version 5.19.0-32-generic (build…

慧灵六轴机械臂和电动夹爪,适配全自动粉面烘焙机器人

近日&#xff0c;慧灵科技HITBOT推出的六轴机械臂和平行电动夹爪等产品&#xff0c;出现在一台全自动粉面&烘焙机器&#xff0c;为煮饺子、云吞、面条的传统方式注入了现代科技的力量。这台机器结合了先进的六轴机械臂产品和精密的智能控制系统&#xff0c;能够在短时间内完…

CleanMyMac X中文版Mac电脑系统清理工具使用测评

有些人可能会说&#xff0c;mac系统根本就不需要清理&#xff0c;但是真正到你磁盘快满的时候就不是这种想法了&#xff0c;不管什么系统&#xff0c;它都会缓存一些系统、用户等文件&#xff0c;可能当时能够帮上大忙&#xff0c;能够在操作的时候更快、更便捷&#xff0c;但是…

78、基于STM32单片机步进电机速度调速控制系统设计(程序+原理图+PCB源文件+参考论文+开题报告+流程图+元器件清单等)

摘 要 伴随着时代的快速发展&#xff0c;单片机的应用也越来越广泛&#xff0c;促进了微电子和计算机的快速发展。我们日常生活中步进电机扮演着很重要的角色在我们身边随处可以见。因为步进电机本身的结构组成相对于比较简单、价格也比较便宜廉价。比如压榨机&#xff0c;打印…

【FATE联邦学习】get out put data报错output dir = result[“directory“]KeyError:directory“

报错信息不清不楚的。 经过几个周的排查&#xff0c;有以下原因&#xff1a; 自定义的trainer里面的predict函数没有返回有效的返回值。也有可能是自定义的网络没有使用softmax结尾。&#xff08;若没有&#xff0c;加上即可&#xff09; 应该是二者满足其一就可以。。因为有…

利用spleeter库实现人声和音乐分离(踩过的坑及解决方法)

0&#xff1a;起因 事情的起因是&#xff1a;想用一首歌的伴奏剪视频&#xff0c;但找遍各大平台&#xff0c;都只有原曲&#xff0c;没有伴奏。能找到的进行人声和背景音乐分离的软件都要收费&#xff0c;最后决定用spleeter库&#xff0c;尝试进行音频分离。 1&#xff1a;…

DAY3、DAY4(路飞)

字典 因为key不能为变量 只能为不可变的值 字典的key必须是唯一的 不然后面的值会吧前面的值覆盖 字典取值只能一个一个取 且只能通过key查询value 不能反过来 d.items就是变成了列表里 元祖的形式 这种取值是最推荐的。第三种比第二种推荐的方式 是因为第2种取值会先转…

Redis实战篇(四)

六.秒杀优化 6.1 秒杀优化-异步秒杀思路 之前的下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查…

【NoSQL之 Redis配置】

目录 一、关系数据库与非关系型数据库1、关系型数据库和非关系型数据库区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 2、非关系型数据库产生背景总结 二、Redis简介1、Redis 具有以下几个…

碳排放预测模型 | Python实现基于DT决策树的碳排放预测模型

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于DT决策树的碳排放预测模型 研究内容 碳排放被认为是全球变暖的最主要原因之一。 该项目旨在提供各国碳排放未来趋势的概述以及未来十年的全球趋势预测。 其方法是分析这些…

迁移Notes最近应用和工作台图标到Nomad Web中

大家好&#xff0c;才是真的好。 今天我们分享一个十分有趣的技术话题&#xff0c;就是将Notes客户机&#xff08;MacOS和Windows&#xff09;上的最近访问应用和工作台图标迁移到Nomad Web中&#xff0c;这样用户就可以在Nomad Web和Notes中获得一致的使用体验。 毕竟Nomad …

maven项目如何引入项目本地jar包

目录 背景操作 背景 由于项目需要&#xff0c;对jar包中的内容进行了一点改变&#xff0c;但是由于不熟悉公司maven仓库发布流程&#xff0c;所以就把jar包放到了项目中&#xff0c;那就需要将本地jar包交给maven管理 操作 在项目中新建目录lib&#xff0c;然后将jar包放在其…

Xilinx ZYNQ系列10款型号IDCODE汇总(2023年7月最新版)

ZYNQ系列产品选型手册&#xff1a;zynq-7000-product-selection-guide /* Zynq Devices. */ #define IDCODE_XC7Z007 0x03723093 #define IDCODE_XC7Z010 0x03722093 #define IDCODE_XC7Z012 0x0373C093 #define IDCODE_XC7Z014 0x03728093 #defi…