Skocz do zawartości

Vista x86-64, wielowątkowość


Recommended Posts

Napisałem prostego bruteforce'a. Aby przyspieszyć działanie i wykorzystać możliwości obu rdzeni, podzieliłem liczenie na dwa wątki (parzyste/nieparzyste). Dało to wymierny efekt - zamiast 50% zużycia procka, mam teraz średnio 92%. Każdy wątek ma wydzielony kawałek pamięci, do którego swobodnie pisze i czyta. Jest tylko jeden bajt współdzielony - flaga określająca czy globalnie znaleziono rozwiązanie czy nie. Niestety program mi nie działał. Nie miałem jak go debugować, bo Olly pod x86-64 nie działa, fdbg wykrzacza się, a WinDbg nie umiem używać. Więc klasycznie napisałem sobie zrzucanie każdego pośredniego wyniku liczenia do pliku. I nagle bruteforce zaczął działać! Dodałem tylko linijkę z WriteFile. Kiedy usunę tą linijkę, na powrót bruteforce nie działa. Jak to jest możliwe? Linijka kodu z WriteFile, jest dla obliczeń niczym "nop". W żaden sposób nie zmienia toku liczenia. Czy ktoś z was się może spotkał z czymś takim? Dla mnie to jakieś niepojęte jest. Przychodzi mi do głowy tylko jeden scenariusz, choć jest on trochę naciągany. Jak wiadomo pisanie do pliku, czyli operacja I/O jest powolna i wtedy wątek/proces oddaje moc obliczeniową, bo i tak jej nie wykorzysta. Może jeden z wątków jest głodzony? Bez tego spowalniacza I/O, jeden wątek pożera całą moc obliczeniową, a drugi stoi w miejscu. Kiedy jednak dodać ten WriteFile, to zaborczy wątek siłą rzeczy musi oddać procesor i wtedy nie ma mowy o głodzeniu. Tylko, że wątki są równouprawnione i nawet przy jednym procesorze każdy powinien jakiś kwant czasu dostać. Przy dwóch prockach głodzenie jednego z wątków wydaje się absurdem, choć kto wie. Poza tym liczę skrycie, że nie o to chodzi - bo niby jak to ma być, mam bruteforce'a spowalniać? :P

Link do komentarza
Udostępnij na innych stronach

Ja natomiast podam inny scenariusz. Masz gdzieś problemy z pamięcią, jakiś buffor za mały, wewnętrzne struktury jakiejś listy nadpisane, wypisanie za/przed tablicę, albo coś w tym stylu. Tego typu błędy objawiają się dokładnie w sposób który podałeś. Przejrzyj wszystkie operacje na pointerach etc.

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...