Zdravim,
algoritmus IDS taky neznam, takze me neni jasny vyznam ono prvniho cyklu, jak uz se tu psalo, protoze promenna i neni nikdy pouzita (nema tam byt treba data->xi nebo yi?) ale muze to byt jen preklep pri prepisovani.
Co se tyce OpenMP zkusil bych:
1) pohrajte si s klauzuli schedule - vyzkouset static, dynamic a rozhodne specifikovat velikost chunk_size treba zkusit 1000 pokud mate matici 6k x 6k, ve vychozim je chunk_size tusim 1 a pro tak velke matice by to byla obrovska degradace vykonu
2) konstanty a ukazatele dejte jako firstprivate, cili rozebrat strukturu RASTER a DATA na cleny a ulozit zvlast. Docilite toho, ze nebude dochazet k vybijeni cache pameti mezi jadry. Kazde jadro bude mit ve sve cache kopii ukazatele napr na data, ale pristup na data(i) uz bude sdileny, protoze ukazuji na stejne misto v pameti. Cili konstanty raster->points_count, data->_data urcite mohou byt firstprivate misto shared a i ukazatele raster->x, y taky
3) tusim ze aspon u gcc je doporuceno zapnout vysoky stupen optimalizaci -O3, zkouste obdobu pro vas kompilator
4) pro mereni casu pouzit omp_get_wtime()