kob*_*ien 0 algorithm cuda hpc gpgpu scientific-computing
我正在寻找设计算法的经验法则,在这些算法中,由于磁盘速度、pci 速度(gpgpu)或其他瓶颈的限制,数据访问速度很慢。
另外,如何管理应用程序内存超过gpgpu内存的gpgpu程序?
一般来说,GPU 内存不应该是对算法数据大小的任意限制。GPU 内存可以被认为是 GPU 当前正在运行的数据的“缓存”,但许多 GPU 算法被设计为对超过“缓存”所能容纳的更多数据进行操作。这是通过在计算进行时将数据移入和移出 GPU 来实现的,并且 GPU 具有特定的并发执行和复制/计算重叠机制 来实现这一点。
这通常意味着可以对数据的各个部分完成独立的工作,这通常是可并行化应用程序中加速的良好指标。从概念上讲,这类似于大规模 MPI 应用程序(例如高性能 linpack),将工作分解为多个部分,然后将这些部分发送到各种机器(MPI 等级)进行计算。
如果数据上要做的工作量与传输数据的成本相比很小,那么数据传输速度仍然会成为瓶颈,除非直接通过更改存储系统来解决。
处理核外或数据集太大而无法一次性全部放入 GPU 内存的算法的基本方法是确定可以处理可分离数据的算法版本,然后制定“流水线”算法分块处理数据。涵盖此类编程技术的示例教程在这里(焦点从大约 40 分钟开始,但整个视频都是相关的)。