1

大多数论文都展示了 flops/Gflops 并为他们的 CUDA 内核实现了带宽。我还阅读了有关 stackoverflow 的以下问题的答案:

如何评估 CUDA 性能?

您如何分析和优化 CUDA 内核?

如何计算内核的 Gflops

在程序中计算 FLOPS/GFLOPS - CUDA

如何计算 CUDA 内核的实现带宽

大多数事情看起来都不错,但仍然让我在计算这些事情时感到不舒服。任何人都可以编写一个简单的 CUDA 内核吗?然后给出 deviceQuery 的输出。然后逐步计算 flops/Gflops 并为该内核实现带宽。然后显示此内核的 Visual Profiler 结果。即详细显示结果,其中包含为这个简单的 CUDA 内核逐步获得的所有信息。这对我们大多数人来说真的很有帮助。谢谢!

4

2 回答 2

1

Nsight Visual Studio 2.1 及以上版本

如果您收集了已实现的 FLOPS实验和内存统计信息 - 缓冲区实验,则您请求的信息可用。

Visual Profiler 4.2 及更高版本

实现的带宽:当鼠标悬停在时间轴中的内核上时,此信息在属性窗格中的Memory\DRAM Utilization下可用。

分析器还不能收集 FLOPS 计数。这可以通过运行 cuobjdump -sass 查看汇编代码来完成。单步执行内核并计算将 FMA 和 DFMA 运算乘以 2 的单精度和双精度浮点指令。每条指令还应乘以断言的真线程。您还必须考虑控制流。这并不好玩,需要对指令集有深入了解的人。这可以通过在调试器中单步执行程序集来更好地完成。内核的持续时间在 Visual Profiler 属性窗格和详细信息窗格中作为Duration可用。

于 2012-09-22T00:51:08.450 回答
0

您可以按照 Mark Harris在 CUDA 中的 Optimizing Parallel Reductions 中的计算。在那里,他使用输入数据作为基础,并将其划分为内核执行的时间。在示例中,他使用了 2^22 个整数,因此他有 0,016777216 GB 的输入数据。第一个内核花费了 8,054 毫秒,达到了 2,083 GB/s 的带宽。

经过几次优化后,他接近了 62,671 GB/s,并将其与所用 GPU 的峰值性能(86,4 GB/s)进行了比较。

尽管他使用整数,但您可以轻松地将其适应于 flops/Gflops。

于 2013-01-28T10:08:37.397 回答