Urobil som vlaknitu app na vyhladavanie nejakeho zadanej kombinacie znakov - cize zadany je napriklad retazec "nnnnnnn" a program skusa vsetky kombinacie retazcov az dorazi na kombinaciu nnnnnnn, ohlasi zhodu retazcov a skonci.
Cele som to chcel urychlit vlaknami ale dostal som sa ku velmi podivnym problemom. Najprv som myslel ze problem je v mojom kode ale po odskusani v dalsich compileroch som na pochybach a zacinam mat pocit ze builer je bud divny, ale kompiluje nejakym svojskym sposobom o ktorom neviem a preto nedokazem kod lepsie optimalizovat.
Vlakna som sa rozhodol urobit tak, ze kazde bude skusat ine sekvenciu prveho znaku v retazci a na zvysne znaky bude skusat vsetky dostupne moznosti. To znamena ze... prve vlakno bude skusat retazce s prvym znakom od a-g, ostatne znaky bez obmedzeni. Druhe vlakno bude skusat retazce s prvym znakom h-n, dalsie znaky bez obmedzeni. Tretie vlakno o-t a stvrte u-z.
Vlakna volam cez winapi beginthreadex. Kazde ma napisanu svoju vlastnu funkciu aby som sa nemusel starat o thread-safe-ovost a zbytocne to cele spomalovat...
No a teraz sa dostavame ku tej mojej nejasnosti:
Builder 6 aj Builder 2007 vykazuju velmi rychle vysledky s 1 vlaknom, ovela lepsie ako Dev-Cpp 3.9.9.2. AVSAK ... ked zapojim do prace vlakna, Borland Builder 6 aj 2007 sa zacnu chovat ako keby vlakna nespracuvali paralelne ale ako vlakno po vlakne.
Vzorovy priklad: hladana sekvencia bude gzzzzzz - tzn. najde ju prve vlakno ako poslednu vyskusanu kombinaciu. Ked bude pracovat len toto jedno vlakno, uloha je v Builder 2007 zvladnuta za krasnych 24 sekund. Ked zapojim dalsie dve vlakna - cize by malo naraz bezat vlakno testujuce a-g, h-n, o-t, clovek by povedal ze pojdu paralelne, potrva to snad rovnako tych 24 sekund. Ale omyl - 74 sekund. Vie mi toto niekto vysvetlit ? Vsetko to este lepsie popisuje nasledujuca tabulka. Vysledky su uvedene v sekundach. Jedine DEV CPP sa chova presne tak, ako by som pri pouziti vlakien ocakaval. Bohuzial 3 vlakna v DEVKU neprekonavaju 1 v builderi 2007 a prave preto by som chcel vyuzit ich potencial.
Dalsia podivna vec - ci 1, ci 3 vlakna v Builderi pracuju, zeru cca 33% vykonu CPU (tj asi jedno jadro z mojho 3 jadroveho phenomu)
DEVko sa chova tak ako by som cakal, 1 vlakno=33%, 3 vlakna ho vyhecuju na plnych 100%.
Doplnam aj obrazkom nameranych vysledkov a kodom.
Kod: http://paste.jabbim.cz/4648
Obrazok v prilohe.
Budem velmi vdacny za zdielanie vasich poznatkov,skusenosti,rad i dohadov o tomto probleme...