atomic_inc

thebrainiac
Erstie
Erstie
Beiträge: 11
Registriert: 14. Okt 2010 18:58

atomic_inc

Beitrag von thebrainiac » 31. Jan 2012 13:47

Hi @ All.

Folgendes Problem:

Wir haben einen

Code: Alles auswählen

__local int array[SIZE];
Nun wollen wir in einer for-Schleife dessen Elemente atomic incrementieren mit der Funktion atomic_inc.

Code: Alles auswählen

for (int i = 0; i < SIZE; i++) {
    atomic_inc(array[i]);
}
Dabei erhalten wir aber den Fehler, dass unser Parameter für atomic_inc nicht im richtigen Address-Space liegt. Wie kann man das beheben / damit ungehen?

Gruß, Christian.

P.S. Komplette Fehlermeldung:
error: no matching function for call to 'atomic_inc'
<stdin>:6405:35: note: candidate function not viable: no known conversion from 'int __attribute__((address_space(3)))' to 'int volatile __attribute__((address_space(1))) *' for 1st argument
<stdin>:6406:44: note: candidate function not viable: no known conversion from 'int __attribute__((address_space(3)))' to 'unsigned int volatile __attribute__((address_space(1))) *' for 1st argument
<stdin>:6407:35: note: candidate function not viable: no known conversion from 'int __attribute__((address_space(3)))' to 'int volatile __attribute__((address_space(3))) *' for 1st argument
<stdin>:6408:44: note: candidate function not viable: no known conversion from 'int __attribute__((address_space(3)))' to 'unsigned int volatile __attribute__((address_space(3))) *' for 1st argument

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

Re: atomic_inc

Beitrag von Lucas- » 31. Jan 2012 14:12

Die Funktion ist so deklariert: int atomic_inc ( volatile __local int *p)
D.h. du musst vor dein Argument ein "&" setzen, damit auf den Speicher des Arguments gezeigt wird

thebrainiac
Erstie
Erstie
Beiträge: 11
Registriert: 14. Okt 2010 18:58

Re: atomic_inc

Beitrag von thebrainiac » 31. Jan 2012 14:21

Ah, sehr gut, danke!

Aber jetzt haben wir dafür einen anderen Fehler:

Code: Alles auswählen

CL_BUILD_PROGRAM_FAILURE
Error: unimplemented function(s) used:
allZero_v4_i32 in function __Vectorized_.oclMIcomputation
allOne_v4_i32 in function __Vectorized_.oclMIcomputation
allZero_v4_i32 in function __Vectorized_.oclMIcomputation
allOne_v4_i32 in function __Vectorized_.oclMIcomputation
allZero_v4_i32 in function __Vectorized_.oclMIcomputation
allOne_v4_i32 in function __Vectorized_.oclMIcomputation
allZero_v4_i32 in function __Vectorized_.oclMIcomputation
allOne_v4_i32 in function __Vectorized_.oclMIcomputation
CompilerException Failed to parse IR
Diesmal sogar OHNE Zeilennummern! Welch komfortable Entwicklungsumgebung das doch ist!

Gruß, Christian.

thebrainiac
Erstie
Erstie
Beiträge: 11
Registriert: 14. Okt 2010 18:58

Re: atomic_inc

Beitrag von thebrainiac » 31. Jan 2012 14:36

Juhu!

Wenn man nach einem der Begriffe (allOne_v4_i32 bzw. allZero_v4_i32) googlet, erhält man jeweils ganze 3 (!) Suchergebnisse! Die einem noch nicht mal helfen!

danny
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 17. Okt 2010 22:32

Re: atomic_inc

Beitrag von danny » 31. Jan 2012 19:05

Heißt es nicht atom_inc?
Und habt ihr auch ein

Code: Alles auswählen

#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
in eurem Code?
Bei uns gehts damit.
Allerdings haben wir nicht direkt das Array benutzt, sondern:

Code: Alles auswählen

