[CUDA]去除Eigen库中的warning

一、问题提出

假如使用nvcccuda代码进行编译时,如果代码中使用了Eigen库(头文件),编译时可能会显示很多warning information,如下图红框中所示:

Eigen Warning 1
Eigen Warning 2

这些warning信息虽然不会影响代码的实际运行,但会令编译提示很乱,不便于按照编译器给出的信息进行debug。
本文将介绍如何在cuda代码中去除eigen库相关的、我们并不关心的warning信息。

二、解决方法

0. 基本思路

其实按照上图中的提示(黄框):
Remark: The warnings can be suppressed with "-diag-suppress <warning-number>"
可以看出,只要给nvcc编译器添加参数-diag-suppress <warning-number>即可消除这些warning信息。
其中:

  • -diag-suppressnvcc编译器的一个flag参数,用于Suppress specified diagnostic message(s) generated by the CUDA frontend compiler (note: does not affect diagnostics generated by the host compiler/preprocessor)
  • <warning-number>是warning信息的编号,例如上图中warning信息的编号就是2001220014(上图中绿框中的编号),注意2001220014,不是20012-D20014-D

下面给出三种方法,都可以达到我们的目的。

方法一:在cmake代码中

在cmake 文件中添加如下语句

set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-diag-suppress=20012,20014")

或者

set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -diag-suppress=20012,20014)

方法二、在执行cmake时

我们也可以在build目录下,执行cmake ..生成make文件时通过以下命令设置nvcc的flag

# 在build目录下
cmake -DCMAKE_CUDA_FLAGS=-diag-suppress=20012,20014 ..

方法三、在CUDA代码中

其实eigen库官方也知道这个问题的存在,也提供了相应的头文件用于disable stupid warnings,我们也可以在包含eigen库头文件前的代码中手动加入以下代码用于消除eiegn的warning信息。

但我在使用下面代码时只能消除20012号信息,对20014不管用,不知道为什么 : (

...
#pragma nv_diag_suppress 20012
#pragma nv_diag_suppress 20014
#include <eigen/Eigen/Core>
#include <eigen3/Eigen/Dense>
...

三、参考

  1. NVIDIA CUDA Compiler Driver NVCC-4.2.8.14. --diag-suppress
  2. Disable NVCC warnings due to Eigen library code
  3. passing flags to nvcc via CMake
  4. https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/Core/util/DisableStupidWarnings.h#L76-96

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最强人工智能ChatGPT引领AIGC发展

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- ——AI不会淘汰所有人&#xff0c;但会淘汰不懂AI的人 一、最强人工智能GPT-4 Turbo 在前不久的OpenAI开发者大会&#xff0c;正值Chatgpt3.5发布一…

微信第三方平台开发重点概念流程梳理

标题 微信开发的亿点点概念第三方平台代开发流程亿些概念开发流程 代公众号使用JS SDK一些概念具体流程引用 微信开发的亿点点概念 AppID&#xff1a;AppID是不同类型的产品的账号ID,是账号的唯一标识符。例如公众号的AppID、小程序的AppID、开放平台的AppID、第三方平台的App…

4.6每日一题(多元函数的隐函数求导)

三元方程确定的二元函数类型的隐函数 方法一&#xff1a;两边对x求偏导&#xff0c;把y看成常数 注&#xff1a;z可以把x和y同时代入求出答案 方法二&#xff1a;带公式

Java 11及更高版本的Oracle JDK版本

2021 年 9 月 14 日&#xff0c;Oracle 发布了可以长期支持的 JDK17 版本&#xff0c;那么从 JDK11 到 JDK17&#xff0c;到底带来了哪些特性呢&#xff1f;亚毫秒级的 ZGC 效果到底怎么样呢&#xff1f;值得我们升级吗&#xff1f;而且升级过程会遇到哪些问题呢&#xff1f;带…

【WiFI问题自助】解决WiFi能连上但是没有网的问题

WiFi能连上但是没有网的问题 背景&#xff1a;wifi能连上&#xff0c;但是没有网 解决 遇事不决&#xff0c;先重启啊&#xff01;怎么重启&#xff1f;拔掉电源再插上&#xff01;拔掉网线再插上&#xff01; 直接ok了。 思考记录 今天WiFi又上不了网了&#xff0c;昨天报…

机器学习---初识贝叶斯分类器

1. 引入问题 有两个可选的假设&#xff1a;病人有癌症、病人无癌症&#xff0c;可用数据来自化验结果&#xff1a;正和负- 有先验知识&#xff1a;在所有人口中&#xff0c;患病率是0.008&#xff0c;对确实有病的患者的化验准确率为98%&#xff0c;对确实无 病的患者的化验…

asp.net智能考试系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 asp.net 智能考试系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 系统运行视频 https://www.bilibili.com/video/BV1gz4y1A7Qp/ 二、功能介绍 本系统使用Microsoft Visual Studio 201…

Triage沙箱监控

Triage沙箱可以免费分析恶意软件样本。最先进的恶意软件分析沙箱&#xff0c;具有您需要的所有功能。 在可定制的环境中提交大量样本&#xff0c;并对许多恶意软件系列进行检测和配置提取。立即查看公开报告并对您的恶意软件进行分类&#xff01; 官方网址&#xff1a;https:…

【STL】string类 (上) <vector>和<list>的简单使用

目录 一&#xff0c;什么是 STL 二&#xff0c;STL 的六大组件 三&#xff0c;标准库中的 string 类 1&#xff0c;string 类 2&#xff0c;string 类的常用接口 1&#xff0c;string类对象的常见构造 2&#xff0c;string&#xff08;const string& str&#xff…

vulhub redis-4-unacc

环境搭建 cd vulhub/redis/4-unacc docker-compose up -d 漏洞复现 检测 redis-cli -h ip 使用redis工具 工具地址&#xff1a;https://github.com/vulhub/redis-rogue-getshell 下载完成后&#xff0c;先进入RedisModulesSDK/exp/ 目录进行make操作 获得exp.so后可以进行…

实验三 页面置换算法

一. 实验目的&#xff1a; 1、熟悉虚存管理的各种页面淘汰算法 二、实验环境&#xff1a; 硬件环境&#xff1a;计算机一台&#xff0c;局域网环境&#xff1b; 软件环境&#xff1a;Windows XP及以上版本 Professional操作系统平台&#xff0c;Visual C 6.0专业版或企业版…