Include in CL-Datei

simon_luser
Neuling
Neuling
Beiträge: 9
Registriert: 28. Mär 2011 14:29

Include in CL-Datei

Beitrag von simon_luser » 27. Jan 2012 16:10

Hallo,

folgende Frage: Wie kann man in der CL-Datei Funktionen aus anderen Klassen benutzen; also wie includiert man diese richtig, bzw. ruft sie auf?

Lt. Google geht das nicht mit #include ... , sondern muss irgendwie bei "clBuildProgram" mit übergeben werden.

Wie funktioniert das nun hier?

Wir wollen z.B. die Klasse "SequenceSet" benutzen..

Narida
Neuling
Neuling
Beiträge: 5
Registriert: 27. Jan 2012 14:40

Re: Include in CL-Datei

Beitrag von Narida » 27. Jan 2012 17:28

Die OpenCL Sprache ist quasi C (bis auf die __local und paar andere Sachen). In C gibt es keine Klassen.

Die Daten die man braucht wurden schon in Arrays gepackt und dem Kernel übergeben. Ihr müsst nur den richtigen Array-Index ausrechnen und auslesen...

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Include in CL-Datei

Beitrag von mw1039 » 28. Jan 2012 11:47

Soweit ich weiss, ist es grundsaetzlich nicht moeglich Host-Funktionen (also CPU-Funktionen) vom Device-Code (GPU) aus aufzurufen. Ihr koennt hoechstens andere Kernelfunktionen aufrufen.

jdn
Neuling
Neuling
Beiträge: 8
Registriert: 4. Nov 2011 13:55

Re: Include in CL-Datei

Beitrag von jdn » 31. Jan 2012 15:43

Hilft dir vermutlich nicht mehr weiter (oder du hast es selber raus gefunden), aber es ist möglich eigene Funktionen aus dem Kernel heraus aufzurufen. Siehe dazu: http://stackoverflow.com/questions/2924 ... -functions

Was leider fehlt auf der Seite ist ein konkretes Beispiel, deshalb hier mal ein Auszug von mir:

Code: Alles auswählen

// load the kernel's source code and create a program
const char *srcCode = loadProgram().c_str();
const char *auxCode = "int getIndex(char c) {...}\0";
const char *program[2] = {auxCode, srcCode};
	
oclProgram = clCreateProgramWithSource(oclContext, 2, &program[0], 0, &oclError);
Ein Include ist damit nicht mehr nötig, und im Kernel kannst du dann einfach deine Methode aufrufen (im Beispiel: getIndex('A'))...

jojo1704
DON'T PANIC
Beiträge: 42
Registriert: 12. Apr 2011 11:18

Re: Include in CL-Datei

Beitrag von jojo1704 » 1. Feb 2012 10:57

Wir versuchen auch gerade eine Funktion im Kernel aufzurufen.

Wo genau muss dein Code eingefügt werden?

jdn
Neuling
Neuling
Beiträge: 8
Registriert: 4. Nov 2011 13:55

Re: Include in CL-Datei

Beitrag von jdn » 1. Feb 2012 11:05

Im Originaltemplate musst du die Zeilen 62 und 63 der oclutil.cpp bearbeiten. Suche einfach nach dem Aufruf von clCreateProgramWithSource, und vergleiche das Template mit dem Codebeispiel.

jdn
Neuling
Neuling
Beiträge: 8
Registriert: 4. Nov 2011 13:55

Re: Include in CL-Datei

Beitrag von jdn » 1. Feb 2012 16:59

Ich poste hier noch mal ein kleines Update, da uns mit valgrind ein paar Fehler beim Einlesen des Codes aufgefallen sind. Der große Unterschied ist, dass jetzt die Länge des Codes mit übergeben wird...

Code: Alles auswählen

// load the kernel's source code and create a program
std::string srcCodeStr = loadProgram();
const char *srcCode = srcCodeStr.c_str();
std::string auxCodeStr = "int getIndex(char c) {...}\0";
const char *auxCode = auxCodeStr.c_str();
const char *program[2] = {auxCode, srcCode};
	
const size_t length[2] = { auxCodeStr.length(), srcCodeStr.length() };
	
oclProgram = clCreateProgramWithSource(oclContext, 2, program, length, &oclError);

Antworten

Zurück zu „Archiv“