【问题标题】:working with VexCL "compiling binaries"使用 VexCL“编译二进制文件”
【发布时间】:2013-12-20 15:54:02
【问题描述】:

我想制作一个“将分发给客户”的程序,所以我想保护我的内核代码免受黑客攻击“有人告诉我 AMD 驱动程序以某种方式将内核源代码放入二进制文件中,这样黑客就可以登录带有 AMD 设备的内核”

由于我还没有使用 VexCL 的经验,所以仅分发二进制文件的正确编译行是什么

例如,对于 CUDA,我可以输入:nvcc -gencode arch=compute_10,code=sm_10 myfile.cu -o myexec

VexCL 中的等价物是什么?

VexCL 也可以在 Mac OS 上工作吗?哪个 IDE? (这是一个未来的任务,因为我之前没有使用 Mac OS 的经验)

我之前使用 OpenCL 的经验是使用 STDCL 库“但它在 Windows 上存在问题,不支持 Mac”

【问题讨论】:

    标签: c++ vexcl


    【解决方案1】:

    我是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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-24
      • 2013-01-03
      • 2017-07-29
      • 2017-04-25
      • 1970-01-01
      • 2011-01-17
      • 2014-06-08
      • 1970-01-01
      相关资源
      最近更新 更多