Parameter falsch übergeben?

tacu
Mausschubser
Mausschubser
Beiträge: 64
Registriert: 13. Apr 2011 18:35

Parameter falsch übergeben?

Beitrag von tacu » 4. Feb 2012 17:49

Hi,

unser code ist jetzt mit viel hilfe aus den Sprechstunden entstanden, und kein tutor oder sonst wer findet noch fehler im Kernel. jedoch bekommen wir komplett falsche ausgaben. das problem scheint vor allem schon darin zu bestehen das die Parameter falsch übergeben werden oder so,, wir haben im kernel am anfang eine abfrage ob der aktuelle wert im oberen dreieck liegt, wenn ja schreibt er dort momentan zum testen eine -1 rein.

zum weiteren testen hab ich dort ein else eingebaut, das eine -2 schreibt, also sollte eigentlich ein ausgabefile entstehen in dem überall eine -2 steht.

die ausgabe sieht aber so aus (auszug) :
x=0 y=0: -2
x=0 y=1: -1
x=1 y=1: -1
x=0 y=2: -2
x=1 y=2: -2
x=2 y=2: -2
x=0 y=3: -2
x=1 y=3: -2
x=2 y=3: -2
x=3 y=3: -2
x=0 y=4: -2
x=1 y=4: -2
x=2 y=4: -2
x=3 y=4: -2
x=4 y=4: -2
x=0 y=5: -1
x=1 y=5: -1
x=2 y=5: -1
x=3 y=5: -1
x=4 y=5: -1
x=5 y=5: -1
x=0 y=6: -2
x=1 y=6: -2
x=2 y=6: -2
jeweils im if und im else block wird nach dem setzen vom wert ein return gemacht, der restliche kernel macht zur zeit also garnix.
wie kann das zustande kommen?? wir arbeiten mit workspace {22 , 1 } so wie es in der sprechstunde empfohlen wurde. haben auch nur diese eine stelle im coderahmen verändert. und andere Gruppen die es auch auf diese art gelöst haben können keinen unterschied in ihrem code zu unserem sehen oO

hat jemand irgendwelche ideen? sind für jeden vorschlag dankbar :P

bttf
Mausschubser
Mausschubser
Beiträge: 76
Registriert: 9. Nov 2011 14:04

Re: Parameter falsch übergeben?

Beitrag von bttf » 4. Feb 2012 18:20

Wie überprüft ihr denn, ob der zu berechnende Wert in der oberen/unteren Dreiecksmatrix ist?

Was passiert mit der Ausgabe, wenn ihr im if Teil, in dem ihr momentan die -1 schreibt, einfach nur return macht?

tacu
Mausschubser
Mausschubser
Beiträge: 64
Registriert: 13. Apr 2011 18:35

Re: Parameter falsch übergeben?

Beitrag von tacu » 4. Feb 2012 20:07

die if abfrage sieht so aus:

if(i>j)

wobei
int i = get_global_id(0);
int j = get_global_id(1);
wenn ich anstatt -1 nur return mache, schreibt er überall eine -2 hin. wenn ich den else fall wo er -2 schreiben soll weg lasse, schreibt er überall wo in der ausgabe vom ersten post eine -2 steht, einen anscheinend zufälligen wert, der sich bei jedem ausführen ändert. vermutlich irgendwelche werte die im speicher rum fliegen?

bttf
Mausschubser
Mausschubser
Beiträge: 76
Registriert: 9. Nov 2011 14:04

Re: Parameter falsch übergeben?

Beitrag von bttf » 4. Feb 2012 20:32

Ich würde hier nicht mit get_global_id() arbeiten. Überleg doch mal, was dann beim ausführen passiert: Jedes Work Item führt den Code im Kernel aus. So z.B. auch alle Work Items der Workgroup, die den 0,0 Eintrag der Matrix berechnen soll. Eines der Work Items dieser Workgroup, nämlich das, für welches get_global_id(0) = 0 und get_global_id(1) = 0 gilt, führt den else Zweig der Abfrage aus. Aber was machen die anderen 21???? :wink:

Besser ist es hier mit get_group_id(dimension) zu arbeiten. Damit kannst du die Workgroups unterscheiden, also die nicht benötigten einfach von der Berechnung ausschließen, aber alle Workitems innerhalb einer Workgroup bekommen bei der Abfrage das gleiche Ergebnis.

Sprich, wenn du für i und j statt den globalen Id's folgendes benutzt:

Code: Alles auswählen

int i = get_group_id(0);
int j = get_group_id(1)
Dann sollte bei gleichem If, wenn ich das richtig überblickt habe, eigentlich nur noch der else Zweig ausgeführt werden.

mfg

tacu
Mausschubser
Mausschubser
Beiträge: 64
Registriert: 13. Apr 2011 18:35

Re: Parameter falsch übergeben?

Beitrag von tacu » 4. Feb 2012 20:40

OMG DANKE!!!!

wir hatten da vorher local_id was ja völlig falsch an dem punkt ist. und uns wurde dann erklärt das wir global brauchen, mit deiner group id sieht die ausgabe jetzt perfekt aus :) mann was hab ich alles probiert...

vielen vielen dank :)

Antworten

Zurück zu „Archiv“