2017-04-21 40 views
2

除了遗留的OpenCL C内核语言之外,OpenCL 2.1和2.2还引入了OpenCL C++内核语言。我必须在支持C的环境中使用OpenCL,但不支持C++。除OpenCL C++中提供的C++语法之外,是否还有OpenCL 2.2功能,但在OpenCL C中不可用?是否有OpenCL 2.2功能,这些功能在OpenCL C++中可用,但在OpenCL C中不可用?

我必须使用C++编译器(编写C++主程序)才能使用OpenCL C++内核语言吗?我的理解是,一些OpenCL实现包括一个有限的C++编译器来处理OpenCL C++内核语言。

+0

我不知道增加的功能 - 你必须看看这个规格;但它是C++代码,所以除非你要去做一些工作;你将会使用C++编译器。 – Petesh

回答

3

我还没有尝试过,但我不认为你需要一个C++编译器来在OpenCL 2.1/2.2中使用C++内核语言,因为你只是将源代码提交给驱动程序进行编译(使用它的内置函数)在C++编译器中)。当然,你的主机程序必须是C而不是C++。

+0

它是如何完成的?当C编译器遇到'kernel'关键字后跟C++代码时会发生什么? –

+1

@PaulJurczak我们不能在OpenCL中混合宿主代码和内核代码。 – BlueWanderer

+1

在OpenCL中,主机代码和内核代码是分开的,因此您可以拥有C主机代码和C++内核代码。在SYCL中它们被组合;你有一个用于主机和内核代码的单一代码模块。但是你没有使用它。 – Dithermaster

0

要构建GPU OpenCL 2.1代码,OpenCL编译器必须支持C++。您必须至少在GPU方面支持C++(自动,因为它是包含它的OpenCL编译器)。

除此之外,您的主机代码可以是C代码。