前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >DAY12:阅读CUDA C Runtime 之多GPU编程

DAY12:阅读CUDA C Runtime 之多GPU编程

作者头像
GPUS Lady
发布于 2018-06-22 10:23:53
发布于 2018-06-22 10:23:53
1.8K0
举报
文章被收录于专栏:GPUS开发者GPUS开发者

今天我们用一篇文章讲解完多GPU编程。

3.2.6. Multi-Device System

3.2.6.1. Device Enumeration【GPU枚举】

A host system can have multiple devices. The following code sample shows how to enumerate these devices, query their properties【属性】, and determine the number of CUDA-enabled devices.

3.2.6.2. Device Selection【GPU选择】

A host thread can set the device it operates on at any time by calling cudaSetDevice(). Device memory allocations and kernel launches are made on the currently set device; streams and events are created in association with the currently set device. If no call to cudaSetDevice() is made, the current device is device 0.

The following code sample illustrates how setting the current device affects memory allocation and kernel execution.

3.2.6.3. Stream and Event Behavior

A kernel launch will fail if it is issued to a stream that is not associated to the current device as illustrated in the following code sample.

A memory copy will succeed even if it is issued to a stream that is not associated to the current device.

cudaEventRecord() will fail if the input event and input stream are associated to different devices.

cudaEventElapsedTime() will fail if the two input events are associated to different devices.

cudaEventSynchronize() and cudaEventQuery() will succeed even if the input event is associated to a device that is different from the current device.

cudaStreamWaitEvent() will succeed even if the input stream and input event are associated to different devices. cudaStreamWaitEvent() can therefore be used to synchronize multiple devices with each other.

Each device has its own default stream (see Default Stream), so commands issued to the default stream of a device may execute out of order or concurrently with respect to【相对】 commands issued to the default stream of any other device.

3.2.6.4. Peer-to-Peer Memory Access

When the application is run as a 64-bit process, devices of compute capability 2.0 and higher from the Tesla series may address each other's memory (i.e., a kernel executing on one device can dereference a pointer to the memory of the other device). This peer-to-peer memory access feature is supported between two devices if cudaDeviceCanAccessPeer() returns true for these two devices.

Peer-to-peer memory access must be enabled between two devices by calling cudaDeviceEnablePeerAccess() as illustrated in the following code sample. Each device can support a system-wide maximum of eight peer connections.

A unified address space is used for both devices (see Unified Virtual Address Space), so the same pointer can be used to address memory from both devices as shown in the code sample below.

3.2.6.5. Peer-to-Peer Memory Copy

Memory copies can be performed between the memories of two different devices.

When a unified address space is used for both devices (see Unified Virtual Address Space), this is done using the regular memory copy functions mentioned in Device Memory.

Otherwise, this is done using cudaMemcpyPeer(), cudaMemcpyPeerAsync(), cudaMemcpy3DPeer(), or cudaMemcpy3DPeerAsync() as illustrated in the following code sample.

A copy (in the implicit NULL stream) between the memories of two different devices:

· does not start until all commands previously issued to either device have completed and

· runs to completion before any commands (see Asynchronous Concurrent Execution) issued after the copy to either device can start.

Consistent with the normal behavior of streams, an asynchronous copy between the memories of two devices may overlap with copies or kernels in another stream.

Note that if peer-to-peer access is enabled between two devices via cudaDeviceEnablePeerAccess() as described in Peer-to-Peer Memory Access, peer-to-peer memory copy between these two devices no longer needs to be staged through the host and is therefore faster.

本文备注/经验分享:

streams and events are created in association with the currently set device. If no call to cudaSetDevice() is made, the current device is device 0

一旦你设定了设备后,例如cudaSetDevice(3)选择了3号卡,则以后你进行显存分配(cudaMalloc),或者流创建,或者kernel启动,都将在这个设定的卡上启动,都将在这个设定的卡上进行。换句话说,如果你有4张卡, 你需要在这4张卡上分配分配1GB显存,你需要分配在CudaSetDevice了0,1,2,3后,再进行cudaMalloc。也换句话说,还是你有4张卡,你需要分别在cudaSetDevice了0,1,2,3后,再分别进行4次单独的启动,才能在这4张卡上运行你的kernel。而不是直接启动一次,就在这4张卡上全部使用了。换句话说,多卡编程是手动的,而不是自动的。 如果你不设置的话,就是默认在device0的设备, 那样的话剩下的卡就浪费了。以及,需要说明是,cuda 9进入了协作组,允许一个很特别的API能同时在多个卡上启动kernel,但有很多限制条件,以及,限制使用C++,这个以后再说。以及,还需要说明的是,很多库(例如自带的cublas)可以自动利用多卡。但这个也以后再说。你需要知道cublas这样的能自动多卡的,内部也是这样手工使用了多张卡,只是对用户屏蔽了这点,看上去是自动的。

