计算实现的带宽和flops/Gflops,并评估CUDA内核性能

计算实现的带宽和flops/Gflops,并评估CUDA内核性能,cuda,gpu,gpgpu,Cuda,Gpu,Gpgpu,大多数论文显示了flops/GFLOP,并为其CUDA内核实现了带宽。我还阅读了有关stackoverflow的以下问题的答案: 大多数事情看起来都不错,但仍然不能让我在计算这些事情时感到舒服。谁能编写一个简单的CUDA内核?然后给出deviceQuery的输出。然后逐步计算flops/Gflops,并获得该内核的带宽。然后显示此内核的可视化探查器结果。也就是说,在这个简单的CUDA内核中,用逐步获得的所有信息详细显示结果。这对我们大多数人都很有帮助。谢谢 Nsight Visual

大多数论文显示了flops/GFLOP,并为其CUDA内核实现了带宽。我还阅读了有关stackoverflow的以下问题的答案:


大多数事情看起来都不错,但仍然不能让我在计算这些事情时感到舒服。谁能编写一个简单的CUDA内核?然后给出deviceQuery的输出。然后逐步计算flops/Gflops,并获得该内核的带宽。然后显示此内核的可视化探查器结果。也就是说,在这个简单的CUDA内核中,用逐步获得的所有信息详细显示结果。这对我们大多数人都很有帮助。谢谢

Nsight Visual Studio 2.1版及以上版本

如果您收集已实现的触发器实验和内存统计数据-缓冲区实验,则您请求的信息可用

Visual Profiler 4.2及以上版本

获得的带宽:当鼠标悬停在时间轴中的内核上时,此信息可在属性窗格中的内存\DRAM利用率下获得


探查器还无法收集触发器计数。这可以通过运行cuobjdump-sass来查看汇编代码来完成。逐步遍历内核,将FMA和DFMA操作乘以2计算单精度和双精度浮点指令数。每条指令还应乘以谓词的真线程。您还必须考虑控制流。这并不有趣,需要有对指令集有很强了解的人。这可以通过在调试器中单步执行程序集来更好地实现。内核的持续时间在VisualProfiler属性窗格和详细信息窗格中显示为持续时间

Nsight Visual Studio 2.1版及以上版本

如果您收集已实现的触发器实验和内存统计数据-缓冲区实验,则您请求的信息可用

Visual Profiler 4.2及以上版本

获得的带宽:当鼠标悬停在时间轴中的内核上时,此信息可在属性窗格中的内存\DRAM利用率下获得


探查器还无法收集触发器计数。这可以通过运行cuobjdump-sass来查看汇编代码来完成。逐步遍历内核,将FMA和DFMA操作乘以2计算单精度和双精度浮点指令数。每条指令还应乘以谓词的真线程。您还必须考虑控制流。这并不有趣,需要有对指令集有很强了解的人。这可以通过在调试器中单步执行程序集来更好地实现。内核的持续时间在VisualProfiler属性窗格和详细信息窗格中显示为持续时间

你可以按照马克·哈里斯的计算。在那里,他使用输入数据作为基础,并在内核执行期间对其进行划分。在示例中,他使用了2^22个整数,因此他有0016777216 GB的输入数据。第一个内核花费了8054毫秒,达到了2083 GB/s的带宽

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


虽然他使用了ints,但你可以很容易地将其应用于flops/Gflops

你可以按照马克·哈里斯的计算。在那里,他使用输入数据作为基础,并在内核执行期间对其进行划分。在示例中,他使用了2^22个整数,因此他有0016777216 GB的输入数据。第一个内核花费了8054毫秒,达到了2083 GB/s的带宽

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

虽然他使用了ints,但你可以很容易地将其应用于flops/Gflops