3

我最近开始使用带有 GT430 的 Mathematica 的 CUDALink,并且正在使用 CUDADot 将 150000x1038 矩阵(encs)乘以 1038x1 矩阵(探针)。encs 和 probe 都向内存管理器注册:

mmEncs = CUDAMemoryLoad[encs];
mmProbe = CUDAMemoryLoad[probe];

我认为这些的点积会最大化 GT430,所以我用以下方法进行了测试:

For[i = 0, i < 10, i++,
 CUDADot[mmEncs, mmProbe];
]

在它运行时,我使用 MSI 的“Afterburner”实用程序来监控 GPU 的使用情况。以下屏幕截图显示了结果:

在此处输入图像描述

每个 CUDADot 操作都有一个明显的峰值,总的来说,我想说这张照片表明我使用的 GPU 容量不到 1/4。两个问题:

Q1:为什么峰值会达到 50%?好像很低。

问题 2:为什么高峰之间会有如此显着的不活动期?

提前感谢您的任何提示!我不知道第一季度,但也许第二季度是因为主机和设备之间的意外内存传输?

自原始发布以来的附加信息:CUDAInformation[] 报告“核心数 - > 64”,但 NVIDIA 控制面板报告“CUDA 核心数:96”。如果 CUDALink 错误地假设它有 64 个内核,那么它​​有没有机会利用 GT430?

4

1 回答 1

1

我将通过指出我不知道“MSI Afterburner”真正测量的是什么,或者它以什么频率对它测量的数量进行采样,我不相信你也会这样做。这意味着我们不知道屏幕截图中 x 轴或 y 轴的单位是什么。这使得几乎不可能对性能进行任何量化。

1.为什么峰值最大为 50%?好像很低。

如果你不知道它真正测量的是什么,我不相信你可以说它“看起来很低”。例如,如果它测量指令吞吐量,则可能是 Mathematica 点内核在您的设备上存在内存带宽限制。这意味着代码的吞吐量瓶颈将是内存带宽,而不是 SM 指令吞吐量。如果要绘制内存吞吐量,您会看到 100%。我希望 gemv 操作受内存带宽限制,所以这个结果可能不会太令人惊讶。

2.为什么高峰之间会有如此显着的不活动期?

CUDA API 具有设备和主机端延迟。在 WDDM 平台上(因此 Windows Vit、7、8 以及从它们派生的任何服务器版本),此主机端延迟相当高,并且 CUDA 驱动程序执行批处理操作以帮助分摊该延迟。这种批处理可能导致 GPU 操作中的“间隙”或“暂停”。我想这就是你在这里看到的。NVIDIA 在 Windows 平台上有一个用于 Telsa 卡的专用计算驱动程序 (TCC),以克服这些限制。

评估此操作性能的更好方法是自己计时循环,计算每次调用的平均时间,计算操作计数(点积有一个已知的下限,您可以从矩阵的维度和向量),并计算 FLOP/s 值。您可以将其与 GPU 的规格进行比较,以了解它的性能好坏。

于 2013-02-04T08:05:46.327 回答