从GPU获取OpenCL程序代码

从GPU获取OpenCL程序代码,opencl,Opencl,我有一个使用OpenCL进行数学运算的程序,如何获得OpenCL的源代码,当这个程序进行计算时在我的gpu上执行?clGetProgramInfo(…,CL_program_BINARIES,…)获取编译后的二进制文件,但解释取决于体系结构。各种SDK都有不同的工具,可以让您获得GPU汇编。clGetProgramInfo(…,CL_程序_二进制文件,…)可以让您获得已编译的二进制文件,但这取决于体系结构。各种SDK都有不同的工具,可以让您使用GPU汇编。最简单的方法是在应用程序中查找内核字符串

我有一个使用OpenCL进行数学运算的程序,如何获得OpenCL的源代码,当这个程序进行计算时在我的gpu上执行?

clGetProgramInfo(…,CL_program_BINARIES,…)获取编译后的二进制文件,但解释取决于体系结构。各种SDK都有不同的工具,可以让您获得GPU汇编。

clGetProgramInfo(…,CL_程序_二进制文件,…)可以让您获得已编译的二进制文件,但这取决于体系结构。各种SDK都有不同的工具,可以让您使用GPU汇编。

最简单的方法是在应用程序中查找内核字符串。有时,您可以在某个.cl文件中找到它的源代码,否则您可以尝试用类似的东西扫描应用程序的二进制文件。如果应用程序没有故意混淆内核源代码,您很可能会发现它使用了这些方法之一

更可靠的方法是捕获提供给OpenCLAPI的字符串。您甚至可以提供自己的OpenCL实现,只需在相关cl函数中打印出内核字符串。这实际上相当简单:从开始并更改以打印出输入字符串-这是一个微不足道的代码更改

然后,您可以将修改后的版本安装为OpenCL实现,并确保应用程序使用它。如果应用程序需要某些OpenCL功能,这可能会很棘手,但您的实现当然可能会涉及这些功能


请注意,在将来,可能会使这类事情变得不可能-您将能够获得内核的IR,但无法获得其源代码。

最简单的方法是在应用程序中查找内核字符串。有时,您可以在某个.cl文件中找到它的源代码,否则您可以尝试用类似的东西扫描应用程序的二进制文件。如果应用程序没有故意混淆内核源代码,您很可能会发现它使用了这些方法之一

更可靠的方法是捕获提供给OpenCLAPI的字符串。您甚至可以提供自己的OpenCL实现,只需在相关cl函数中打印出内核字符串。这实际上相当简单:从开始并更改以打印出输入字符串-这是一个微不足道的代码更改

然后,您可以将修改后的版本安装为OpenCL实现,并确保应用程序使用它。如果应用程序需要某些OpenCL功能,这可能会很棘手,但您的实现当然可能会涉及这些功能


请注意,在将来,可能会使这类事情变得不可能-您将能够获取内核的IR,但无法获取其源代码。

如果我构建程序,这是可行的,但我需要使用其他封闭程序来实现这一点。我不能编译任何东西,但我需要得到在GPU上执行的源代码。如果我构建程序,这是可行的,但我需要用其他封闭程序来完成。我不能编译任何东西,但我需要得到在GPU上执行的源代码。