登录注册   忘记密码

处理器|GPU/GPGPU在国防应用中的11项问题,你关心的,你想知道的都在这里

    本文对GPU/GPGPU在国防应用中涉及到的11项具体问题进行阐述。

    1. GPU仅用于渲染视频和处理图像?

    顾名思义,图像处理单元(GPU)最初是为处理和渲染图像和视频而设计的。无论是以单个设备形式或者嵌入在单个芯片中央处理器(CPU)内核旁。这些GPU都驻留在每个笔记本电脑、桌面和游戏机上,也发挥在国防应用中的主要功能,以显示和压缩捕获的视频。


    大约15年前,工程师发现,GPU可基于在GPU中引入浮点支持的可编程着色器来制造出伟大的数学加速引擎。他们意识到,这可用于那些移动如图像的运动数据应用情况,且所需的处理非常适合于向量和矩阵数学运算。


    随后,通用图像处理单元(GPGPU)一词诞生了,CUDA和OpenCL等语言被开发出来,用于抽象出GPGPU底层架构的复杂性。因此,开发者可专注于线性代数算法和数字信号处理功能。


    2. GPGPU比CPU更难编程?

    对于需要数百个GFLOPS或甚至TFLOPS处理能力的大型算法,CPU编程人员通常必须在许多硅器件集群中聚合许多多核处理器。在嵌入式系统中,这通常意味着必须开发复杂的软件基础设施,以协调处理器之间数据的直接存储器访问(DMA)传输,包括异步数据切换信令和传输完成方法。


    在大型多级DSP算法中,这可能需要各级之间的分散收集技术,相当复杂。 然而,一些较大的GPGPU可以拥有2到3 TFLOPS的基准,其中,整个算法能够驻留在单片硅片中。处理级之间的转移非常简单,因为数据总是在单个硅片上驻留和连贯。甚至GPGPU内部的传输也通过抽象的功能(如NVIDIA的GPUDirect)进行简化。最后,GPGPU编程语言(如CUDA和OpenCL)在可用性和普及程度方面不断提高。


    3. GPGPU难被考虑,因为他们供应不稳定?

    尽管GPGPU的性能无与伦比,通常以每瓦特FLOPS计算,但由于后勤原因,过去许多国防项目已经弃用GPGPU。最主要的担忧是供应的长期性。考虑到商用GPU通常只有18个月到两年的寿命周期,这种情况可以理解。然而,NVIDIA和AMD都增强了其嵌入式机构职能,提供的可用性设备数据显示,其产品正在接近国防工业7年以上的理想寿命周期。


    4. GPGPU应用在用尽计算的TFLOPS之前,通常会耗尽内存容量或I/O带宽?

    诸如Tesla M6 MXM模块上的NVIDIA Maxwell GM204之类的GPGPU可以实现两到三个TFLOPS。一些算法,例如用五十万点快速傅里叶变换(FFT)的快速卷积,能够利用这种计算能力。然而,问题通常在于数据无法快速到达所有GPGPU内核。也许GPGPU中没有足够的外部GDDR5内存缓冲摄取的传感器数据,或者PCI Express进入和/或退出GPGPU的带宽也不足。例外总是存在,但是一般来说,传感器处理应用程序通常会发现内存绑定或I/O绑定,而不是计算限制。


    5. 在国防应用的运行环境中,大型GPGPU冷却是一个难以克服的问题?

    幸运的是,与CPU和FPGA一样,GPGPU可以缩放热设计功率(TDP)数字来匹配不同的尺寸。据说,某些国防应用需要采用VITA 46 VPX外形最大可能的GPGPU尺寸。


    对传统板级冷却技术进行了重大改进,例如VITA 48.2传导冷却设计指南。例如,最近的一个COTS产品在传导冷却的6U VPX载体上放置了两个NVIDIA Tesla M6 MXM,每个75瓦特。这可能代表传导冷却的上限。但是除了结合具有更高TDP数量的GPGPU之外,诸如VITA 48.5空气流通和液体冷却技术之类的冷却技术将允许VPX中更高的散热上限。


    6. GPGPU严格受限于流处理?

    鉴于GPGPUs最初是为图像而设计,它们被降级至数据流应用中。换句话说,没有办法拥有共享或静态数据,每个GPGPU核只能“进入数据流”:从入口读取数据,实时执行一些功能,并写入出口。


    目前,GPGPU正在构建多级缓存和分支功能。然而,清晰的GPGPU性能强度仍然在于处理高度并行的大量数据集,并且在数据元素之间具有最小的依赖关系。因此,分支应保持在内环之外。


    7. GPU不能处理递归、不规则循环结构或决策分支?

    通过动态并行性,GPU内核启动其他内核,有选择性地完成内核同步,执行设备内存管理,以及创建和使用数据流和事件。启动内核是“父核”,它启动的新网格是“子核”。子内核可以自己启动工作,创建一个“嵌套”执行层次结构。所有子核启动必须在父核完成之前完成。这种先进性实现了分层算法的写入,其中,来自上一代的数据用于计算下一个较低级别的工作分区。


    GPU具有标准分支指令,例如“if”,“if-else”和“for”。一个warp是一组32个线程,warp必须一次执行一条指令。因此,当给定warp中的所有线程采用相同的执行路径时,才能实现最佳效率。


    8. GPU内核只能从CPU启动?

