1

我想在 GPU 上运行卤化物代码。有一个关于如何在 GPU 上运行以及如何进行交叉编译的教程示例。但是,没有将交叉编译与在 GPU 上运行相结合的教程。

我尝试过与交叉编译教程中的方法相同的方法。但我不确定目标的配置。

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 中开发在虚拟机上运行的代码,而主机操作系统是 Windows。这就是为什么我需要进行交叉编译才能在 GPU 上运行。

是否支持?

4

2 回答 2

1

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

于 2017-03-07T16:58:53.450 回答
0

扩展一点,Halide 可以在单个过滤器中为多个 GPU/加速器/卸载架构生成代码。指定将运行主机代码的 CPU的Target架构/OS/地址宽度,以及允许的外部执行 API 集。Funcs可以调度到任何这些 API,例如 OpenCL、OpenGL、Cuda 等。事实上,为了让任何东西在 GPU 上运行,必须提供适当的调度。

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

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

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

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

于 2017-03-07T19:47:55.367 回答