Soy nuevo en C, C++ y OpenCL y estoy haciendo todo lo posible para aprenderlos en este momento. Aquí hay una función preexistente de C++ que estoy tratando de descubrir cómo portar a OpenCL usando los enlaces C o C++.¿Cómo pasar y acceder a los vectores de C++ al kernel OpenCL?
#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;
}
};
En términos generales, mi pregunta es cómo pasar en todos los miembros de la clase que esta función accede a la unión y el núcleo. Entiendo cómo transmitir los valores escalares pero no estoy seguro de los valores del vector. ¿Existe alguna forma de pasar punteros a cada uno de los miembros anteriores o la memoria puede mapearlos para que la vista de OpenCL esté sincronizada con la memoria del host? Desglosado mis preguntas son las siguientes.
- ¿Cómo paso el miembro byc al encuadernado y al núcleo dado que estos son de tamaño variable?
- ¿Cómo paso el miembro d dado que es bidimensional?
- ¿Cómo accedo a estos miembros desde dentro del núcleo y qué tipos se declararán como argumentos en el kernel? ¿Simplemente usará la notación del índice de matriz, es decir, b [0], funciona para acceder?
- ¿Cómo invocaría una operación equivalente a b.size() dentro de la función kernel o no, y en su lugar pasaría el tamaño del enlace al kernel como argumento adicional? ¿Qué pasa si cambia?
Realmente agradecería la encuadernación en C o C++ y el código fuente del ejemplo del kernel en las respuestas.
Muchas gracias.
'using namespace std;' - No hagas eso en un encabezado, nunca. –
@EdS. ¿Por qué sería eso? – dominicbri7
@ dominicbri7: Porque está contaminando el espacio de nombres global para todos los que incluyen su encabezado. Tal vez no quiero importar 'std' en mi espacio de nombres global. Tal vez hay una buena razón para eso. No fuiste y tomaste la decisión por mí. –