algorithm - 设计核心/外部存储器算法的标准方法是什么(如果有的话)?

标签 algorithm cuda gpgpu scientific-computing hpc

<分区>

我正在寻找设计算法的经验法则,在这些算法中,由于磁盘速度、pci 速度 (gpgpu) 或其他瓶颈的限制,数据访问缓慢。

此外,当应用程序的内存超过 gpgpu 内存时,如何管理 gpgpu 程序?

最佳答案

一般来说,GPU显存不应该是算法数据大小的任意限制。 GPU 内存可以被认为是 GPU 当前正在运行的数据的“缓存”,但许多 GPU 算法旨在运行比“缓存”所能容纳的更多数据。这是通过在计算进行时将数据移入和移出 GPU 来实现的,并且 GPU 具有特定的 concurrent execution and copy/compute overlap mechanisms。启用此功能。

这通常意味着可以在数据部分完成独立工作,这通常是可并行应用程序加速的良好指标。从概念上讲,这类似于大规模 MPI 应用程序(例如高性能 linpack),它们将工作分成几部分,然后将这些部分发送到不同的机器(MPI 等级)进行计算。

如果与传输数据的成本相比,数据上要完成的工作量很小,那么数据传输速度仍将成为瓶颈,除非通过更改存储系统直接解决这个问题。

处理核外或数据集太大而无法一次性放入 GPU 内存的算法的基本方法是确定可以处理可分离数据的算法版本,然后制作一个“流水线”算法以 block 的形式处理数据。涵盖此类编程技术的示例教程是 here (焦点从 40 分钟左右开始,但整个视频都是相关的)。

关于algorithm - 设计核心/外部存储器算法的标准方法是什么(如果有的话)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16552805/

相关文章:

cuda - Cuda C 中的加法赋值运算符

python - Numpy:如何找到矩阵 A 中子矩阵的唯一局部最小值?

algorithm - 了解为涉及采金 jar 的游戏寻找最佳策略的解决方案

c++ - undefined reference CUDA 和 CMAKE

cuda - cuda中的预取(通过C代码)

OpenCL AMD 与 NVIDIA 性能对比

ruby - 解析大型标准输入 ruby

c++ - 范围内的最低值

pointers - 复制包含指向 CUDA 设备的指针的结构

arrays - OpenGL折叠/减少实现?