3.4 SYNCHRONIZATION AND TRANSPARENT SCALABILITY

本文介绍了CUDA中如何通过__syncthreads()函数进行线程间的屏障同步,以确保并行活动的协调。作者通过现实生活中的例子解释了屏障同步的重要性,并讨论了同步对执行约束的影响,以及CUDA如何通过透明可扩展性在不同硬件上执行相同应用。
部署运行你感兴趣的模型镜像

到目前为止,我们已经讨论了如何启动内核以通过线程网格执行,以及如何将线程映射到数据结构的一部分。然而,我们尚未提出任何方法来协调多个线程的执行。我们现在将研究一个基本的协调机制。CUDA允许同一块中的线程通过使用屏障同步函数__syncthreads()来协调其活动。请注意,“__“由两个字符组成。**当线程调用__syncthreads()时,它将保持在调用位置,直到块中的每个线程到达该位置。**此过程确保块中的所有线程在进入下一阶段之前都已完成内核执行的一个阶段。

屏障同步是协调并行活动的一种简单而流行的方法。在现实生活中,我们经常使用屏障同步来协调多人的并行活动。为了说明,假设四个朋友开车去购物中心。他们都可以去不同的商店买自己的衣服。这是一个平行的活动,比他们都作为一个团体并按顺序访问所有感兴趣的商店要有效得多。然而,在他们离开商场之前,需要屏障同步。他们必须等到四个朋友都回到车上才能离开。那些比别人先完成的人需要等待那些稍后完成的人。如果没有屏障同步,当汽车离开时,一个或多个人可能会被留在商场里,这可能会严重损害他们的友谊!
在这里插入图片描述
图3.10说明了屏障同步的执行。块中有N个线程。时间从左到右。有些线程很早就到达了屏障同步语句,有些则很晚才到达。早到障碍物的人会等待那些晚到的人。当最新的到达障碍物时,每个人都可以继续执行。有了屏障同步,*没有人被抛在后面。”

在CUDA中,__syncthreads()语句(如果存在)必须由块中的所有线程执行。当__syncthread()语句放置在if语句中时,块中的所有线程或没有线程执行包含__syncthreads()的路径。对于if-then-else语句,如果每个路径都有_syncthreads()语句,则块中的所有线程要么执行then-path,要么所有线程都执行else-path。两个__syncthreads()是不同的屏障同步点。如果块中的一个线程执行然后路径,而另一个线程执行else路径,它们将在不同的屏障同步点等待。他们最终会永远等待对方。程序员有责任编写代码,以便满足这些要求。

**同步的能力还对块内的线程施加了执行约束。这些线程应彼此在时间上非常接近地执行,以避免等待时间过长。**事实上,人们需要确保障碍同步所涉及的所有线程都能获得必要的资源,以最终到达障碍。否则,一个从未到达障碍同步点的线程可能会导致其他人永远等待。CUDA运行时系统通过将执行资源作为单元分配给块中的所有线程来满足此约束。只有当运行时系统保护了所需的所有资源时,块才能开始执行块中的所有线程完成执行。当一个块的线程被分配给执行资源时,同一块中的所有其他线程也会被分配给同一资源。此条件确保了块中所有线程的时间接近,并防止屏障同步期间的等待时间过长或不确定。

这导致我们在CUDA屏障同步设计方面进行了重要的权衡。通过不允许不同块中的线程相互执行屏障同步,CUDA运行时系统可以按任何相对顺序执行块,因为它们都不需要相互等待。这种灵活性实现了可扩展的实现,如图3.11所示,时间从上到下。在一个只有少数执行资源的低成本系统中,人们可以同时执行少量块,在图3.11的左侧被描绘成一次执行两个块。在具有更多执行资源的高端实现中,可以同时执行大量块,在图3.11的右侧一次显示为四个块。
在这里插入图片描述
能够在广泛的速度范围内执行相同的应用程序代码,允许根据特定细分市场的成本、功率和pertormance要求生产广泛的实现。例如,移动处理器可能会以极低的功耗缓慢执行应用程序,而桌面处理器可能会以更高的速度但更高的功耗执行相同的应用程序。两者都执行完全相同的应用程序,不更改代码。在具有不同执行资源数量的硬件上执行相同应用程序代码的能力被称为透明可扩展性。这一特点减轻了应用程序开发人员的负担,并提高了应用程序的可用性。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值