Objective C достаточно быстро для программирования DSP/аудио

Я делал некоторые успехи с программированием аудио для iPhone. Теперь я делаю некоторую настройку производительности, пытаясь видеть, могу ли я сжать больше из этой небольшой машины. Выполняя Акулу, я вижу, что значительная часть моей мощности ЦП (16%) становится съеденной objc_msgSend. Я понимаю, что могу ускорить это несколько путем хранения указателей на функции (IMP) вместо того, чтобы назвать их использованием [объектное сообщение] нотация. Но если я собираюсь пройти всю эту проблему, интересно, мог ли я просто быть более обеспеченным использованием C++.

Какие-либо мысли об этом?

8
задан morgancodes 3 May 2010 в 21:35
поделиться

3 ответа

Проблема с Objective-C и такими функциями, как DSP, заключается не в скорости как таковой, а скорее в неопределенности того, когда возникнут неизбежные узкие места.

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

Большая часть обработки звука в Apple API выполняется на C или C ++ из-за необходимости сократить время, необходимое для выполнения кода. Однако в одном приложении легко смешивать Objective-C, C и C ++. Это позволяет вам выбрать лучший язык для текущей задачи.

4
ответ дан 5 December 2019 в 07:57
поделиться

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

Фреймворк Accelerate в OS X, например, представляет собой отличную высокопроизводительную библиотеку Objective C. Он использует только стандартные вызовы функций C99, и вы можете вызывать их из кода Objective C без какой-либо оболочки или косвенного обращения.

13
ответ дан 5 December 2019 в 07:57
поделиться

objc_msgSend - это просто утилита. Стоимость отправки сообщения - это не только стоимость отправки сообщения. Это стоимость выполнения всех действий, которые инициирует сообщение. (Точно так же, как истинная стоимость вызова функции - это ее всесторонняя стоимость, включая ввод/вывод, если он есть.)

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

Вы можете обнаружить, что вызываете их чаще, чем нужно.

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

1
ответ дан 5 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: