Я новичок в C, С++ и OpenCL и делаю все возможное, чтобы изучить их на данный момент. Здесь существовала ранее существовавшая функция С++, которую я пытаюсь выяснить, как подключиться к OpenCL с помощью привязок C или С++.
#include <vector>
using namespace std;
class Test {
private:
double a;
vector<double> b;
vector<long> c;
vector<vector<double> > d;
public:
double foo(long x, double y) {
// mathematical operations
// using x, y, a, b, c, d
// and also b.size()
// to calculate return value
return 0.0;
}
};
В целом мой вопрос заключается в том, как передать всем членам класса доступ к этой функции в привязку и ядро. Я понимаю, как передать скалярные значения, но векторные значения, о которых я не уверен. Может быть, есть способ передать указатели на каждый из вышеперечисленных элементов или карту, чтобы отобразить их так, чтобы представление OpenCL их синхронизировалось с памятью хоста? Сломанные мои вопросы таковы, как показано ниже.
- Как передать члену b и c привязке и ядру, учитывая, что они имеют переменный размер?
- Как передать член d, если он двумерный?
- Как получить доступ к этим членам из ядра и какие типы будут объявлены как в аргументах ядра? Будет просто использовать нотацию индекса массива, т.е. B [0] работать для доступа?
- Как бы я вызывал операцию, эквивалентную b.size() внутри функции ядра, или я бы не отказался и вместо этого передал размер от привязки к ядру в качестве дополнительного аргумента? Что произойдет, если он изменится?
Я бы очень признателен за исходный код кода C или С++ и код кода кода ядра в ответах.
Большое спасибо.