Я пользуюсь многоядерным использованием C, PThreads и реализацией передачи последовательных процессов на платформе OpenVPX в Linux с помощью планировщика набора исправлений PREEMPT_RT. Все это приводит к почти 100% -ной загрузке ЦП в нескольких экземплярах ОС, при этом процессорное время не используется для обмена данными между процессорными картами в корпусе OpenVPX, а также очень низкая задержка. Также используется sFPDP для объединения нескольких шасси OpenVPX в один компьютер. Я не использую внутренний DMA Xeon, чтобы уменьшить нагрузку на память внутри ЦП (DMA по-прежнему использует пропускную способность памяти за счет ядер ЦП). Вместо этого мы оставляем данные на месте и передаем право собственности на них способом CSP (так мало похоже на философию библиотеки параллельных потоков данных .NET для задач).
1) Дорожная карта программного обеспечения - мы стремимся максимально использовать недвижимость и доступную мощность. Необходимо максимально использовать новейшее оборудование
2) Программная область - эффективно Научные вычисления
3) Что мы делаем с существующим кодом? Постоянно разбивая его на части и перераспределяя его части по потокам, чтобы каждое ядро работало максимально эффективно, не нарушая требования реального времени. Новое оборудование требует значительного переосмысления (более быстрые ядра могут сделать больше в данный момент времени, не желая, чтобы они использовались недостаточно). Не так плохо, как кажется - основные подпрограммы очень модульные, поэтому их легко собрать в куски размером с нить. Несмотря на то, что мы планировали отобрать контроль над потоками у Linux, нам пока не удалось извлечь из этого значительную дополнительную производительность. Linux довольно хорош в получении данных и кода в более или менее одном и том же месте.
4) В действительности уже есть - общее количество компьютеров уже составляет тысячи ядер
5) Параллельные вычисления очень важны - это система MISD.
Если это звучит как большая работа, так и есть. некоторые работы требуют огромных усилий, чтобы максимально использовать доступное оборудование и отказаться от всего, что на высоком уровне. Мы обнаруживаем, что общая производительность машины зависит от пропускной способности памяти ЦП, а не от скорости ядра ЦП, размера кеша L1 / L2 / L3.