__local int array[SIZE];
int *p = array;
for(int index = 0; index < SIZE; ++index)
    atom_inc(p + index);
Quelle: http://www.khronos.org/registry/cl/sdk/ ... man/xhtml/ (siehe Atomics)
Zuletzt geändert von danny am 31. Jan 2012 19:09, insgesamt 1-mal geändert.

danny
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 17. Okt 2010 22:32

Re: atomic_inc

Beitrag von danny » 31. Jan 2012 19:08

doppelpost -.-

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: atomic_inc

Beitrag von simon.r » 31. Jan 2012 21:31


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

Re: atomic_inc

Beitrag von bttf » 2. Feb 2012 21:58

Habe auch ein Problem mit der atomic_inc Funktion. Und zwar kann ich das Programm auf dem Cluster nicht ausführen, während es auf meinem eigenen Laptop wunderbar läuft. Es bricht mit der Fehlermeldung "CL_INVALID_BINARY" ab. Hab dann den hier im Forum gepostet Code zum ausgebenlassen der Fehlermeldungen in oclutil.cpp kopiert und daraufhin stellte sich raus, dass wohl atomic_inc das Problem ist ("atomic_inc was not declared in this scope"). Als nächstes hab ich dann

#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable

hinzugefügt, obwohl die atomic Funktionen für 32-Bit Integer ab OpenCL 1.1 standardmäßig verfügbar sind. Hat aber leider auch nix gebracht. Hat jemand eine Idee, warum es auf dem Cluster nicht läuft, obwohl es auf meinem Laptop prima funktioniert???

mfg

oliver_g
Mausschubser
Mausschubser
Beiträge: 62
Registriert: 17. Nov 2008 16:27

Re: atomic_inc

Beitrag von oliver_g » 3. Feb 2012 10:17

Die Funktion heißt atom_inc und nicht atomic_inc! Es hilft wirklich sich ab und an mal die OpenCL Quick Reference Card anzuschauen, die wurde auch extra verlinkt!

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: atomic_inc

Beitrag von simon.r » 3. Feb 2012 11:09

bttf hat geschrieben:Habe auch ein Problem mit der atomic_inc Funktion. Und zwar kann ich das Programm auf dem Cluster nicht ausführen, während es auf meinem eigenen Laptop wunderbar läuft. Es bricht mit der Fehlermeldung "CL_INVALID_BINARY" ab. Hab dann den hier im Forum gepostet Code zum ausgebenlassen der Fehlermeldungen in oclutil.cpp kopiert und daraufhin stellte sich raus, dass wohl atomic_inc das Problem ist ("atomic_inc was not declared in this scope"). Als nächstes hab ich dann

#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable

hinzugefügt, obwohl die atomic Funktionen für 32-Bit Integer ab OpenCL 1.1 standardmäßig verfügbar sind. Hat aber leider auch nix gebracht. Hat jemand eine Idee, warum es auf dem Cluster nicht läuft, obwohl es auf meinem Laptop prima funktioniert???

mfg
Nichts für ungut, aber machmal kann es von Vorteil sein den Thread und die in diesem verlinkten zu lesen, bevor man postet.

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

Re: atomic_inc

Beitrag von bttf » 3. Feb 2012 14:03

Ist ja gut, ist ja gut!!! Bin etwas durcheinander geraten mit den OpenCL Reference Cards.... unglücklicherweise haben die Veranstalter ja auch die Reference Card zu Version 1.2 im Moodle verlinkt :? Hatte mir auch die jeweiligen zu den anderen Versionen angeguckt und einfach übersehen, dass bei 1.0 die Funktionen alle mit atom anfangen. In den höheren Versionen gibt es ja auch noch die atom Funktionen, nur dass sie da für die 64-Bit Integer benutzt werden. Da kommt man schon mal durcheinander :mrgreen:

Naja trotzdem danke für den Hinweis; jetzt lauft es :-)

Antworten

Zurück zu „Archiv“