Могу ли я встроить классы C ++ в ядра OpenCL? - PullRequest
4 голосов
/ 17 февраля 2011

есть ли возможность использовать самоопределенные C ++ - классы в ядре OpenCL? Это должно работать так:

#include "element.cpp"
__kernel void do_something(__global element* input, __global element* output);
{
    int index = get_global_id(0);
    output[index] = input[index].update(index);
}

Это интересно, потому что вы можете указать работу, которая должна быть выполнена в element :: update (int no) впоследствии.

Я не получил его на работу. Вот что говорит мне OpenCL-компилятор:

имя неизвестного типа 'класс'

В CUDA это работает. Есть ли другие идеи, если подход с объектами в ядре OpenCL не работает?

Спасибо за ваши подсказки заранее!

Ответы [ 3 ]

9 голосов
/ 17 февраля 2011

Я считаю, что OpenCL следует спецификации языка C99, а не C ++.Спецификации для C ++ версии OpenCL продолжаются .Я считаю, что в AMD APP реализована версия OpenCL для C ++.Возвращаясь к вашему вопросу, я думаю, что лучше иметь структуру в качестве интерфейса между C ++ и C. Версия C ++ должна быть оболочкой для реализации C, если вам это необходимо.

РЕДАКТИРОВАТЬ:Я не мог поместить это в комментарии, следовательно помещая это здесь.Библиотеки AMD C ++ для OpenCL включают статическую библиотеку C ++ и Bolt .

2 голосов
/ 18 февраля 2011

Нет, другие, как они говорят вам, OpenCL основан на C99, поэтому вы можете использовать структуры как

typedef struct{
   float mini;
   int pos;
}A;
2 голосов
/ 17 февраля 2011

Нет. Язык OpenCL расширяет C99 и поэтому не поддерживает ключевые слова и функции C ++, например "Класс".

Если ваш код для применения - и C ++, и OpenCL, т.е. в общем подмножестве обоих, у вас может быть что-то похожее на

element update(element in) { ... ; return result; }

и вызовите это либо в OpenCL, либо в C ++, по желанию, например,

output[index] = update(input[index]);

при условии, что элемент является структурой, а не полями типов, отличных от C.

В общем случае входы и выходы OpenCL должны быть простыми структурами или массивами, а не классами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...