CUDA实践指南(二)

简介:

在支持CUDA的设备上运行什么?
确定应用程序的哪些部分在设备上运行时应考虑以下问题:

  • 该设备非常适合可同时并行运行在多个数据元素上的计算。 这通常涉及大数据集(例如矩阵)的算术,其中可以同时在数千甚至数百万个元素上执行相同的操作。 这是CUDA良好性能的要求:软件必须使用大量(通常为数千或数万)并发线程。 并行运行大量线程的支持来自CUDA使用上述轻量级线程模型。
  • 为了获得最佳性能,设备上运行的相邻线程应该在内存访问方面保持一致。 某些内存访问模式使硬件能够将多个数据项的读取或写入组合成一个操作。 无法合理布局的数据或者没有足够的位置来有效使用L1或纹理缓存的数据在CUDA计算中使用时会看到较小的加速比。
  • 要使用CUDA,必须将数据值从主机传输到PCI Express(PCIe)总线上的设备。 这些传输在性能方面成本很高,应该尽量减少。 (请参阅主机和设备之间的数据传输)此成本有几个影响:

    • 操作的复杂性应该证明将数据移入和移出设备的成本。 传输数据以供少量线程短暂使用的代码将很少或没有性能优势。 理想的情况是许多线程执行大量工作。
      例如,将两个矩阵转移到器件以执行矩阵加法,然后将结果传回主机将不会获得太多的性能好处。这里的问题是每个传输的数据元素执行的操作次数。对于前面的程序,假定大小为N×N的矩阵,有$N^{2}$个操作(加法)和$3N^{2}$个元素被传送,所以操作与传送元素的比率为1:3或O(1)。当这个比例更高时,可以更容易实现性能优势。例如,相同矩阵的矩阵乘法需要$N^{2}$运算(乘加),因此运算元素与传输元素的比值为O(N),在这种情况下,矩阵越大,性能优势越大。操作类型是一个附加因素,因为添加具有不同的复杂度配置文件,例如三角函数。在确定是在主机上还是在设备上执行操作时,包括向设备传输数据和从设备传输数据的开销很重要。
    • 数据应尽可能长时间保存在设备上。 因为传输应该尽可能小,所以在同一数据上运行多个内核的程序应该倾向于在内核调用之间将数据留在设备上,而不是将中间结果传输到主机,然后将它们发送回设备进行后续计算。 因此,在前面的例子中,如果以前的计算结果已经将两个矩阵添加到设备上,或者如果在一些后续计算中将使用相加结果,则矩阵相加应该在本地执行 装置。 即使计算序列中的某个步骤可以在主机上更快地执行,也应该使用此方法。 如果避免一个或多个PCIe传输,即使是相对较慢的内核也可能是有利的。 主机和设备之间的数据传输提供了更多细节,包括主机和设备之间以及设备本身内的带宽的测量。
目录
相关文章
|
存储 Linux
Linux系统LVM信息丢失处理方法
Linux的LVM会存储用户对PV/VG/LV的每一步操作,并自动把当前的VG的信息备份到一个文件里面,该文件为/etc/lvm/backup/VG名,本文描述了当信息丢失时如何找回的处理方法。
10623 60
Linux系统LVM信息丢失处理方法
|
Kubernetes Linux API
[没接触过kubevirt?]15分钟快速入门kubevirt
什么是kubevirt? kubevirt是一个容器方式运行虚拟机的项目。`kubevirt`是附加`kubernetes`集群上的,它是通过 `CustomResourceDefinition(CRD)`部署到`Kubernetes API`变成资源对象。使用方式类似创建`deploy、pod`......这些资源清单。
5470 0
[没接触过kubevirt?]15分钟快速入门kubevirt
|
弹性计算 容器 RDMA
在Kubernetes上使用RDMA
### RDMA RDMA(全称RemoteDirect Memory Access) 它为了解决网络传输中服务器端数据处理的延迟而产生。 它的原理是将待传输的数据从一台计算机的内存,直接传输到另一台计算机的内存,整个传输过程无需操作系统和协议栈的介入。
10453 0
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
|
8月前
|
人工智能 网络性能优化 调度
Koordinator v1.6: 支持AI/ML场景的异构资源调度能力
如何高效管理和调度这些资源成为了行业关注的核心问题。在这一背景下,Koordinator积极响应社区诉求,持续深耕异构设备调度能力,并在最新的v1.6版本中推出了一系列创新功能,帮助客户解决异构资源调度难题。
|
人工智能 自然语言处理 程序员
解密:Prompt、Token、和completions是什么?
解密:Prompt、Token、和completions是什么?
755 0
|
机器学习/深度学习 存储 并行计算
|
开发者 异构计算 容器
NRI - 在容器的生命周期焊接“芯片”
个人调研containerd 1.7版本新特性NRI,欢迎指正
826 1
|
存储 Kubernetes 调度
k8s教程(Volume篇)-StorageClass详解
k8s教程(Volume篇)-StorageClass详解
1693 0
|
人工智能 开发者 Docker
ModelScope使用Quick Start
ModelScope是阿里巴巴打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!本文通过Docker Image的方式演示服务的快速使用。
2870 0
ModelScope使用Quick Start