Unterschiedliche Ergebnisse zwischen Pool-Rechnern und Gris

Lukg
Erstie
Erstie
Beiträge: 11
Registriert: 14. Okt 2010 17:32

Unterschiedliche Ergebnisse zwischen Pool-Rechnern und Gris

Beitrag von Lukg » 3. Feb 2012 17:53

Hallo,

ich habe das Problem, dass das Programm auf dem GRIS-Rechner falsche Werte berechnet, während der SELBE Code auf den Pool-Rechnern die richtigen Werte berechnet.
Der Wert für "x=0 y=0" ist zum Beispiel auf dem Gris-Rechner -0.266987.Woran kann das liegen?

Nach stundenlanger Arbeit muss ich jetzt also feststellen, dass ich wohl wieder von neuem anfangen muss...

OpenCL ist für mich ein einziges großes Rätsel.
Ich dachte, das Problem liegt irgendwie bei den Double-Variablen.
Aber selbst wenn ich stattdessen den Datentyp Float benutze, erhalte ich auf dem GRIS-Rechner die gleichen falschen Werte. Gleichzeitig schmeißt aber bei diesem Code der Pool-Rechner irgendwelche Fehler, wie etwa: "allZero_v4_i32 in function __Vectorized_.oclMIcomputation". Google? Fehlanzeige! Unglaubliche 2 Einträge gibt es über diesen Fehler, die kein bisschen weiterhelfen.
In einem anderen Thread hier im Forum, gibt es den gleichen Fehler, nur für atom_inc, was ich aber nicht benutze.

Allein bei folgendem minimalen Code, bekomme ich nur
"Error: unimplemented function(s) used:
allZero_v4_i32 in function __Vectorized_.oclMIcomputation
allOne_v4_i32 in function __Vectorized_.oclMIcomputation
CompilerException Failed to parse IR
CL_INVALID_PROGRAM_EXECUTABLE"

Code: Alles auswählen

__kernel void oclMIcomputation(__global uchar * sequences, __global float * onePointProbs, __global float * result, uint sequenceLength, uint numSequences)
{
for (int t = get_local_id(0); t<numSequences; t += WGDIM) {}
}
Das Lustige ist auch, dass ich in meinem vollständigen OpenCL-Programm (mit Double, ohne Float) genau die obige Schleife benutze, und es funktioniert.

??? Ich verstehe NICHTS mehr.

Lucas-
Neuling
Neuling
Beiträge: 7
Registriert: 26. Jan 2012 23:53

Re: Unterschiedliche Ergebnisse zwischen Pool-Rechnern und G

Beitrag von Lucas- » 3. Feb 2012 19:07

Das Problem liegt wahrscheinlich daran, dass du z.b. die Variable twoPointOccs[x][y] von allen threads der work-group gleichzeitig erhöhnen lässt ohne entweder die atom-functions oder parallele Algorithmen wie die Reduktion aus Folie 22 zu verwenden.

Hier ein guter Link warum das dann zu Fehlern führen wird und wie die atom-functions das beheben: http://www.cmsoft.com.br/index.php?opti ... Itemid=168

Lukg
Erstie
Erstie
Beiträge: 11
Registriert: 14. Okt 2010 17:32

Re: Unterschiedliche Ergebnisse zwischen Pool-Rechnern und G

Beitrag von Lukg » 5. Feb 2012 17:36

Danke Dir!
Ich habe twoPointOccs[x][y] nun mit atom_inc erhöht (ist um einiges einfacher als die Reduktion ;) ).
Das Problem lag alledings bei MI_ij, welches ja auch threadsicher erhöht werden muss.

Antworten

Zurück zu „Archiv“