函数参数:
__global__函数参数通过常量内存传递给设备,限制为4 KB。
__global__函数不能有可变数量的参数。
函数中的静态变量:
__device____global__函数的主体中,只有__shared__变量或没有任何设备内存空间说明符的变量可以用静态存储类声明。 在__device__` host函数的主体中,只有未注释的静态变量(即没有设备内存空间说明符)可以用静态存储类声明。 未注释的函数范围静态变量与名称空间范围中定义的__device__`变量具有相同的限制。 如果它们是类类型的,则它们不能具有非空的构造函数或非空的析构函数(请参阅设备内存空间说明符)。
下面显示了函数范围静态变量的合法和非法使用示例:

struct S1_t {int x;
};
struct S2_t {int x;__device__ S2_t(void) { x = 10; }
};
struct S3_t {int x;__device__ S3_t(int p) : x(p) { }
};
__device__ void f1() {static int i1; // OKstatic int i2 = 11; // OKstatic S1_t i3; // OKstatic S1_t i4 = { 22 }; // OKstatic __shared__ int i5; // OKint x = 33;static int i6 = x; // error: dynamic initialization is not allowedstatic S1_t i7 = { x }; // error: dynamic initialization is not allowedstatic S2_t i8; // error: dynamic initialization is not allowedstatic S3_t i9(44); // error: dynamic initialization is not allowed
}
__host__ __device__ void f2() {static int i1; // OKstatic __shared__ int i2; // error: __shared__ variable inside// a host function
}

函数指针:
主机代码中使用的__global__函数的地址不能用于设备代码(例如,启动内核)。 同样,在设备(计算能力大于3.5)代码中采用的__global__函数的地址不能用于主机代码。
不允许在主机代码中使用__device__函数的地址。
函数递归:
__global__函数不支持递归。
友函数:
__global__函数或函数模板不能在友函数声明中定义。
例子:

struct S1_t {friend __global__void foo1(void); // OK: not a definitiontemplate<typename T>friend __global__void foo2(void); // OK: not a definitionfriend __global__void foo3(void) { } // error: definition in friend declarationtemplate<typename T>friend __global__void foo4(void) { } // error: definition in friend declaration
};

类:
数据成员:
不支持静态数据成员,除了那些也是const限定的成员(请参阅Const限定变量)。
函数成员:
静态成员函数不能是__global__函数。
虚函数:
当派生类中的函数覆盖基类中的虚函数时,覆盖函数和覆盖函数上的执行空间说明符(即__host____device__)必须匹配。
不允许将具有虚函数的类的对象作为参数传递给__global__函数
编译器将虚函数表放置在全局或常量内存中。
虚基类:
不允许将__global__函数作为参数传递给从虚基类派生的类的对象。
Anonymous Unions:
名称空间作用域匿名联合的成员变量不能在__global__或__device__函数中引用。
Windows的具体:
CUDA编译器遵循IA64 ABI进行类布局,而Microsoft主编译器不支持。 这可能会导致CUDA编译器计算与Microsoft主编译器不同的类布局和大小,对于满足以下任何条件的类类型“T”或对于任何具有T作为字段类型或基类类型 班级类型(直接或间接):

  • T有虚函数。
  • T有一个虚拟基类。
  • T具有多个直接或间接空基类的继承。
  • T的所有直接和间接基类('B')都是空的,并且T('F')的第一个字段的类型在其定义中使用B,使得B在F的定义中的偏移量0处布局。

只要受影响的类别类型专门用于主机或设备代码,程序应该正常工作; 请勿在主机和设备代码之间传递此类类型的对象(例如,作为__global__函数的参数或通过cudaMemcpy *()调用)

CUDA学习(七十一)相关推荐

  1. springboot学习(七十一)解决问题:the URL contained a potentially malicious String “;“

    访问某个请求报错: org.springframework.security.web.firewall.RequestRejectedException: The request was reject ...

  2. JavaScript学习(七十一)—call、apply、bind学习总结

    JavaScript学习(七十一)-call.apply.bind学习总结 一.call方法 call方法调用一个对象,简单的理解为调用函数的方式,但是它可以改变函数的this指向 二.apply() ...

  3. CUDA学习(四):CUDA编程七个步骤

    博主CUDA学习系列汇总传送门(持续更新):编程语言|CUDA入门 文章目录 一.cudaMalloc.cudaMemcpy和cudaFree 介绍 二.CUDA编程七步曲 本章节学习内容: 1.CU ...

  4. CUDA学习(十一):原子操作实现向量内积

    博主CUDA学习系列汇总传送门(持续更新):编程语言|CUDA入门 文章目录 一.原子操作的概念 二.一次原子操作替换两次归约 三.Block内归约,block间原子操作 本文章为 < GPU编 ...

  5. Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)

    1. Nutch 1.3 的页面评分机制 Nutch1.3目前默认还是使用OPIC作为其网页分数算法,但其之后,已经引入了PageRank-like算法,以弥补OPIC算法的不足,目前OPIC算法还是 ...

  6. 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件

    本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...

  7. 七十一、Python | Leetcode字符串系列(上篇)

    @Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  8. jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集  jQuery框架学习第四天:使用jQ ...

  9. 深度学习(三十六)异构计算CUDA学习笔记(1)

    异构计算CUDA学习笔记(1) 原文地址:http://blog.csdn.net/hjimce/article/details/51506207 作者:hjimce 近日因为感觉自己在深度学习工程化 ...

  10. Apache Nutch 1.3 学习笔记十一(页面评分机制 LinkRank 介绍)

    下面是Google翻译的http://wiki.apache.org/nutch/NewScoring内容,是关于Nutch 新的链接分数算法的说明,有点类似于Google的PageRank,这里有其 ...

最新文章

  1. Xcode中通过删除原先版本的程序来复位App
  2. 【移动开发】Android中不用图片资源也能做出好看的界面
  3. 【贪心】Codeforces Round #436 (Div. 2) D. Make a Permutation!
  4. cs-HtmlHelpers
  5. python 源码保护_Python代码保护
  6. C#增删改查操作Access数据库之二(数据库的增加)
  7. 前端学习(3117):react-hello-react的类中的方法
  8. 阿里规定超过三张表禁止join,这是为什么?
  9. 阿拉伯数字转换成人民币大写金额的方法
  10. vue 阻止输入框冒泡
  11. 为什么公司要和商标同步注册?
  12. gimp 抠图_【GIMP学习】抠图方法二则
  13. Js-函数作用域和块作用域
  14. java -1%3_Java_SE 流程控制
  15. 小学生日常行为规范PPT模板
  16. PHP取整,四舍五入取整、向上取整、向下取整、小数截取
  17. 怎样缓解灾难性遗忘?持续学习最新综述三篇
  18. sublime text3 配置python、ruby、c/c++(c/c++不推荐这个方法)
  19. 幼师计算机应用基础的认识200字,《计算机应用基础》课程教学与学前教育专业的深度融合...
  20. 解决Error:All flavors must now belong to a named flavor dimension.

热门文章

  1. 【C++】引用与变量
  2. Oracle 10g与安装Perl环境时的冲突以及解决方法
  3. android 中文件操作模式
  4. 使用MakeCAB.exe命令创建CAB文件
  5. 2.1JAVA基础复习——JAVA语言的基础组成注释和常量变量
  6. javascript动画系列第一篇——模拟拖拽
  7. ASP.NET MVC Html.ActionLink使用说明
  8. C++ 虚函数在基类与派生类对象间的表现及其分析
  9. 一句话木马使用方法总结
  10. Linux基础第一周