Портирование кода на мобильные
     устройства iOS/Android
        Константин Платов
ARM
• Лицензирование ядра
• System On Chip
• RISC архитектура
Лицензирование


         Intel Xscale:
         • ARMv5TE
         • Улучшенный кэш
         • 40-битный аккумулятор
         • SIMD “Wireless MMX”
             HTC Universal
System On Chip
• Одно или более ядер
• Акселераторы
• Специализированные сопроцессоры
• Память
• Интерфейсы ввода/вывода
• Обвязка (осцилляторы, таймеры)


                                    TI OMAP
RISC
•   Load/Store архитектура
•   16 регистров по 32 бита
•   Фиксированные команды
•   Мощные адресные команды
•   Однотактовое выполнение
•   Условное выполнение
•   Быстрый сдвиг
Семейство ARM
Ядро          ARM9    ARM9E    ARM10   ARM11   Cortex   Cortex-A50
Архитектура   ARMv4T ARMv5TE       ARMv6       ARMv7     ARMv8
Особенность            DSP         SIMD        NEON       64-bit
Thumb         Thumb   Thumb        Thumb       Thumb2    Thumb2
Кроссплатформенность
Принцип написания кода

• Единая типизация
• Алгоритмы
  – Системные вызовы
  – Базовые операции
• Аппаратно-зависимые части
Единая типизация
Единая типизация
Алгоритмы. Системные вызовы.



                       Пример: XDAIS
Алгоритмы. Базовые операции
Аппаратно-зависимые части
• Сильно зависят от API фреймворков
• Часто используют не Native средства
• Используют менее переносимые языки
Базовые врапперы
•   Системный лог
•   Менеджер памяти
•   Мьютексы / Атомарные операции
•   Менеджер потоков
•   Системная информация
•   Трасинг / Логирование
•   Работа с файлами
•   Средства профилирования
Дополнительные врапперы
•   Сокеты/работы с сетью
•   Аудиоустройства
•   Видеоустройства
•   Устройство ввода
Преимущество разделения кода
 Аппаратная часть    Базовые   Алгоритмическая
                    операции        часть
     System


                    APIs
      Video                        Engine


      Audio
Пример: uint64 >> n




Чему равны res63 и res64?
Пример: uint64 >> n
OS            Windows   OSX            OSX            iOS
Компилятор    Cl        clang          clang          clang
Архитектура   I386      I386           x86_64         arm
Разрядность   32 бита   32 бита        64 бита        32 бита
res63         0x0       0x0            0x0            0x0
res64         0x0       0x1234…45678   0x1234…45678   0x0
Пример: uint64 >> n
На что следует обратить внимание?
•   Память данных/кода
•   Выравнивание данных
•   Оптимизация под процессор
•   Плавающая точка
•   Целочисленное деление
•   Многопоточность и MainThread
Итог
К о н с та н т и н П л ато в
 п р о г р а м м и с т, A g e n t / V o I P
   k.platov@corp.mail.ru

Platov