Znacznie trudniej jest opracować naprawdę nikczemne wyścigi danych za pomocą jednego procesora. Chodzi mi o to, że możesz przerwać szarpanie między słowami, jeśli przerwiesz pojedynczy procesor, ale czy potrafisz budować egzotyczne scenariusze, w których nie ma pojedynczego przeplatania wątków, co byś chciał?
Ok, może podstępne błędy nie liczą się jako poprawne użycie ulepszeń wielu kodów. Jak się okazuje, wiele rdzeni nie jest w stanie zrobić, tak jak pojedynczy rdzeń nie ma czasu. Powód jest prosty. Jeśli spróbujesz uniknąć tych złych wyścigów danych, musisz mieć punkty synchronizacji w kodzie. Jeśli modelujesz swój kod jako sieć obliczeń, w której dane wejściowe muszą być kompletne i zsynchronizowane przed obliczeniem i wygenerowaniem danych wyjściowych, łatwo zauważyć, że pojedynczy procesor może po prostu pracować wzdłuż sieci, obliczając następny dostępny blok pracy .
W rzeczywistości, jeśli potrafisz wykazać, że Twój algorytm może zostać rozwiązany przez maszynę Turinga (czyli praktycznie każdy algorytm, na którym nam zależy), można udowodnić, że algorytm może być wykonany nie tylko przez pojedynczy rdzeń procesora, ale w rzeczywistości automat państwowy z bardzo długim kawałkiem taśmy do pamięci!
SZACHY detektor wyścig rzeczywiście wykorzystuje to, aby znaleźć przypadki wyścigu. Obsługuje wszystko pojedynczo i systematycznie bada wszystkie możliwe przeploty między wątkami, próbując znaleźć przypadki, w których test kończy się niepowodzeniem z powodu przypadku wyścigu. SZACHY zależą od tego, że możesz uruchomić dowolną aplikację wielowątkową na jednym rdzeniu.
Przypadki, w których potrzebujesz wielordzeniowości, pojawiają się, gdy zaczynasz rozciągać ograniczenia sprzętu. Oczywistym jest, że masz ograniczenia czasowe. Niektóre problemy z ograniczeniami czasu rzeczywistego są niemożliwe do wykonania z jednym rdzeniem, ponieważ po prostu nie są w stanie wystarczająco szybko sterować zegarem z jednym rdzeniem. Jest powód, dla którego procesory wspięły się do 4 GHz, a następnie nieco się uspokoiły, woląc więcej rdzeni przy niższych prędkościach.
Bardziej egzotyczna wersja tego ograniczenia czasowego znajduje się w systemach czasu rzeczywistego. W niektórych trudnych systemach czasu rzeczywistego obsługa przerwań jest tak wymagająca, że faktycznie trzeba wybrać procesor wielordzeniowy, który pozwala rozdzielić przerwania między rdzeniami lub napotkać ograniczenia czasowe.
Kolejny limit powstaje w przypadku magistrali danych. Rozważ Blue Gene / P jako przykład. JUGENE, szczególny superkomputer Blue Gene / P, ma 144 terabajty pamięci. Po prostu nie produkują komputerów z jednym procesorem, które mają dostęp do całej tej pamięci.