GPU 的 Halide 交叉编译

Halide cross-compilation for GPU

我想 运行 GPU 上的 Halide 代码。有一个关于如何在 GPU 上 运行 以及如何进行交叉编译的教程示例。但是,没有在GPU上结合交叉编译和运行ning的教程。

我试过按照交叉编译教程中的方法去做。但是我不确定target的配置。

target.os = Target::Windows; 
target.arch = Target::X86; 
target.bits = 64;
...

target.os = Target::Windows; // ???
target.arch = ??? ;
target.bits = 64;
std::vector<Target::Feature> gpu_features;
gpu_features.push_back(Target::OpenCL);
brighter.compile_to_file(...);

我在 Ubuntu 运行ning 中的代码在虚拟机上开发,而主机 OS 是 Windows。这就是为什么我需要进行交叉编译才能在 GPU 上 运行。

是否支持?

还有CPU个调用GPU代码的代码。因此,您应该在 Ubuntu 上生成 H 和 OBJ 或 LIB 文件,并在 Windows 上从您的 Windows 项目中使用它们。

为了扩展一点,Halide 可以在单个过滤器中为多个 GPU/accelerator/offload 架构生成代码。 Target 为主机代码 运行 指定 CPU 的 architecture/OS/address-width,加上允许的外部执行 API 集。 Funcs 可以安排到任何这些 API,例如OpenCL、OpenGL、Cuda等。事实上,为了在GPU上得到任何东西运行,必须提供适当的调度。

将 运行 在加速器或 GPU 上的代码嵌入到 运行 顶层 Target 指定的 CPU 架构上的函数中.

例如,可以编写在 OpenCL 和 OpenGL 之间相当无缝地互操作的 Halide 代码。

最终我们计划支持来自我们支持的源代码语言的 运行ning GPU(etc) 代码(目前是 C++,JavaScript 在一个分支中)。

无法为 GPU 生成独立代码。例如。如果没有调用代码的 CPU 代码包装器,就无法获得 OpenCL。