Вы не можете скомпилировать OpenCL подобный код (без справедливого чуть более вспомогательной инфраструктуры, такие как OpenCL-способной компилятор и библиотеки для функциональности OpenCL - Clang способна компиляции OpenCL для x86, но затем жалуется на то, что у него нет библиотек supprting, когда он пытается связать вещи).
Типичное применение OpenCL будет выглядеть примерно так:
// Get platform, device and context - this is about 10-20 lines of "boilerplate" code.
const char* source = "... your code goes here ...";
// But you could of course read it from a file, for example!
cl_int err;
clProgram prog = clCreateProgramWithSource(context, 1, &source, NULL, &err);
err = clBuildProgram(prog, 1, &device, NULL, NULL, NULL);
cl_kernel kern = clCreateKernel(prog, "hello", &err);
cl_mem out = clCreateBuffer(context, CL_MEM_READ_WRITE, 100, NULL, err);
err = clSetKernelArg(kernel, 0, sizeof(out), out);
size_t range = 1;
cl_command_queue queue = cl_create_command_queue(...);
cl_event event;
err = clEnqueueNDRange(queue, kern, 1, NULL, &size, NULL, 0, NULL, &event);
clFlush(queue);
clWaitForEvent(event);
// Lots of lines of code to release everything.
[Я только от руки написаны эти строки - у меня нет среды CL дома, поэтому я не могу проверить его - он показывает общий принцип, и я пропустил совсем немного кода установки/разрыва - и, конечно, проверка ошибок должна выполняться для каждого вызова библиотеки OpenCL, так как часто бывает легко получить это немного неправильно и получить ошибку назад, что затем приводит к следующему шагу, сбой/неправильный ход]
Существуют объектно-ориентированные варианты, которые позволяют избежать некоторой очистки (деструктор делает это за вас), но так как я только написал такой код несколько раз [vs. много раз с базовой версией C, показанной выше], мне пришлось бы пройти через документы или посмотреть «карту привязки OpenCL C++», которую я имею на работе.
Похоже, вы пытаетесь скомпилировать OpenCL-код как собственный код (для запуска на вашем CPU). Насколько я могу судить, gcc не распознает opencl как язык. Для компиляции кода необходим компилятор opencl. Clang действительно понимает opencl, но вы по-прежнему не можете скомпилировать его как родное приложение без дополнительной поддержки в виде библиотеки времени выполнения. Обычный способ использования OpenCL - использовать clCreateProgramFromSource(), clBuildProgram(), clCreateKernel() и clEnqueueNDRange() [с некоторым шаблоном до/после] –
@MatsPetersson правильный (и должен представить это как ответ) – Dithermaster
Я не пытаясь скомпилировать с GCC в качестве ссылки. Я использую g ++ с -lOpenCl, и он должен работать, поэтому я запутался ... Другие вызовы функции opencl - это все, что только объявление метода ядра является проблемой – theNoobProgrammer