A kernel launch will fail if it is issued to a stream that is not associated to the current device 流和当前的卡必须对应,试图直接使用另外一张卡(通过cudaSetDevice到卡2例如),和前一张卡上的流(例如卡1上的流),是无法在这样的组合下启动kernel的。也就是说,你不能试图在卡2上启动一个kernel,却使用另外不是本卡的流。(流和Kernel是啥关系? kernel必须在一个流中才能启动的,流中的所有操作都是顺序进行的,流在OpenCL中的对等概念叫CommandQueue)

Each device has its own default stream (see Default Stream), so commands issued to the default stream of a device may execute out of order or concurrently with respect to commands issued to the default stream of any other device.

多卡的环境下,因为每张卡都有自己的默认流,所以发布给不同的卡的默认流中的命令,它们之间的执行关系是乱序的。 这段话其实是句废话。这不显然么。 因为乱序执行已经足够说明了。 可能kernel 1在kernel 2前面,也可能kernel 2在kernel 1前面,也可能他俩同时开始,同时完成。都有可能的。

Peer-to-peer memory access must be enabled between two devices by calling cudaDeviceEnablePeerAccess() as illustrated in the following code sample. Each device can support a system-wide maximum of eight peer connections.。P2P内存访问必须在两个设备间,通过出cudaDeviceEnablePeerAccess()来启用, 在一个系统内,每张卡最多能和8张其他的卡建立起来P2P访存。

Peer-to-Peer Memory Access和Peer-to-Peer Memory Copy是啥区别? 前者是卡B,能直接像自己的显存那样的,使用卡A的显存,后者各个是P2P复制,必须卡B将卡A的显存中的内容复制到自己的显存,然后卡B(上的kernel)才能用。前者能直接用。后者需要复制过来。 能用前者建议总是用前者,除非:

(1)主板不支持(例如你将两张卡分别插在2路CPU各自管辖的PCI-E下面) (2)系统不支持(例如Windows平台下面试图使用,却是家用卡,不支持TCC) (3)神马都支持,完全可以直接使用前者。但你考虑到这段缓冲区会被反复使用,总是跨PCI-E访问另外一张卡的显存效率低,则可以手工复制过来,然后使用本卡的副本。

注意Windows下的P2P Copy是完全开放的,P2P Access却需要专业卡+TCC,P2P Copy在不能直接复制的时候,会自动通过内存中转(例如之前的情况1),而P2P Access会直接失败。P2P Access有个好处,就是一张卡能用2张卡的显存,甚至3张,4张,8张,对跑一些适合需要显存容量的应用很方便。以及,P2P Access有个超级强化版。就是DGX上的那个。卡间的P2P Access不仅仅可以通过PCI-E,还能通过NVLink提供超级高的带宽,这样DGX上的所有卡的显存几乎都可以聚合起来。适合那种跑超级大显存的应用。普通版本的P2P Access,在主板,系统,卡都支持的时候,虽然慢点(不如DGX),但依然解决了显存不够的问题。而P2P Copy,因为是将一张卡的显存复制到自己显存里,不能扩大等效显存容量的。所以没用。

有不明白的地方,请在本文后留言

