1

我不太了解 OpenCL,但我知道 C/C++ API 要求程序员将 OpenCL 代码作为字符串提供。但最近我发现了不需要字符串代码来调用某些计算的ArrayFire库。我想知道它是如何工作的(它是开源的,但代码有点混乱)。是否可以使用调用任何已编译(例如 x86)代码的 OpenCL 后端编写并行代码,如下所示:

template <typename F>
void parallel_for(int starts, int ends, F task) //API
{ /*some OpenCL magic */ }
//...
parallel_for(0, 255, [&tab](int i){ tab[i] *= 0.7; } ); //using

PS:我知道我对 99% 过于乐观

4

1 回答 1

2

您不能真正使用标准 OpenCL 从设备调用 C++ 主机代码。您可以使用SYCL,这是用于单源 C++ 编程的 Khronos 标准。SYCL 允许直接将 C++ 编译成设备代码,而不需要 OpenCL 字符串。您可以从 SYCL 内核内部调用任何 C++ 函数(只要源代码可用)。SYCL.tech有更多链接和更新信息。

于 2016-12-29T15:28:10.847 回答