2014-03-03 40 views

回答

3

最直接的方法是在應用程序中查找內核字符串。有時候你只能找到它的源代碼放在一些.cl文件中,否則你可以嘗試用strings之類的東西掃描應用程序的二進制文件。如果應用程序不是有目的地混淆內核源代碼,那麼您可能會使用其中一種方法找到它。

更強大的方法是捕獲提供給OpenCL API的字符串。你甚至可以提供你自己的OpenCL實現,只是在相關的cl函數中打印出內核字符串。其實很簡單:從pocl開始並更改the implementation of clCreateProgramWithSource以打印輸入字符串 - 這是一個簡單的代碼更改。

然後,您可以將該修改後的版本安裝爲OpenCL實現,並確保應用程序使用它。如果應用程序需要某些OpenCL功能,這可能會非常棘手,但是您的實現當然可以對這些做出解釋。

請注意,將來,SPIR可能會使這種事情變得不可能 - 您將能夠獲得內核的IR,但不能獲得其源。

+0

謝謝!!!!!!!!! – lebron2323

1

clGetProgramInfo(...,CL_PROGRAM_BINARIES,...)讓你獲得編譯的二進制文件,但解釋依賴於體系結構。各種SDK有不同的工具,可能會讓你GPU組裝。

+0

這工作如果我建立程序,但我需要與其他封閉的程序做到這一點。我無法編譯任何東西,但我需要獲得在GPU上執行的源代碼。 – lebron2323