CUDA编译器nvcc可能遇到:error: asm operand type size(8) does not match type/size implied by constraint ‘r‘

0. 问题描述

  1. 该问题产生于我在ptcharm中试图用cupy加速numpy计算,进行一些简单但是繁琐的数据处理,这个问题和cupy关系不大,cupy只要照着nvcc -v给出的版本号对应着下载就ok了
  2. 问题的本质是GPU代码的编译问题,因此pytorch等需要CUDA编译器(NVCC)的都有可能遇到这个问题
  3. 因为光顾着解决问题,没粘贴报错细节,报错信息其实很长,可以见这个帖子,我遇到的问题和他一样

1. 问题定位

  1. 问题定位到如下信息:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include\sm_32_intrinsics.hpp(124): error: asm operand type size(8) does not match type/size implied by constraint ‘r’

2. 解决方法

  • 因为我是利用pycharm,不是自己手动在命令行进行编译,所以采用了这个神帖里给出的第二种解决方法:在cmd中执行:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
  • 其实就是找到Microsoft Visual Studio文件夹下的VC\Auxiliary\Build\vcvarsall.bat这个东西,然后给它一个参数x64表示你是想要在64-bit环境下执行编译。
  • 注意执行完上述命令关闭cmd之后重启一下pycharm,不重启的我多走了半天的弯路哭都没地哭QAQ
  • 执行完上述命令后是这个样子:
    在这里插入图片描述
  • 如果你的问题没有解决,可以参照神贴下面另一个人给出的解决方法(都试试没坏处)
    在这里插入图片描述
  • 如果上述依然不能解决,可以看看自己环境变量里都设置对了没

3. 问题原因

  1. 怎么说,因为可能gcc或者什么很多是默认是32-bit进行编译,而nvcc基本都是64-bit(这个其实取决于你的电脑,一般都会下载64-bit)。很多项目包含了gpu代码和cpu代码(比如我用了cupy代替numpy的同时也用了一些cpu下的python包),nvcc编译gpu代码的时候默认是编译64位平台结果,然而cpu代码编译时可能使用了32位的编译器。
  2. But所有非CUDA编译由通用的C编译器完成,cl或者gcc。导致这种“混编”容易因为位数不同导致上述问题的出现。
  3. 至于再细节的我看到了一些说是“对齐方式”不同导致的,或者是“寄存器设置”导致的。总之都是64位和32位的设置在打架
  4. nvcc的编译可以参考这里

4. reference

https://blog.csdn.net/qq_42679415/article/details/124318003
https://stackoverflow.com/questions/12843846/problems-when-running-nvcc-from-command-line%5B/url%5D
https://blog.csdn.net/weixin_29022115/article/details/116587084?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-116587084-blog-116786403.t0_edu_mix&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-116587084-blog-116786403.t0_edu_mix&utm_relevant_index=1

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值