• 59 cuda 不同版本__half冲突问题 —— "__half" has no member "x"



    0 引言


     深度学习中常常用到half类型的半精度浮点数,但是cpu本身是不支持half的,因此需要进行转换。 


    1 half - float转换


     参考了某博主的github,链接如下。

    https://github.com/ma-xiaodong/float_half_convertion/blob/master/convert.c 

    2 half使用中的冲突解决


     (1)冲突描述

    提示 "__half" has no member "x". 问题是之前我运行 "./compile"对代码进行编译一直是可以通过的呀,我怀疑是不是有人更改过环境变量,所以编译器链接了其他文件中的 __half类,导致我的程序出错。

    (2)定位错误:我到程序中寻找包含__half的头文件,有这样一些

    我首先去cuda里找了一波,发现 "cuda_fp16.h"  里边可能定义了half,然后用 locate cuda_fp16.h 找到了如下结果。

    有条命令可以直接打开目录很好用。

    nautilus /usr/local/cuda-9.0/targets/x86_64-linux/include/cuda_fp16.h

    然后我去目录下看了这两个文件里边对__half的定义,发现在cuda8.0里边,有成员x,而在cuda9.0里边,成员为__x,而且是私有成员,这样问题就很清楚了,是版本冲突。解决的办法是将cuda的软链接指向cuda8.0, 命令如下。

    cd /usr/local   # 目录切换到系统安装cuda的目录下
    stat cuda       # 查看软链接指向哪个版本的cuda
    sudo rm -rf cuda   # 删除该软链接
    sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda   # 重新指向cuda8.0
    stat cuda # 查看软链接是否修改成功

    (3)查看结果

    成功解决cuda版本冲突问题。

  • 相关阅读:
    WSDL
    对协程的理解
    调用webServer
    待看
    BZOJ4668 冷战(并查集)
    BZOJ4651 NOI2016网格(割点)
    Lyft Level 5 Challenge 2018
    BZOJ3073 PA2011Journeys(线段树+bfs)
    BZOJ4602 SDOI2016齿轮(搜索)
    BZOJ4597 SHOI2016随机序列(线段树)
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/10608023.html
Copyright © 2020-2023  润新知