Почему компиляции занимают много времени? [закрытый]

В случае, если вы используете одну и ту же модель для всех процессов, рассмотрите возможность использования многопотокового вывода OV. Используя это, вы можете загрузить одну сеть и следующую, чтобы создать несколько запросов на вывод. Используя это, вы получите лучшую загрузку ЦП (если сравнивать с выполнением одного запроса на вывод по нескольким ядрам) и, как результат, лучшую пропускную способность.

Чтобы понять, как использовать многопотоковый вывод, взгляните на inference_engine / samples / python_samples / benchmark_app / benchmark sample

Также вы можете использовать образец выборки, чтобы выполнить поиск по сетке, чтобы найти оптимальный конфигурация (количество потоков, размер пакета).

16
задан emlai 31 December 2016 в 18:30
поделиться

6 ответов

Определенная проблема одного C++, которая заставляет его ужасно замедлиться, состоит в том, что, в отличие от почти любого другого языка, Вы не можете проанализировать его независимо от семантического анализа.

20
ответ дан 30 November 2019 в 15:12
поделиться

Компиляция является сложным процессом, который включает довольно много шагов:

  • Scanning/Lexing
  • Парсинг
  • Промежуточная генерация кода
  • Возможно Промежуточная оптимизация кода
  • Целевая Генерация машинного кода
  • Дополнительно Машинно-зависимая оптимизация кода

(Не принимающий во внимание соединение.)

Естественно, это займет время для более длинных программ.

15
ответ дан 30 November 2019 в 15:12
поделиться

Дизайн языка действительно имеет эффект на производительность компилятора. Компиляторы C++ обычно медленнее, чем компиляторы C#, который имеет непосредственное отношение к дизайну языка. (Это также зависит от реализатора компилятора, Anders Hejlsberg реализовал C# и является одним из лучших вокруг.)

Упрощенная структура "заголовочного файла" C++ способствует своей более медленной производительности, хотя предварительно скомпилированные заголовки могут часто помогать. C++ является намного более сложным языком, чем C, и компиляторы C поэтому обычно быстрее.

8
ответ дан 30 November 2019 в 15:12
поделиться

Предварительно скомпилированные заголовки являются путем быстрее, как был известен по крайней мере с 1988.

Обычная причина компилятора C или компилятора C++ для занимания много времени состоит в том, что он имеет к #include, предварительно обработайте, и затем закон огромное количество маркеров.

Как осуществление Вы могли бы узнать, сколько времени оно берет только для выполнения, cpp по типичному набору заголовочных файлов---затем имеют размеры, сколько времени оно берет к закону вывод.

gcc-O использует очень эффективный, но несколько медленный метод оптимизации, разработанный Chris Fraser и Jack Davidson. Большинство других оптимизаторов может быть медленным, потому что они включают повторенное повторение по довольно большим структурам данных.

10
ответ дан 30 November 2019 в 15:12
поделиться

Они берут, пока они берут, и это обычно зависит от того, сколько постороннего материала Вы вводите в свои единицы компиляции. Я хотел бы видеть Вас ручная компиляция их немного быстрее :-)

В первый раз, когда Вы компилируете файл, у Вас не должно быть заголовков вообще. Затем добавьте их, поскольку Вам нужны они (и проверка, когда Вы закончены, нужны ли Вам все еще они).

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

Некоторые компиляторы (IDE действительно) делают инкрементную компиляцию в фоновом режиме так, чтобы они были (почти) всегда близко к полностью скомпилированному.

4
ответ дан 30 November 2019 в 15:12
поделиться

Компиляция не должна занимать много времени: tcc компилирует ANSI c достаточно быстро, чтобы быть полезным как интерпретатор.

Некоторая вещь думать о:

  1. Сложность в сканировании и парсинге передач. По-видимому, требование долгих предвидений причинит боль, как будет контекстный (в противоположность контекстно-свободному) языки.
  2. Внутреннее представление. Создание и работа над большим и featureful AST займут время. По-видимому, необходимо использовать самое простое внутреннее представление, которое будет поддерживать опции, которые Вы хотите реализовать.
  3. Оптимизация. Оптимизация является суетливой. Необходимо проверить на большое количество различных условий. Вы, вероятно, хотите сделать несколько передач. Все это собирается занять время.
7
ответ дан 30 November 2019 в 15:12
поделиться