最初,CPU执行了一系列内核启动,每个内核需要足够的并行性以有效地抵消调用和内存传递开销。现在,需要从父CUDA内核中调用子内核。父核可以使用从子核生成的输出,并有选择性地与它同步,所有这些都不需要CPU参与。这很容易采用,因为GPU内核启动使用与CPU相同的语法。


    CPU受控程序受到单一控制点的限制,该控制点只能在给定时间运行有限数量的线程。通过控制GPU上的内核来消耗CPU。通过将顶层循环传输到CPU,可以运行数千个独立任务,从而释放CPU以进行其他工作。


    9. 内存必须由CPU创建,然后传递给GPU以移动数据并接收结果?

    统一虚拟内存(UVM)为CPU和GPU内存提供单一地址空间,从而消除了系统内存和复制开销。这个统一的内存空间也可以由多GPGPU共享。通过允许用户从单个指针变量确定物理内存位置,库可以简化其接口。在UVM之前,每种类型的内存副本都需要单独的命令;CPU到GPU,CPU到GPU等等。现在一个函数调用可以处理所有情况,用户被释放以指定源和目标存储空间。使用UVM实现真正的零拷贝内存。


    10. GPU需要一个CPU来处理数据,并在GPU之间传递数据?

    使用GPUDirect、多个GPU、第三方网络适配器、固态驱动器(SSD)和其他设备可以直接在GPU之间读取和写入。GPUDirect对等体可在同一PCIe或NVLink总线上的两个GPU的存储器之间实现高速DMA传输。GPU内核可将数据缓存在目标GPU中,直接访问(加载/存储)到其他GPU的内存中。


    GPUDirect RDMA是InfiniBand CORE和GPU之间的应用程序编程接口(API)。它可以访问Mellanox主机通道适配器(HCA)来读取/写入GPU的内存缓冲区,从而使GPU能够直接从RDMA互连中获取数据,而无需首先将数据复制到CPU内存。


    仅使用GPUDirect RDMA,CPU仍然驱动计算和通信。但通过添加GPUDirect Aysnc,可以将CPU从关键路径中删除。CPU准备并排列GPU上的计算和通信任务。然后GPU发信号通知HCA,HCA直接访问GPU的内存。


    11. 在GPU中使用MPI速度很慢?

    使用常规MPI,只能使用指向主机内存的指针。当组合MPI和CUDA时,需要发送GPU缓冲区,这需要在CPU内存中分配GPU缓冲区。使用CUDA感知的MPI库,GPU缓冲区可以直接传递到MPI,从而使消息传输可以流水作业,加速技术(如GPUDirect)对用户来说是透明的。


    CUDA的多进程服务(MPS)是允许多个CUDA进程共享单个GPU上下文的功能。每个进程接收到该GPU可用连接的一些子集。 MPS允许GPU上不同进程的内核和内存操作重叠,以实现传统MPI应用程序的最大利用。无需修改应用程序——只需启动MPS守护程序。通过将GPU设置为独占模式,MPS可以在多GPU系统中运行。


您的评论:

0

用户评价

  • 暂无评论