GPU 上的可扩展性分析

问题描述 投票:0回答:2

我正在尝试使用我的 Quadro FX 5800 进行可扩展性分析,它有 240 个核心,其运行时间尺度与核心数量是并行计算的经典研究。 我想知道核心的定义如何适合它? 我如何使用它在不同的核心设置(8,16,32,64,128,240 个核心)上运行? 我的测试用例是简单的矩阵乘法。

parallel-processing cuda gpu scalability
2个回答
4
投票

GPU 的可扩展性不应以 CUDA 核心数来衡量,而应以 SM 利用率来衡量。 IPC 可能是衡量 SM 利用率的最佳单一指标。在开发算法时,您希望对工作进行分区,以便可以将足够的工作分配给所有 SM,以便在每个周期,warp 调度程序至少有一个有资格发出和指令的 warp。一般来说,这意味着每个 SM 上必须有足够的扭曲来隐藏指令和内存延迟,并提供各种指令类型来填充执行管道。

如果您想测试跨 CUDA 核心的扩展(无意义),那么您可以启动每个块包含 1、2、3、...32 个线程的线程块。每个线程块启动非多个 WARP_SIZE (=32) 个线程将导致仅使用核心的子集。这些基本上都是浪费的执行槽。

如果您想测试 SM 方面的扩展,您可以将算法从 1 个线程块扩展到 1000 个线程块。为了理解扩展,您可以在启动时通过配置每个线程块的共享内存来人为地限制每个 SM 的线程块。

重写矩阵乘法以在每个方向上实现最佳缩放可能会令人沮丧。在您进行该项目之前,我建议您了解如何分布简单的并行计算,例如从 0-100000 求和或跨多个线程块计算阶乘比例。这些算法只有几行代码,可以通过改变启动配置(GridDim、BlockDim、SharedMemoryPerBlock)和内核 1-2 参数来尝试上述缩放您可以使用 CUDA 分析器、Visual Profiler、Parallel Nsight 来计时不同的启动,或 CUevents。


1
投票

假设您使用 CUDA 或 OpenCL 作为编程模型:将利用率限制为

M
多处理器 (SM) 数量的一种简单方法是使用
M
块(线程)的执行配置来启动内核。如果每个 SM 由 N 个核心组成,这样您就可以测试跨 N、2N、4N、... 核心的可扩展性。

例如,如果GPU有4个SM,每个SM有32个核心。通过运行 1、2 和 4 块的内核,您的内核将利用 GPU 的 32、64 和 128 个核心。

© www.soinside.com 2019 - 2024. All rights reserved.