Краткая версия, «нет».
Эта статья является древней и даже не применима к современным системам x86, не говоря уже о ARM. Простое преобразование в целое число довольно быстро работает на ARMv7 (iPhone 3GS/4), хотя есть скромные данные о переходе данных из регистров VFP/NEON в регистры общего назначения. Однако, учитывая, что ваши данные float
, вероятно, исходят из вычислений, выполненных в регистрах VFP/NEON, вам придется заплатить за этот ход независимо от того, как вы выполняете преобразование.
Я не думаю, что это выгодный путь для оптимизации, если у вас нет следов, показывающих, что это является основным узким местом для вашей программы. Даже тогда самое быстрое преобразование - это преобразование, которого вы не делаете; вам почти всегда будет лучше найти алгоритмические способы устранения конверсий из вашей программы.
Если вы действительно необходимость оптимизации конверсии, смотрите в vcvt.i32.f32
инструкции, которая преобразует вектор из двух или четырех чисел с плавающей запятой к вектору из двух или четырех чисел без перемещения данных из NEON регистры (и, следовательно, без ущерба для стойла, о котором я упоминал). Конечно, вам нужно будет делать ваши последующие вычисления целого числа на модуле NEON, чтобы это было выгодной оптимизацией.
Вопрос: Что вы такое действительно пытается сделать? Почему, по-вашему, вам нужна более быстрая конвертация float-> int?
Пожалуйста, не называйте функцию, подобную этой 'Convert' в реальном коде: P –
@Billy: Я получаю вашу точку. Пол был бы лучше :-) –
назад в тот же день (примерно 15 лет назад) была проблема с производительностью на x86 при выполнении обычных типов (int) afloat, это было связано с положением float2int по умолчанию в регистрах fpu было слово и не рядом. Так что для быстрого кода в эту эпоху была написана специальная сборка. Любой код, взятый с этого времени, будет ожидать конвертации с плавающей точкой в целое число, чтобы использовать операцию над полом в сравнении с обычным раундом. Однако вы можете получить двойной удар с использованием функции floor, а затем cast to int вместо простого нажатия на int (от раунда до ближайшего). – Medran