ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 设备代码中CUDA类静态成员的成语?

2019-08-28 05:07:32  阅读:275  来源: 互联网

标签:c c11 cuda gpu-programming static-members


所以,我有一个C 14库,我正在移植到CUDA 9.我实际上(我认为)对CUDA非常了解,但是自从CUDA 6以来我没有做过任何直接的工作.

通常,我在代码中使用了很多模板和小类.令我感到惊讶的是,在CUDA 9中仍然没有静态的__device__类成员,但是全局变量很好.这有一个很好的习语或解决方法吗?人们通常做什么?

编辑:我应该清楚,我的意思是专门针对模板化课程.如果这个类没有模板化,那就非常简单了.

编辑2:这是一些示例代码

在正常的主机端C我这样做:

template <typename T>
class MyClass {
    static T my_static_member;
};

在设备上,这将无法编译,那么什么是一个很好的等价物?

template <typename T>
class MyClass {
    static __device__ T my_static_member;
};

解决方法:

您可以使用(模板化的)全局变量而不是静态成员,也可以将它们放在详细命名空间中:

namespace detail {
namespace MyClass {

template <typename T> __device__ T my_static_member;

} // namespace detail
} // namespace MyClass

template <typename T>
class MyClass {

    // ... you use detail::MyClass::my_static_member<T> in the code
};

…但不是这需要将–std = C 14传递给nvcc.

进一步的修改 – 基本上是一种风格问题 – 可以添加一种非技术静态但又有种类的吸气剂:

template <typename T>
class MyClass {
    const T& my_static_member() const {
        return detail::MyClass::my_static_member<T>;
    }
    // ... you use my_static_member() in the code
};

标签:c,c11,cuda,gpu-programming,static-members
来源: https://codeday.me/bug/20190828/1748288.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有