或者在我们的技术论坛bbs.gpuworld.cn上发帖

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文透析腾讯云云上攻防体系
近年来,网络安全问题变得愈发严峻,企业被黑客攻陷事件层出不穷,企业攻防犹如一道隔绝外界侵扰的屏障,一旦屏障被攻破,信息数据安全便失去保障。随着云计算浪潮到来,越来越多企业开始在云上探索新航线,期望解决应用数据量庞杂、服务器运维成本高、主机运行不稳定、配套资源待完善等问题,而云计算应用的热潮,也让云上安全成为新的命题。
腾讯安全
2020/01/21
1.3K0
一文透析腾讯云云上攻防体系
产业安全专家谈 | 面对恶意攻击,主机安全如何构建云端防御屏障?
随着云计算的普及,云主机因强劲的性能、较低的成本成为大量传统企业上云和新兴业务快速扩张过程中的主流选择。
腾讯安全
2020/01/10
1.2K0
产业安全专家谈 | 面对恶意攻击,主机安全如何构建云端防御屏障?
腾讯云鼎实验室Killer:面对“想哭”勒索软件,你不知道的几件事儿
云资讯小编
2017/05/14
2.5K0
腾讯云鼎实验室Killer:面对“想哭”勒索软件,你不知道的几件事儿
暗云来袭!腾讯安全联合实验室力挫 DDoS 攻击
本文转自安全牛报道 自5月26日19点开始,一场大面积的 DDoS 网络攻击活动席卷全国。有被攻击者反映,单个 IP 遭受黑客组织攻击的流量规模高达 650G。监测发现,本次活动参与攻击的源地址覆盖度
腾讯云安全
2018/06/12
1.7K0
Petya 来袭,腾讯云快速响应提供安全解决方案
本文介绍了Petya勒索病毒对全球用户造成的危害和影响,并提供了腾讯云安全团队针对此病毒的防范措施和解决方案。
腾讯云安全
2017/06/29
4.9K0
搭载 AI 引擎 腾讯云云镜开启全面防护模式
 导语:曾在 Petya 勒索病毒 、暗云Ⅲ病毒等大型安全事件中发挥重要作用的腾讯云云镜主机防护系统,近日大幅升级了安全能力,升级后的检测引擎对黑客入侵行为的检出率高达92%,高出传统解决方案20个百分点,并且随着机器学习的深入,其识别率和准确性还将进一步提高,可以帮助用户建立更加牢固的安全防线。 1 AI+大数据双轮驱动 云镜检出率居行业首位 随着各大企业纷纷将其业务部署到互联网上,作为企业最宝贵资产的云服务器需要时刻警惕漏洞隐患、木马威胁、WebShell、密码破解等安全威胁。为守护云服务器安全,腾讯
