template T *gpu_allocate() {
T *data;
cudaMallocManaged(&data, sizeof(T));
return data;
}
struct Circle {
double radius;
Circle(double _radius) : radius(_radius) {}
};
struct Quad {
double x, y;
Quad(double _x, double _y) : x(_x), y(_y) {}
};
int main() {
auto circle = gpu_allocate();
*circle = Circle(0.3);
auto quad = gpu_allocate();
*quad = Quad(0.3, 0.2);
return 0;
}
< /code>
После выделения данных я обычно должен инициализировать этот недавно созданный объект с помощью конструктора. Существует ли способ объединить этот конструктор (с различными типами и числами параметров) в функцию распределения, чтобы я мог иметь: < /p>
template T *gpu_allocate(Parameters parameters) {
T *data;
cudaMallocManaged(&data, sizeof(T));
*data = T(parameters);
return data;
}
auto circle = gpu_allocate(0.3);
auto quad = gpu_allocate(0.1, 0.2);
У меня есть простая функция gpu_allocate () , чтобы помочь выделить память на GPU (cuda): [code]template T *gpu_allocate() { T *data; cudaMallocManaged(&data, sizeof(T));
int main() { auto circle = gpu_allocate(); *circle = Circle(0.3);
auto quad = gpu_allocate(); *quad = Quad(0.3, 0.2);
return 0; }
< /code> После выделения данных я обычно должен инициализировать этот недавно созданный объект с помощью конструктора. Существует ли способ объединить этот конструктор (с различными типами и числами параметров) в функцию распределения, чтобы я мог иметь: < /p> template T *gpu_allocate(Parameters parameters) { T *data; cudaMallocManaged(&data, sizeof(T)); *data = T(parameters);
return data; }
auto circle = gpu_allocate(0.3); auto quad = gpu_allocate(0.1, 0.2); [/code] Это возможно?