Tein C++-ohjelman, joka käy läpi puurakennetta siten, että se alkaa normaalisti juuresta ja koittaa etsiä aina parhaimman mahdollisen jatkon optimaalisen reitin etsintään. Kuitenkin joissain tilanteissa ohjelma joutuu arpomaan mitä reittiä se lähtee tutkimaan, sillä ohjelma voi arvioida kaksi lapsisolmua samanarvoiseksi.
Kun optimaalisen ratkaisun laskeminen voi viedä viikkoja, niin mietin, että kumpi mahtaa olla nopeampaa. Jos käynnistän ohjelman, niin osaako C++-kääntäjä automaattisesti tutkia puun eri haaroja kahdella prosessorilla vai kannattaako käynnistää ohjelma kahteen kertaa, jolloin kumpikin prosessori on koko ajan hommissa?
Harva kääntäjä tekee tuollaista automaattisesti, ja etenkään C++:n kohdalla se ei kuulu asiaan. Kahteen kertaan käynnistäminen ei myöskään ole järkevää, koska silloinhan kone käy koko puun kahteen kertaan ja siis puolet työstä menee aivan hukkaan.
Jos pystyt valmiiksi jakamaan puun kahteen osaan, voit tietenkin käynnistää ohjelman kummallekin osalle. Helppo ratkaisu on vain vaihtaa tutkintajärjestys käänteiseksi ja tulostaa sen verran debug-tietoja, että näkee, milloin ohjelmat "kohtaavat".
Muussa tapauksessa joudut perehtymään säikeisiin, ja jos aihe on ennestään tuntematon, voi olla, että päädyt niiden kanssa ylimääräisten tarkistusten vuoksi hitaampaan tulokseen kuin ajamalla ohjelmaa vain yhdellä prosessorilla.
Tarkennuksena Metabolixin vastaukseen voisi mainita ettei ole täysin välttämätöntä käyttää säikeitä suoraan, vaan voi myös käynnistää uusia prosesseja (fork jne) haarakohdissa käsittelemään eri osia puusta.
Sinänsä ongelma kuullostaa sopivan mielenkiintoiselta harjoitukselta säikeiden käyttöön. Haluaisitko kertoa lisää puun rakenteesta/solmuista
En viitsi kertoa enempää puusta. Kokeilin ratkaista erästä putkapostia, mutta algoritmi on liian hidas.
Aihe on jo aika vanha, joten et voi enää vastata siihen.