计算机视觉 基于CUDA编程的入门与实践 线程及同步一

本文介绍了CUDA编程中的并行执行规模,通过实例展示了如何启动多个线程块进行大规模线程并行计算,并探讨了存储器架构,包括全局内存、共享内存等的不同特性和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、并行执行规模

        CUDA关于并行执行具有分层结构。每次内核启动时可以被切分成多个并行执行的块,而每个块又可以进一步地被切分成多个线程。这种并行执行的副本可以通过两种方式完成:一种是启动多个并行的块,每个块具有1个线程;另一种是启动1个块,每个块里具有多个线程。

        通过共享内存1个块中的线程可以相互通信。所以启动1个具有多个线程的块让里面的线程能够相互通信是一个优势。更加理想的则是,我们并不单独启动1个块,里面多个线程;也不启动多个块,每个里面1个线程。我们一次并行启动多个块,每个块里面多个线程(最多可以是maxThread-PerBlock的数量)。

        所以,假设上一章的那个向量加法例子你需要启动N=50000这么多的线程,我们可以这样调用内核:

gpuAdd << <((N+511)/512), 512 >> > (d_a, d_b, d_c);

        这个N最大可以是多少? 从计算能力3.0(目前CUDA能支持的最低计算能力)开始该x方向上的块数量就已经被放开了。因为考虑N过大而不能直接计算块数量的做法已经不需要考虑了。因为当前的限制是如此巨大,在2的31次方减1的块数量和每个块中1024的线程数量,只有非常巨大的N才能超出限制,大约在万亿级别的a,b,c中的元素数量才有可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐望云起

如果觉得有用,请不吝打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值