2017-04-21 64 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代碼。