Какое самое быстрое преобразование int в float на iPhone? - PullRequest
0 голосов
/ 22 сентября 2009

Я конвертирую некоторые Int16 и Int32 в плавающие, а затем снова обратно.

Я просто использую прямой бросок, но делаю это 44100 раз в секунду (можно догадаться, зачем это? :))

Эффективен ли бросок? Можно ли сделать это быстрее?

P.S Компиляция для большого пальца отключена.

Ответы [ 2 ]

1 голос
/ 24 сентября 2009

Есть только два способа узнать.

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

2) Измерение производительности кода, сгенерированного компилятором, и других параметров.

Чтобы выполнить первое, установите для SDK значение «Устройство» и «Активная архитектура» для активации и выберите «Построение»> «Показать код сборки». Затем прочитайте сгенерированный компилятором код.

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

Если вы выполняете операцию много-много раз, Instruments хорошо покажет вам, сколько образцов процессора он берет. Но точка зрения Джима верна, и вы не должны отклонять ее как бесполезную: в операции, связанной с математикой над числами с плавающей запятой, продвижение типа компилятора - это минимум ваших забот. Чипы созданы для того, чтобы делать это за два или три цикла, и компиляторы обычно справляются с этим. Но обработка эффектов, которую вы делаете, вероятно, займет тысячи циклов. Акция будет потеряна в шуме.

1 голос
/ 22 сентября 2009

Эффективен ли бросок? В вашем случае, я думаю, это достаточно эффективно.

Можно ли сделать это быстрее? Может быть ... но стоит ли это усилий? Вы тестировали его и обнаружили проблему с производительностью из-за операций приведения?

Если вы делаете что-то математически нетривиальное с образцами данных с плавающей запятой, Я был бы очень удивлен, если бы броски оказались существенным узким местом!

...