我正在使用NVRTC编译一个内核。相关的API调用是:
nvrtcResult nvrtcCreateProgram (
nvrtcProgram* prog,
const char* src,
const char* name,
int numHeaders,
const char** headers,
const char** includeNames )如您所见,源是一个原始字符串,不与文件关联。这意味着当您使用--generate-line-info时,可以得到行号,但没有相关的文件名。这意味着,如果您使用,比如说,NSight计算-您将无法看到您的内核源代码。
显然,无论是NSight计算本身,还是NVRTC本身,都无法发现原始源在某个文件中是镜像的。但必须有办法解决这个问题:
也许我在NVRTC中遗漏了一些东西,它可以使源代码<->文件association?
发布于 2020-12-31 11:54:04
看起来,NVRTC确实提供了一个默认的文件名,因此如果您将源代码以该名称放在文件中-- NSight计算可能会找到它。
该名称是作为nvrtcCreateProgram()参数传递给name的名称。
因此,如果您的内核函数(即__global__函数)位于my_kernel.cuh中,并且将该文件放置在概要文件程序的工作目录中(您告诉NSight计算程序),或者放在您构建程序的包含目录中,那么您将能够读取源代码。如果原始文件的目录也是包含目录之一,那么您很幸运,甚至不需要复制。
发布于 2020-12-31 09:48:08
这是我最初的解决办法:
将源代码放置在文件中,例如my_kernel.cuh.
编译此字符串。
现在,NVRTC能够将包含的文件源与文件关联起来,因此它只是一个在源<->文件关联方面将丢失的存根。
注意:您需要小心路径--NVRTC的包含路径、调用程序的工作目录和源文件目录等等。
https://stackoverflow.com/questions/65519200
复制相似问题