Sono nuovo di C, C++ e OpenCL e faccio del mio meglio per impararli al momento. Ecco una funzione C++ preesistente che sto cercando di capire come eseguire il porting su OpenCL usando i binding C o C++.Come passare e accedere ai vettori 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;
}
};
In linea di massima la mia domanda è come passare in tutti i membri della classe che questa funzione accede al bind e al kernel. Capisco come passare i valori scalari ma i valori vettoriali di cui non sono sicuro. C'è forse un modo per passare i puntatori a ciascuno dei membri sopra o la memoria li mappa in modo tale che la vista di OpenCL su di essi sia sincronizzata con la memoria dell'host? Ripartiti le mie domande sono come di seguito.
- Come passare i membri b e c al bind e il kernel dato che questi sono di dimensioni variabili?
- Come passare il membro d dato che è bidimensionale?
- Come accedere a questi membri dal kernel e quali tipi verranno dichiarati come negli argomenti del kernel? Userà semplicemente la notazione dell'indice di array, ad esempio, b [0] per l'accesso?
- Come potrei invocare un'operazione equivalente a b.size() all'interno della funzione kernel o non lo farei e invece passare la dimensione dall'associazione al kernel come argomento aggiuntivo? Cosa succede se cambia?
Apprezzerei molto sia l'associazione C o C++ che il codice sorgente di esempio del codice del kernel nelle risposte.
Molte grazie.
'utilizzando namespace std;' - Non farlo in un colpo di testa, mai. –
@EdS. perché dovrebbe essere? – dominicbri7
@ dominicbri7: perché stai inquinando lo spazio dei nomi globale per tutti coloro che includono la tua intestazione. Forse non voglio importare 'std' nel mio spazio dei nomi globale. Forse c'è una buona ragione per quello. Tu non hai fatto la scelta per me. –