Цена переключения управления между C ++ и Python - PullRequest
9 голосов
/ 30 декабря 2011

Я занимаюсь разработкой приложения на C ++, которое расширяется / может быть написано с помощью Python.Конечно, C ++ намного быстрее, чем Python, в целом, но означает ли это, что вы предпочитаете выполнять код C ++ над кодом Python как можно чаще?

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

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

Ответы [ 4 ]

7 голосов
/ 30 декабря 2011

Я не знаю, есть ли конкретное правило для этого, но общее правило, которому следуют многие:

  • Прототип на питоне. Это быстрее написать, и может быть легче читать / рассуждать.
  • Получив прототип, вы можете определить медленные части, которые должны быть написаны на c ++ (через профилирование).
  • В зависимости от домена вашего кода медленные биты обычно изолированы от типов кода «внутреннего цикла», поэтому число переключений между python и этим кодом должно быть относительно небольшим.
  • Если ваша программа достаточно быстрая, вы успешно избежали преждевременной оптимизации кода, слишком много написав на с ++.
2 голосов
/ 30 декабря 2011

Сохраняйте это простым и настраивайте производительность по мере необходимости.Основная причина встраивания интерпретатора в приложение C ++ состоит в том, чтобы позволить конфигурации / данным во время выполнения указать некоторую обработку - т.е. вы можете изменить сценарий без перекомпиляции программы C ++ - это ваше руководство для того, когда вызывать интерпретатор.При вызове какого-либо интерпретатора основными причинами обратного вызова в C ++ являются:

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

Для последней попробуйте сначала сценарий (предполагая, что его там так легко разработать), затемесли он медленный, определите, где и как может помочь какой-нибудь код C ++.Если / где производительность оказывается проблемой - в качестве общего руководства при вызове из C ++ интерпретатору или наоборот: попытайтесь собрать как можно больше работы, а затем выполнить вызов в другую систему.Если вы застряли, вернитесь к stackoverflow с конкретной проблемой и реальным кодом.

1 голос
/ 30 декабря 2011

Стоимость присутствует, но незначительна. Это потому, что вы, вероятно, проделали немалую работу по преобразованию типов данных высокого уровня Python в C ++ -совместимые представления. Конечно, это похоже на стоимость вызова одной функции C ++ из другой, есть некоторые накладные расходы. Правила, когда рекомендуется переходить с Python на C ++:

Функция с несколькими аргументами

Функция, которая выполняет большой объем обработки на небольшом количестве данных

Функция, которая вызывается настолько редко, насколько это возможно - объединять вызовы функций, если это возможно

0 голосов
/ 30 декабря 2011

Лучший показатель - это то, что вам нужно ...

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