腾讯云安全
2018/08/14
8.3K7
主机安全防护:腾讯云云镜产品
腾讯云云镜是基于AI算法的轻量化主机安全软件,帮助用户解决木马感染(勒索,被篡改),被入侵(挖矿,数据窃取),漏洞,登陆密码爆破等主机安全问题。了解云镜: https://cloud.tencent.com/product/hs
腾讯云基础安全
2018/09/09
6.8K0
主机安全防护:腾讯云云镜产品
腾讯安全应对勒索病毒,有解!
据外媒报道,名为DarkSide的勒索软件攻击了美国主要的燃料管道商佐治亚州殖民地管道公司(Colonial Pipeline),该公司的燃油管道系统已被迫关闭,该事件成为近年来勒索病毒团伙引发的一起最严重的威胁到社会公共服务的安全事件。腾讯安全专家指出,勒索病毒团伙攻击日趋针对高价值目标,勒索黑客在瘫痪目标网络前,通常已提前控制该网络核心系统,并窃取受害企业重要信息资料。
腾讯安全企业服务
2021/05/12
2.1K0
腾讯安全应对勒索病毒,有解!
敲黑板 | 如何更好地保护云上资产?
“云”越来越不陌生,云上庞大的资产也成为不法分子觊觎的对象,他们喜欢窥探各处的信息,并使用工具,批量扫描、利用漏洞入侵机器,达到控制机器的效果;他们利用一个漏洞就能完成一系列操作,在你的设备上留下后门,进行挖矿、DDoS 等行为。 2016-2017年 Petya、WannaCry 勒索病毒相继出现,国内外多家大型企业被攻击,政府、银行、电力系统、通讯系统不同程度被影响; 2016年10月,美国东部大规模网络瘫痪,大量知名平台受到 DDoS 攻击。 2017年10月 某汽车厂商的公有云基础设施被爆曾遭黑客
腾讯云安全
2019/05/16
1K0
敲黑板 | 如何更好地保护云上资产?
勒索病毒预防指南
勒索病毒已成为网络安全最大威胁之一。从大洋彼岸的美国油管瘫痪,肉类加工告急,州轮渡停摆,再到邻近的日本富士胶片集团关闭部分服务,近期频发勒索事件,更是凸显了该威胁的严重性,也再次为组织单位敲响警钟。
云上计算
2021/08/30
2.1K0
勒索病毒预防指南
腾讯安全面向广大企业免费开放远程办公安全保障服务
在这个特殊的新年,为了最大限度减少人员流动聚集,很多企业选择“云开工”模式,但远程办公虽然保障了“人身安全”,却存在一定的“信息安全”风险,涉及员工异地访问的身份识别、多地分散的终端安全防护、越权操作等问题,事关企业的核心数据资产安全。
腾讯安全
2020/02/06
2.3K0
腾讯安全面向广大企业免费开放远程办公安全保障服务
行业首批︱腾讯云云镜荣获云计算产品信息安全和 CSA CSTR 双证书
腾讯云云镜通过公安部第三研究所检测中心联合云安全联盟的严格评测,成为首批通过该认证的极少数产品之一。
腾讯云安全
2018/07/02
14.1K0
病毒凶猛,企业的云安全谁来守护?丨科技云 · 视角
肆虐全球的病毒攻击,频繁开启的高危事件预警,让云服务的安全问题面临着空前的挑战。安全警钟敲响之时,呼之欲出的是企业对云安全的顾虑。
科技云报道
2022/04/14
3750
病毒凶猛,企业的云安全谁来守护?丨科技云 · 视角
坐等被勒索?不如早点做好安全防御准备丨科技云·视角
曾经席卷全球的WannaCry病毒,并不是一个被人遗忘的老故事,针对勒索病毒的攻防战还在持续进行中。
科技云报道
2022/04/14
3370
坐等被勒索?不如早点做好安全防御准备丨科技云·视角
云上挖矿大数据:黑客最钟爱门罗币
本文作者:zhenyiguo、jaryzhou、youzuzhang 2018年,区块链项目在这一年上演着冰与火之歌,年初火爆的比特币在一年时间内跌去八成。除了巨大的市场波动之外,区块链领域本身的安全问题也逐渐凸显,与之相关的社会化问题不断显现。 “勒索”、“盗窃”、“非法挖矿”是区块链项目数字加密货币的三大安全威胁,其中云主机用户面临的首要安全问题是非法挖矿。 非法挖矿一般分为基于文件的挖矿和基于浏览器的挖矿。由于云主机用户一般不使用浏览器访问网页,故基于浏览器的挖矿在公有云上并非较大的威胁。 反之,云
云鼎实验室
2019/01/17
3.4K0
云上挖矿大数据:黑客最钟爱门罗币
盘点近几年勒索病毒使用过的工具和漏洞
早前,我们从赎金角度探讨了下勒索病毒的发展演变,详细参考从赎金角度看勒索病毒演变。加密数字货币和Tor网络对勒索病毒的基础性支撑不再赘述,今天,我们回归技术,从另外一个角度,看勒索病毒为何会如此猖獗。为了很好的回答这个问题,我们同样不急于切入主题。首先,深信服安全团队基于大量真实的客户案例及大量的威胁情报信息,来盘点近几年勒索病毒使用过的工具和漏洞。
FB客服
2019/11/29
3.2K0
暗云Ⅲ木马病毒肆虐,云服务商的下一站是云安全?丨科技云·视角
突如其来的“WannaCry”勒索病毒和“暗云Ⅲ”木马程序肆虐全球,令云服务提供商向“安全厂商”转变成为一种必然趋势。
科技云报道
2022/04/14
7770
暗云Ⅲ木马病毒肆虐,云服务商的下一站是云安全?丨科技云·视角
day11 | 网络安全应急响应典型案例(挖矿类)
近几年,除勒索病毒外,挖矿木马也越来越流行,多为利用漏洞利用、“永恒之蓝下载器”、弱口令暴破等手段完成攻击,由于其具有较强的隐蔽性,会利用一些手段避开受害者活动时间,利用受害者空闲时间进行挖矿,长此以往,服务器、主机显卡或CPU长期占用过高,导致电脑性能降低,同时攻击者会利用已控制的挖矿主机攻击其他设备,导致业务中断甚至更严重的网络安全事件的发生。
亿人安全
2023/09/25
1.9K0
day11 | 网络安全应急响应典型案例(挖矿类)
WannaCry爆发六年,勒索病毒为何“不降反升”成为头号威胁?
今年四月,肯德基、必胜客的母公司因为遭遇勒索病毒,被迫关闭了300多家快餐厅。而在不久前,国内某知名车企也遭遇黑客攻击,被勒索数百万美元等额比特币,并引发舆论关注。
腾讯安全
2023/05/15
3780
WannaCry爆发六年,勒索病毒为何“不降反升”成为头号威胁?
又一家企业被“勒索”遭殃,企业数据安全路在何方
2018年7月8日18:02,安恒信息应急响应中心接到某企业电话求救——公司自动化企业资源管理ERP系统被恶意加密,并提示支付比特币才能解密。该ERP系统中的数据包含公司运营数年的人力、财务、物料、合同等重要数据,一旦损失将导致企业运营受到重创。安恒信息应急响应中心第一时间安排应急专家赶往现场开展紧急数据救援行动……
安恒信息
2018/07/24
8800
又一家企业被“勒索”遭殃,企业数据安全路在何方
推荐阅读
相关推荐
一文透析腾讯云云上攻防体系
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档