gpt4 book ai didi

debugging - 检测 OpenMP 线程/CUDA 流之间的竞争条件

转载 作者:行者123 更新时间:2023-12-04 07:49:02 24 4
gpt4 key购买 nike

我从与 OpenMP 并行化的应用程序中得到错误的数值结果。每个 OpenMP 线程在 NVIDIA GPU 上运行一个或多个流。我怀疑 OpenMP 线程或 CUDA 流之间存在竞争条件,而 更新 内存。
我们如何找出访问相同主内存地址范围的一组 OpenMP 线程/CUDA 流?有工具吗?

最佳答案

在 CPU 上,您可以使用 线程 sanitizer 编译器。 GCC 和 Clang 通过选项 -fsanitize=thread 支持这一点.例如,您可以在 LLVM documentation 中找到更多信息。 .请注意,这些工具非常新,因此可能有点实验性。或者,Helgrind Valgrind 可以帮助您找到经常导致竞争条件的同步问题。如果你对 LLVM 有很强的依赖,你可以试试 Archer .还有一些非免费工具(包括 Intel Inspector 或 Coderrect)主要基于过去十年对该主题的积极公开研究(例如,参见 here)。
在具有 CUDA 功能的 GPU 上,我所知道的唯一简单/即用型工具是 CUDA-MemCheck这类似于 Valgrind 在 CPU 上提供的内容。可与CUDA-GDB结合使用非常容易地找到小型 CUDA 代码中的错误。
最后,当您面临可重现性问题(例如竞争条件)时,确定性反向调试器确实可以发挥作用。 RR是一个很好的开源工具。我不太确定它是否支持运行 CUDA 内核的应用程序,但它当然值得一试。请注意,RR 倾向于顺序运行线程(尽管它们被抢占)影响结果行为。

关于debugging - 检测 OpenMP 线程/CUDA 流之间的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67074712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com