CUDA学习3
创始人
2024-06-02 00:11:36
0

昨天试着在GPU上输出了"HELLO WORD!"以及cuda的存储问题,那么今天先开始看第一个:线程管理:

核函数在主机端启动的时候,他的执行会移动到设备上去,这个时候,设备上会产生大量的线程,而且每一个线程都在执行由核函数指定的语句,所以,怎么样去组织线程是CUDA的一个关键部分,CUDA明确了线程层次抽象的概念,以便于我们组织线程,这里我们展示书上的一个两层的线程层次结构:

图一

由一个内核启动所产生的线程统称为一个网格,同意网格中的所有线程共享相同的全局存储空间,一个网格由多个线程块构成,一个线程块内又包含了一组线程,同一线程块内的线程写作可以通过以下方式来实现:

  1. 同步

  1. 共享内存

但是,不同块内的线程不能够协作!!!

线程依靠两个坐标变量来找:

  1. blockidx:线程块在线程网格内的索引

  1. threadidx:线程块内的线程索引

这两个变量是核函数中需要预先初始化的,当执行一个核函数的时候,CUDA运行时就会给每个线程分配以上两个变量,基于这种思想,我们就可以很轻松的把数据给分配到不同的线程中去,

CUDA是可以组织三维的网格和块的:

blockIdx.x
blockIdx.y
blockIdx.z
threadIdx.x
threadIdx.y
threadIdx.z

他的结构是一个包含二维块的二维网格,网格和快的维度由下面两个内置变量指定:

  1. blockDim:线程快的维度:每个线程块中的线程数

  1. gridDim:线程格的维度,每个线程格中的线程数来表示

和上面一样也是三维的;

通常,一个线程格会被组装成线程块的二维数组形式,一个线程块会被组织成线程的三维数组形式。

CUDA程序中有两种不同的网格和块变量:

  1. 手动定义的dim3数据类型(仅主机端可见)

  1. 预定义的uint3数据类型(仅设备端可见)

主机端作为内核调用的一部分,可以用dim3来定义一个网格和块的维度,执行核函数的时候,CUDA运行时会自动生成相应的内置预初始化的网格,块和线程变量,在核函数内均可以被访问且都是uint3类型。网格大小是块的倍数,跟着书上的学着写一下:checkDimension.cu文件:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include
#include
#include
__global__ void checkDimension() {printf("threadindex:(%d,%d,%d) blockindex:(%d,%d,%d)    blockdimindex:(%d,%d,%d)""griddim:(%d,%d,%d)\n", threadIdx.x, threadIdx.y, threadIdx.z, blockIdx.x, blockIdx.y, blockIdx.z, blockDim.x, blockDim.y, blockDim.z, gridDim.x, gridDim.y, gridDim.z);}
int main() {int nElem = 6;dim3 block(3);dim3 grid((nElem + block.x - 1) / block.x);printf("grid.x%d,grid.y%d,grid.z%d\n", grid.x, grid.y, grid.z);printf("block.x%d,block.y%d,block.z%d\n", block.x, block.y, block.z);checkDimension << > > ();cudaDeviceReset();return 0;
}

图二:运行结果

对于一个给定的数据大小,确认网格和块尺寸的一般步骤是:

  1. 确定块的大小

  1. 在已知数据大小和块大小的基础上计算网格维度

要确定块的尺寸,通常要考虑的是

  1. 内核的性能特性

  1. GPU资源的限制

相关内容

热门资讯

恋夜视频安卓系统Uc,恋夜视频... 亲爱的读者,你是否曾在深夜时分,被手机屏幕上跳动的视频吸引?今天,就让我带你一探究竟,揭开恋夜视频安...
鸿蒙套娃安卓系统视频,融合与创... 你知道吗?最近科技圈可是炸开了锅,因为华为的新操作系统鸿蒙OS又有了新动作。这不,他们竟然把鸿蒙套娃...
xp系统连接安卓手机问题,实用... 你有没有遇到过这样的情况:你的电脑上还运行着那个经典的XP系统,而你的安卓手机却时不时地想要和你亲密...
压缩安卓系统储存空间,高效管理... 手机里的照片越来越多,游戏也越玩越上瘾,可这安卓系统的储存空间却越来越紧张,是不是感觉像是在挤牙膏?...
安卓手游转苹果系统教程,轻松实... 你是不是也和我一样,手头有一堆安卓手游,突然之间想换换口味,体验一下苹果系统的魅力呢?别急,今天就来...
安卓原生系统锁屏暗,安卓系统锁... 亲爱的手机控们,你是否曾为安卓手机锁屏时的暗模式而感到好奇?那种在夜晚或光线不足的环境中,屏幕自动调...
安卓系统表情包下载地址,安卓系... 你是不是也和我一样,对安卓系统的表情包爱不释手?那些搞笑的、可爱的、甚至是有点小调皮的表情,总能让我...
原生安卓系统声音bug,揭秘那... 你有没有遇到过这种情况?手机里突然传来一阵奇怪的声音,让你瞬间从美梦中惊醒,或者正在专心工作时被打扰...
水果收银机安卓系统,便捷高效的... 你有没有想过,在繁忙的超市里,那些摆满新鲜水果的摊位,背后竟然隐藏着一个小小的科技秘密?没错,就是那...
安卓系统变苹果界面了吗,苹果界... 最近手机界可是炸开了锅,不少安卓用户都在议论纷纷:“安卓系统变苹果界面了吗?”这事儿可真不简单,得好...
miui操作系统与安卓系统吗,... 亲爱的读者,你是否曾在手机上看到过MIUI操作系统和安卓系统这两个名字,好奇它们之间有什么区别?今天...
安卓系统怎么卡道具界面,探究原... 手机用久了,是不是感觉安卓系统越来越卡?尤其是那个道具界面,点开就慢吞吞的,真是让人头疼。别急,今天...
安卓系统红包加速器,畅享无阻新... 你有没有发现,现在用手机抢红包简直是一场速度与激情的较量?别急,别急,让我来给你揭秘一款神器——安卓...
安卓经典版系统更新时间,从首次... 你有没有发现,最近你的安卓手机又悄悄地变了个样?没错,就是那个陪伴我们多年的经典版系统,它又来更新啦...
安卓系统开发要多久,约需1-2... 你有没有想过,自己动手开发一个安卓应用,究竟需要多长时间呢?这可是个让人好奇的问题,毕竟安卓系统开发...
原生安卓系统手机壁纸图片,探索... 亲爱的手机控们,你是否曾为寻找一款独特的壁纸而烦恼?今天,就让我带你走进原生安卓系统手机壁纸的奇幻世...
bmw安卓互联系统,智能驾驶新... 你有没有发现,现在开车已经不仅仅是驾驶那么简单了?一辆好车,还得有个好“大脑”,这样才能让你的驾驶体...
安卓手机升级系统卡吗,安卓手机... 你有没有遇到过这种情况:安卓手机升级系统后,突然感觉手机像蜗牛一样慢吞吞的,心里那个急啊!今天,就让...
无线麦克风安卓系统,轻松实现无... 你有没有想过,在一场热闹的K歌派对或者重要的演讲场合,无线麦克风简直就是救星啊!想象你手握麦克风,自...
怎么重新定制安卓系统,打造专属... 你有没有想过,你的安卓手机其实可以变得独一无二,就像是你自己的小宇宙一样?没错,就是重新定制安卓系统...