1
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;
}
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;
}