2013-11-26 3 views
0

Это может быть очень конкретным, все еще пытаясь спросить:High Performance Audio Крекинг/Предотвратить ядро ​​CPU от downclocking

Я основатель Heat Синтезатор, программное обеспечение музыкальный синтезатор для Android. (https://play.google.com/store/apps/details?id=com.nilsschneider.heat.demo)

Это приложение генерирует аудиосигналы в реальном времени и для выполнения тяжелых математических вычислений.

Увидев разговор на Google I/O 2013 о «Высокопроизводительном аудио на Android» (http://www.youtube.com/watch?v=d3kfEeMZ65c), я был рад реализовать его, как они и предполагали, но у меня проблемы с треском.

У меня есть процессор, использующий одно ядро ​​около 50% на Nexus 7 (2012), похоже, до сих пор все в порядке. Блокировка сокращена до минимума, и большая часть кода выполняется без блокировки.

Использование приложения, которое называется Usemon, я вижу, что ядро, которое я использую для обработки, используется только 50% и даже отключается от ядра, потому что мое использование процессора недостаточно велико.

Однако эта скорость ядра меняет результат на треск аудио, потому что следующий звуковой блок не рассчитан достаточно быстро, потому что мое ядро ​​разомкнуто.

Есть ли способ предотвратить изменение активной частоты ядра?

ответ

3

FWIW, я рекомендую использовать systrace (docs, explanation, example) для такого анализа. На корневом устройстве вы можете включить теги «freq», которые показывают тактовые частоты различных компонентов. Лучше всего работает на Android 4.3 и более поздних версиях.

Хакерский аккумулятор - недружелюбный способ справиться с этим - запустить второй поток, который ничего не делает, кроме вращения, когда ваши вычисления выполняются. Теоретически это не должно работать (поскольку вы вращаетесь на другом ядре), но на практике это обычно выполняет свою работу. Убедитесь, что вы убедитесь, что устройство имеет несколько ядер (Runtime.getRuntime().availableProcessors() или эквивалент NDK), так как это на одноядерном устройстве было бы плохо.

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