Гораздо сложнее разработать действительно гнусные гонки данных с одним процессором. Я имею в виду, конечно, вы можете выполнить разрыв между словами, если прервете один процессор, но можете ли вы создать экзотические сценарии, где нет единственного чередования потоков, которое делает то, что вы хотите?
Ладно, возможно, коварные ошибки не считаются правильным использованием нескольких кодов. Как оказалось, многоядерный процессор не может сделать то, что одно ядро не может дать за это время. Причина проста. Если вы пытаетесь избежать этих злых гонок данных, в вашем коде должны быть точки синхронизации. Если вы моделируете свой код как решетку вычислений, в которой входные данные должны быть завершены и синхронизированы, прежде чем вы сможете рассчитывать и производить выходные данные, легко заметить, что один ЦП может просто продвигаться по решетке, вычисляя следующий доступный блок работы ,
Фактически, если вы можете продемонстрировать, что ваш алгоритм может быть решен машиной Тьюринга (а это практически каждый алгоритм, который нас интересует), то можно доказать, что алгоритм может быть реализован не только одним ядром ЦП, но на самом деле конечный автомат с очень длинным куском ленты на память!
ШАХМАТЫ детектор гонки на самом деле использует это , чтобы найти случаи гонки. Он выполняет все однопоточные и систематически исследует все возможные чередования между потоками, пытаясь найти случаи, когда тест не пройден из-за гонки. CHESS зависит от того, что вы можете запустить любое многопоточное приложение на одном ядре.
Случаи, когда вам нужен многоядерный, появляются, когда вы начинаете расширять пределы аппаратного обеспечения. Очевидный - когда у вас есть ограничения по времени. Некоторые проблемы с ограничениями в реальном времени невозможно сделать с одним ядром, потому что они просто не могут управлять часами одного ядра достаточно быстро. Есть причина, по которой процессоры поднялись до 4 ГГц, а затем немного успокоились, предпочитая больше ядер на более низких скоростях.
Более экзотическая версия этого временного ограничения в системах реального времени. В некоторых жестких системах реального времени обслуживание прерываний является настолько сложным, что вам фактически приходится выбирать многоядерный процессор, который позволяет распределять прерывания по ядрам, или вы сталкиваетесь с ограничениями по времени.
Другое ограничение возникает с шинами данных. Рассмотрим Blue Gene / P в качестве примера. JUGENE, конкретный суперкомпьютер Blue Gene / P, имеет 144 терабайта памяти. Они просто не делают однопроцессорные компьютеры, которые могут получить доступ ко всей этой памяти.