2013-05-05 6 views
0

Давайте рассмотрим тривиальную программу, связанную с процессором, такую ​​как грубые принудительные простые числа, которые иногда могут сэкономить их на SD-карте.Усиление производительности с специально построенной ОС

Неэффективность в современных программах включает в себя интерпретацию и виртуальные машины и т. Д. Поэтому, в интересах скорости, давайте выбросим их и используем скомпилированный язык.

Теперь, когда у нас теперь есть код, который может работать непосредственно на процессоре, у нас все еще есть операционная система, которая будет мультиплексировать между различными процессами, запускать собственный код, управлять памятью и делать другие вещи, которые замедляют выполнение нашей программы.

Если бы мы писали нашу собственную операционную систему, которая только запускает нашу программу, какой фактор ускорения можно ожидать увидеть?
Я уверен, что может быть несколько переменных, поэтому, пожалуйста, уточните, если хотите.

+1

Как вы пришли к выводу, что виртуальные машины и интерпретируемые языки являются _инэффективными? – aqua

+0

@aqua Вообще говоря, им требуется больше времени для загрузки и увеличения накладных расходов. Ради этого вопроса вы можете использовать любой язык, поддерживающий аналогичную скорость обработки по сравнению с ASM. – user1277170

+0

Я думаю, что ваши предположения недействительны. Например, Python является интерпретируемым языком, но сам Python выигрывает от написания на C. VM также приходят со своими плюсами и минусами, которые неэффективны VM, является плохой заявочной заявкой IMO. – aqua

ответ

5

Посмотрите на товары от Return Infinity http://www.returninfinity.com/ (я не являюсь аффилированным лицом) и экспериментирую.

Моя собственная суперкомпьютерная демонстрация демонстрирует, что пропуская TLB (почти полностью) путем запуска модели с плоской памятью в сочетании с отсутствием переключения контекста между ядром и пользовательской правкой, может и ускоряет выполнение некоторых задач, особенно связанных с передачей сообщений в сети (уровень MAC, даже TCP, зачем беспокоиться), а также вычисление грубой силы (из-за отсутствия управления памятью).

При вычислении грубой силы, превышающем размер TLB или кеша, вы можете рассчитывать на прирост производительности примерно на 5-15% по сравнению с необходимостью выполнять поиск таблицы перевода на основе RAM - штраф в том, что каждая ошибка программного обеспечения полностью не защищена (вы можете заблокировать некоторые страницы статически с монолитной связью, ты).

При работе с высокой пропускной способностью, особенно с большим количеством сообщений, вы можете легко получить даже 500% -ное ускорение, перейдя в пространство ядра, либо полностью удалив (многозадачную) ОС, либо загрузив приложение как драйвер ядра, обойдя всю абстракцию. Мы смогли нажать латентность сети на пики MAC-уровня от 18us до 1.3us.

При вычислении, которое подходит для кеша L1, я ожидаю минимального улучшения (около 1%).

Все ли имеет значение? Да и нет. Если ваши затраты на оборудование значительно превышают ваши инженерные затраты, и вы сделали все алгоритмические улучшения, о которых вы можете подумать (еще лучше, доказали, что вычисление сделано именно для вычисления, необходимого для результата!) - это может дать значимые преимущества для производительности. Дополнительный 3% (общий средний успех) на суперкомпьютере стоимостью около 8 млн. Долл. США в год, не включая амортизацию оборудования, составляет 24 тыс. Долл. США/год. Достаточно заплатить инженеру за месяц, чтобы оптимизировать наиболее часто выполняемую задачу :).

+0

Я новичок в этом; что такое TLB? –

+1

TLB = Перевод буфера ожидания. Специальная таблица используется для сопоставления адресов виртуальной памяти с адресами в физической памяти. TLB кэширует часть этой таблицы, поэтому сопоставление адресов памяти от виртуального до физического может выполняться быстро и эффективно. – Virtlink

+0

@Virtlink: Спасибо. –

1

Предполагая, что у вас работает достойная машина, и ОС не делает ничего другого: не большой фактор, я ожидал бы менее 10% улучшения.

Просто «холостой ход» ОС не требует (не должен) большей вычислительной мощности процессора. Если это так, вам нужна лучшая машина, лучшая ОС, формат или какая-то их комбинация.

Если, с другой стороны, вы используете кучу других ресурсоемких вещей, очевидно, ожидайте, что это может быть вызвано большим количеством всего , а не, управляющего этими вещами.

Если вы не являетесь суперпользователем, вы можете быть удивлены, обнаружив, что в фоновом режиме существует тонна процессов (не ОС), они, скорее всего, возьмут процессорную мощность процессора, что ОС ,

Немного от темы, но связанные с этим, имейте в виду, что если вы используете 8 ядер, вы можете в совершенном мире ускорить процесс на 8x многопоточным.

Ожидайте способ более совершенное решение известных проблем и более эффективное использование структур данных и алгоритмов и, в меньшей степени, выбор языка и микрооптимизации.

Из моего опыта:

Не самый научный или доверительным результат, но большую часть времени, когда я открыть диспетчер задач на Windows, все процессы ОС ниже 1% от CPU.

0

Ответ на суперкомпьютер и ответ на несколько ядер, так что вот ответ GPGPU.

Когда суперкомпьютер переполнен, но многоядерный процессор находится под напряжением, и ваш алгоритм разумно распараллеливается, подумайте о его адаптации к GPGPU. Многие из преимуществ суперкомпьютерного решения доступны в сокращенной форме по сниженной цене, выполняя задачи с интенсивным использованием ЦП на GPGPU.

Here является ссылка на анализ я исполняла в прошлом году по реализации и настройки, грубой силы решение задачи коммивояжера с использованием возможностей в вычислений 2,0 NVIDIA видеокарты, CUDAfy и C#.

Смежные вопросы