Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
oakus
Založen: 27. 05. 2009 Příspěvky: 11
|
Zaslal: 17. prosinec 2010, 10:52:32 Předmět: OpenCL sdílení různých local proměnných? |
|
|
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 |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 17. prosinec 2010, 11:10:47 Předmět: |
|
|
__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 |
|
 |
oakus
Založen: 27. 05. 2009 Příspěvky: 11
|
Zaslal: 17. prosinec 2010, 11:18:06 Předmět: |
|
|
mam 2.2
jak teda nejak bezpecne udelat abych zjistil sum v ramci workgroupy? |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 17. prosinec 2010, 13:30:27 Předmět: |
|
|
atomicke operacie. taktiez si pozry redukcny algoritmus. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
Fila
Založen: 31. 07. 2007 Příspěvky: 853
|
|
Návrat nahoru |
|
 |
|
|
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