在 OpenCL 内核中,如何在内存位置定位导致异常 cl::Error 的源代码行?

In an OpenCL kernel, how to locate the source code line which caused the exception cl::Error at a memory location?

在 windows 10 上的 openCL 1.2 程序中,在我将内核排队几秒钟后,提示显示在 ucrtbase.dll 的内存位置存在未处理的异常。所以我使用“try and catch”来获取有关异常的更多信息。然后我得到这个:

Microsoft C++ exception: cl::Error at memory location 0x00000076482F5A28.

我的内核中的内存 read/write 可能有问题。但是内核程序包含很多行,因此阅读每一行以查找错误行可能有点困难。 在这种情况下,如何定位可能导致此异常的源代码行?

注释掉部分内核,然后 运行。首先,注释内核代码的下半部分。如果错误仍然存​​在,则它位于上半部分(->注释内核的下 3/4),如果不是,则位于下半部分(->注释内核的下 1/4)。重复此二进制搜索,直到找到错误的根源。