Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - aladarus

Stran: [1]
1
Vývoj / Re: OpenMP na multicore spomaľuje
« kdy: 26. 07. 2010, 16:28:52 »
Vdaka, vdaka, vdaka!

Pomohlo to.
1. a hlavny problem bol (medzi klavesnicou a stolickou) v merani casu. Robil som to zle!!! ::) Mojim sposobom sa spocitavali casy na jednotlivych vlaknach a vysledkom bola suma casov (zrejme). Po uprave kodu je zobrazovany cas vypoctu optimisticky. Vypocet na dual-core dosahuje dvojnasobne zrychlenie a na i7 viac ako 7 nasobne zrychlenie.
2. Pouzivam gcc kompilator a zapnutie optimalizacia -O3 znacne zrychlilo vypocty.
3. Nastavenie chunk_size tiez zrychlilo vypocet. Staci nastavit na 500 (experimentalne overene).
4. Nastavenie direktivy schedule nemalo velky vplyv.
5. Jedine co som nedokazal, bolo rozobrat strukturu RASTER (DATA) vo firstprivate/shared. Pri zadani raster->x (a pod.) kompilator vyhadzuje chybu. Asi aj tu robim chybu.

2
Vývoj / Re: OpenMP na multicore spomaľuje
« kdy: 24. 07. 2010, 06:49:50 »
Funkcia IDS sa volá len raz. Premenná i v nej nadobúda hodnoty podľa rozmeru počítaného rastra a to je minimálne 2000 x 2000 bodov. Pri výpočte sa pohybujeme rádovo okolo 6000 x 6000 bodov a viac.

Ad. koso P.P.S.: 2x toľko sa to zobrazí po skončení programu. Reálne neviem posúdiť.  :-\

3
Vývoj / OpenMP na multicore spomaľuje
« kdy: 23. 07. 2010, 13:59:15 »
Snažím sa zrýchliť výpočet IDS algoritmu na viacjadrovom procesore pomocou OpenMP. Ide o jednoduchý cyklus. Avšak čas výpočtu s použitím OpenMP na paralelizáciu výpočtu sa  približne zdvojnásobí oproti výpočtu bez použitia OpenMP na tom istom procesore.
Kde je chyba?
Prikladám zdrojový kód:
RASTER* IDS(RASTER* raster, DATA* data)
{
   int i,j;
   float final_time;
   float sum_up; //citatel vo vzorci
   float sum_down; //menovatel vo vzorci
   float distance;
   clock_t start = clock();
   #pragma omp parallel for default(none) shared(raster,data) private(j, sum_up, sum_down, distance,th_id)
   for(i = 0; i < raster->points_count; i++)
   {
      sum_up = 0;
      sum_down = 0;
      for(j =0; j < data->_data; j++)
      {
         distance = SQR(raster->x - data->x[j]) + SQR(raster->y - data->y[j]);
         sum_up += (data->value[j]/distance);
         sum_down += (1.00/distance);
      }
      
      raster->value = sum_up/sum_down;   
   }
   
   final_time = ((double)clock() - start) / CLOCKS_PER_SEC;   
   printf("Time elapsed: %f\n", final_time);
   return raster;
}

Stran: [1]