Egyik alkalommal előadásra készülve írtam egy klasszikus rekurzív visszalépéses keresést a 8 királynőre. Az OpenMP elhozta a kényelmes párhuzamosságot, így kipróbáltam a párhuzamosítását a rekurzív lépésnek. Ez azt jelenti, hogy a függvény több szálat indít arra, hogy a következő lépéslehetőségeket kiértékelje, amik szintén több szálat indítanak, stb, stb. Józan paraszti ésszel erre gondolva azt várja az ember, hogy a sokezer szál óriási overheadet okoz, és meghal, vagy belassul az egész folyamat.
Ehhez képest a program gyorsult, kb 1.6x sebességnövekedést mértem egy 32 bites Atomon, ami nem is igazi kétmagos, csak hyperthreadinges. Két lehetséges magyarázatot tudok elképzelni
- Az OpenMP runtime okos, és nem csinál overheadet, hanem csak egy kis létszámú szálcsoportot enged egyszerre futni, a többit altatja. Ebben az esetben ez egy kellemes technikai trükk.
- A feladat jellegéből adódóan a jó választások lehetősége a rekurzió mélységével csökken, és ez egyfajta önszabályozást valósít meg az egyébként limitálatlan szálszámok esetében is. Ebben az esetben ez egy izgalmas jelenség egy feladatcsoportról.
Ha lesz komment, talán rakok ide forrást is, játszani.