首页 > 其他分享 >CUDA C语言扩展

CUDA C语言扩展

时间:2022-08-24 08:22:07浏览次数:67  
标签:__ 调用 函数 扩展 指定 C语言 CUDA block 变量

 

 

CUDA C语言对C语言的扩展主要包含以下几个方面。
1.函数限定符

__device__:声明在设备上执行的函数。该函数无法被CPU端调用,只能由GPU端程序调用,即只能被__device__或__global__声明的函数调用。
__global__:声明的函数称为kernel函数。该函数只能被CPU端调用,执行在GPU上。Kernel函数类型必须是void,即返回类型必须为空。
__host__:声明在主机执行的函数,仅可在CPU端调用。一般情况可省略,只有该函数同时存在被设备端和主机端同时调用的情况需要添加该限定符,且无法与__global__联用。
2.变量限定符

__device__:声明在设备上的变量,该变量位于global memory(参见3.3节GPU存储体系),只能在设备端使用,是全局变量,无须也不能在函数参数表中出现。
__constant__:声明在常量存储中的变量,只能在设备端使用。此变量一般情况下是只读的,只能通过特定方式进行修改(详见16.6节)。该变量是全局变量,无须也不能在函数参数表中出现。
__shared__:声明在共享存储中的变量,仅供block内所有thread共享访存,退出kernel函数后失效。该变量无法初始化,一般声明在kernel函数中。
3.内置数组变量

char2、uchar2、char3、uchar3、char4、uchar4、short2、ushorta2、short3、ushort.3、short4、ushort4、int2、uint2、int3、uint3、int4、uint4、long2、ulong?2、long3、ulong3、long4、ulong4、f1oat2、float3、loat4、double2:结构体数据.
4.内建变量

gridDim:指定grid维度,类型为dim3。
blockDim:指定block维度,类型为dim3。
blockIdx:指定grid内block索引号,类型为uint3。
threadIdx:指定block内thread索引号,类型为uint3。
warpsize:指定warp内thread数量,类型为int。
5.kernel调用

kernel函数调用就是调用声明为__global__的函数,必须在主机端调用。调用时需要指定线程维度,指定方式为<<Bs,Ts,Ss,Si≥>,其中Bs指定gid内block维度,类型为dim3;Ts指定block内thread维度,类型为dim3;Ss指定共享存储空间大小,类型为size_t;Si指定流索引号;其中Ss和Si可选。
下面给出了一个实例(详细代码见第6章)进行说明,其中,blocknum为grid内的block数量,threadnum为block内的thread数量。vector_add_gpu_3<<<blocknum, threadnum>>>(d_a,d_b,d_c,n);

6.特殊函数和内建函数
CUDA C中引入了大量专用的特殊函数和内建函数以实现特定功能,比如同步函数、数学函数、纹理函数、测时函数、原子函数、存储栅栏函数等。



标签:__,调用,函数,扩展,指定,C语言,CUDA,block,变量
From: https://www.cnblogs.com/oliver2022/p/16610253.html

相关文章

  • PyTorch中的CUDA操作
      CUDA(ComputeUnifiedDeviceArchitecture)是NVIDIA推出的异构计算平台,PyTorch中有专门的模块torch.cuda来设置和运行CUDA相关操作。本地安装环境为Windows10,Python3.......
  • 计算机二级考试 C语言篇
    本篇仅适用于计算机二级考试C语言篇首先介绍一下二级考试时间问题(以本人考试2022年为例):一、2022年全国计算机二级考试时间 2022年全国计算机考试举办4次,(3月、......
  • 如何在 Linux 中扩展 XFS 根分
    最近在3A平台的平台下开通了Linux服务器,学习Linux服务器相关知识。在某些情况下,/分区在Linux中磁盘空间不足。即使压缩和删除旧的日志文件也无济于事,因此在这种情况下......
  • 数据类型扩展
    publicclassDemo03{publicstaticvoidmain(String[]args){//整数拓展;进制二进制0b十进制八进制0十六进制0xinti=10;int......
  • C语言 __VA_ARGS__ - C语言零基础入门教程
    一.__VA_ARGS__简介VA_ARGS是一个可变参数的宏,是新的C99规范中新增的,目前似乎只有gcc支持(VC从VC2005开始支持)。VA_ARGS需要配合define使用,总体来说就是将左边......
  • 扩展kmp
    扩展kmp扩展kmp处理的问题:字符串S和字符串T,求S的每个后缀与T的最长公共前缀nxt数组与kmp的不一样charS[N],T[N];intn,m,nxt[N],extend[N];//nxt[i]表示从T[i......
  • 初学C语言常见知识
    指针变量是用来存储地址的定义指针变量例如:int*p;int*p;//定义指针变量p*p//*是解引用操作符,间接访问操作符号(是指向地址的值)指针大小一般根据平台位数32位......
  • C语言声明和实现分开例子
    通常将c函数的声明放在头文件,实现放在另一个文件,最后函数被其他文件调用。一、声明1//last.h23#include<stdio.h>45voidtest1();二、实现1//last.c......
  • 乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 官方扩展集锦(Microsoft.AspN
    什么是Microsoft.AspNetCorehttps://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/metapackage-appASP.NETCore共享框架(Microsoft.AspNetCore.App)包含由Micr......
  • 字符串——创建,获取长度,复制,搜索——C语言描述
    字符串——创建,获取长度,复制,搜索——C语言描述目录字符串——创建,获取长度,复制,搜索——C语言描述1.字符串的存储结构2操作字符串3获取串的长度4拷贝字符串1.字符串的存......