.[ ČeskéHry.cz ].
OpenCL sdílení různých local proměnných?

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
oakus



Založen: 27. 05. 2009
Příspěvky: 11

PříspěvekZaslal: 17. prosinec 2010, 10:52:32    Předmět: OpenCL sdílení různých local proměnných? Odpovědět s citátem

Narazil jsem jedno zvláštní chování v OpenCL, nejspíš za tím bude nějaká základní věc, kterou mám přímo před očima, ale nemůžu na to přijít. Jedná se o to, že když mám kernel funkci
kód:
__kernel void test()
{
    __local float var1;
    __local float var2;
   
    int x = get_local_id(0);
    var2 = 0;
    var1 += x;
   
    barrier(CLK_LOCAL_MEM_FENCE);
    printf("x: %d var1: %f var2: %f \n", x, var1, var2);
}


kterou spustím jednoduše
kód:
 
        cl::Kernel kernel_test(program, "test");
        queue.enqueueNDRangeKernel(
            kernel_test,
            cl::NullRange,
            cl::NDRange(10),
            cl::NDRange(10),
            NULL,
            &event);
 
        event.wait();
 


tak dostanu výstup
kód:
 
x: 0 var1: 9.000000 var2: 9.000000
x: 1 var1: 9.000000 var2: 9.000000
x: 2 var1: 9.000000 var2: 9.000000
x: 3 var1: 9.000000 var2: 9.000000
x: 4 var1: 9.000000 var2: 9.000000
x: 5 var1: 9.000000 var2: 9.000000
x: 6 var1: 9.000000 var2: 9.000000
x: 7 var1: 9.000000 var2: 9.000000
x: 8 var1: 9.000000 var2: 9.000000
x: 9 var1: 9.000000 var2: 9.000000
 


což bych nečekal, protože mám za to, že jsem spustil jednu work-group s 10 work-itemy, co by měly sdílet lokální paměť a tedy by se do var1 měl akumulovat součet x.
což bych pak ještě vůbec nečekal je, že se obsah var2 bude totožný s obsahem var1. WTF? proměnné jsou nějak propojeny nebo co? Nechápu. Poradíte?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 17. prosinec 2010, 11:10:47    Předmět: Odpovědět s citátem

__local su zdielane v celej workgroupe. a ty tam mas pri var1 race condition kedy ti pristupuje vyrtualne 10 vlakien k jednej premennej. takze kazde vlakno najpr nacita hodnotu var1 potom pricita x a nakoniec zapise naspet. takze je to nahoda ktora hodnota tam bude. proste pri _local ale aj __global treba zabezpecit aby si workitemy neliezli navzajom do pamete.

ak to ale pustats na CPU tak to byva jedna workgroupa serializovana takze idu poporade.

to ze var2 je tiez 9 bude nejaky bug. ked kazda workitem zapisuje rovnaku hodnotu je bezpecne.

a ktoru verziu SDK mas? 2.2 ci 2.3?
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
oakus



Založen: 27. 05. 2009
Příspěvky: 11

PříspěvekZaslal: 17. prosinec 2010, 11:18:06    Předmět: Odpovědět s citátem

mam 2.2

jak teda nejak bezpecne udelat abych zjistil sum v ramci workgroupy?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 17. prosinec 2010, 13:30:27    Předmět: Odpovědět s citátem

atomicke operacie. taktiez si pozry redukcny algoritmus.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Fila



Založen: 31. 07. 2007
Příspěvky: 853

PříspěvekZaslal: 21. prosinec 2010, 14:32:40    Předmět: Odpovědět s citátem

Dotaz vyresen, flame presunut sem: http://www.ceske-hry.cz/forum/viewtopic.php?t=2529
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna