2013-12-20 208 views
0

我想製作一個「將分發給客戶」的程序,所以我想保護我的內核代碼免受黑客的攻擊「有人告訴我,AMD驅動程序一些如何將內核源碼放入內部二進制,所以黑客可以登錄與AMD設備」使用VexCL「編譯二進制文件」

,因爲我不VexCL尚未經歷過,什麼是正確的編譯行剛剛發佈的二進制文件

例如使用CUDA我可以輸入內核:NVCC -gencode arch = compute_10,code = sm_10 myfile.cu -o myexec

什麼是VexCL中的equivilent?

VexCL還可以在Mac OS上工作哪個IDE? (這是因爲我沒有經驗,在Mac OS之前,未來的任務)

我以前用的OpenCL的經驗是通過使用STDCL庫「但它是在Windows上車,不支持Mac」

回答

2

我VexCL的開發者,我也回覆了您的問題here

VexCL爲您在運行時在代碼中使用的表達式生成OpenCL/CUDA內核。而且,它允許用戶將生成的內核源文件轉儲到標準輸出流。例如,如果你可以使用以下的HELLO.CPP文件:

#include <vexcl/vexcl.hpp> 
int main() { 
    vex::Context ctx(vex::Filter::Env); 
    vex::vector<double> x(ctx, 1024); 
    vex::vector<double> y(ctx, 1024); 
    y = 2 * sin(M_PI * x) + 1; 
} 

然後用

g++ -o hello hello.cpp -std=c++11 -I/path/to/vexcl -lOpenCL -lboost_system 

然後設置VEXCL_SHOW_KERNELS = 1編譯和運行編譯的二進制:

$ export VEXCL_SHOW_KERNELS=1 
$ ./hello 

您將看到爲表達式y = 2 * sin(M_PI * x)+ 1生成的內核:

#if defined(cl_khr_fp64) 
# pragma OPENCL EXTENSION cl_khr_fp64: enable 
#elif defined(cl_amd_fp64) 
# pragma OPENCL EXTENSION cl_amd_fp64: enable 
#endif 

kernel void vexcl_vector_kernel 
(
    ulong n, 
    global double * prm_1, 
    int prm_2, 
    double prm_3, 
    global double * prm_4, 
    int prm_5 
) 
{ 
    for(size_t idx = get_global_id(0); idx < n; idx += get_global_size(0)) 
    { 
    prm_1[idx] = ((prm_2 * sin((prm_3 * prm_4[idx]))) + prm_5); 
    } 
} 

VexCL還允許緩存已編譯的二進制源(默認情況下位於$ HOME/.vexcl文件夾中),並將源代碼保存在緩存中。

一方面,您看到的來源是自動生成的,不是非常人性化的。另一方面,這些閱讀比例如反彙編二進制文件更方便閱讀。恐怕沒有辦法讓資源遠離「黑客」,除非可能修改VexCL源代碼以滿足您的需求。 MIT許可證允許你這樣做,如果你準備好這樣做,我可以爲你提供一些指導。

請注意,NVIDIA OpenCL驅動程序是自己的緩存,它還將內核源與高速緩存的二進制文件(位於$ HOME/.nv/ComputeCache文件夾中)一起存儲。我不知道是否有可能改變這種行爲,所以'黑客'仍然可以從那裏獲取內核資源。我不知道AMD是否也做過類似的事情,但可能這就是你的源代碼所說的「用AMD設備登錄內核」。

關於MacOS兼容性,我沒有MacOS機器來做我自己的測試,但我有報道說VexCL在那裏工作。我不確定使用了什麼IDE。

+0

非常感謝這個清晰的答案:) –

相關問題