Hard and soft float

У складі багатьох сучасних процесорів існує модуль операцій з плаваючою комою (або з плаваючою точкою; англ. Floating point unit (FPU)) - частина процесора для виконання широкого спектру математичних операцій над числами. Якщо на етапі компіляції програми вказати компілятору, що у процесора, під який збирається програма, є FPU, то програма зможе використовувати його безпосередньо, що позитивно позначається на продуктивності. Це називається складанням під Hard float. Так само існують процесори, у яких такий блок відсутній, тому програми скомпільовані з використанням інструкцій FPU на них працювати не будуть. Щоб програма працювала на будь-яких процесорах, незалежно від наявності в них FPU, необхідно заборонити компілятору використовувати інструкції FPU для збірки програми, навіть якщо він є. Це серйозно знижує швидкість роботи програми, але дає можливість компілювати програму під більш широкий спектр обладнання. Така збірка називається soft: повна програмна емуляція FPU (Full software floating point). Однак, якщо спробувати запустити програму скомпільовану під soft на процесорі з FPU, система зібрана з soft point все ж буде використовувати даний модуль, однак витрати на непряме використання блоку виходять досить істотними. Для середньостатистичного додатки вони становлять від 5 до 40%, а якщо додаток активно використовує обчислення з плаваючою точкою, то і до 200%!

Підведемо підсумки.В системі зібраної з Hardfp працюють тільки додатки зібрані для роботи на процесорах з FPU, зате швидко. В системі зібраної з Softfp працюють додатки зібрані для роботи на будь-яких процесорах (soft), незалежно від наявності FPU, зате повільніше. Додатки зібрані з Hardfp на системі зібраної з softfp не працюють.

Як відрізнити

readelf -a / usr / bin / ar

Схожі статті