~ 19 Jan 2011, 10:11
Напоследък се получи нещо като benchmark седмица - разцъквах по два бенча едновременно :)
Най-сетне пуснах нова версия :) Сайтът е http://anrieff.net/ucbench2011.
Програмата продължава да симулира разбиване на парола на криптирано RAR-че, само че вече 8-12% по-бързо. И освен това има по-добра поддръжка на засичане на CPU скоростта. Изравнени са скоростите на Linux/OSX билдовете с Windows варианта. Има и една камара други малки фиксчета по сайта и програмката.
Бях набарал това въведение за подкарване на SDL върху Android устройства, но се оказа лош водач, загубих си няколко часа да следвам тази неподходяща насока:
1) Така компилираното SDL не работи на Android 2.2, липсват му /dev/tty0 и някои други устройства;
2) Не може да се генерира .apk, а трябва да се копира върху устройството и да се пуска ръчно от конзола (което на всичкото отгоре иска root-нат телефон);
Правилния подход е да си изтеглите последното SDL 1.3 от Mercurial-ското репозитори. Там има едно чудесно README.android, което описва всичко много добре. Не изисква писане на никаква Java :) - ползвате си добрите стари C/C++ сорсове, вкарвате ги в един "фалшив" Java+JNI проект, натраквате две команди и имате .apk. Лесно и просто.
Така първоначално fract-а тръгна на Android - ето една снимка:
По някое време дизасемблирах малко object код и видях каква колосална глупост съм направил - компилаторът е бил настроен да генерира soft-float, понеже няма гаранция, че ARM-чето ще е оборудвано с FPU. Е, по-новите телефони имат (даже имат VFP, което е еквивалент на x87, и NEON, което е еквивалент на SSE1). За да компилирате NDK-частта на проекта (т.е. C/C++ кода) с FPU трябва да смените малко архитектурата - ползвате следната build команда:
ndk-build TARGET_ARCH_ABI=armeabi-v7a
Препоръчително е и да добавите едно V=1 накрая за да видите какво точно се подава към компилатора. -mfpu=vfp е съществената опцийка към GCC.
Двата билда (non-FPU и FPU), както и инструкции как да подкарате бенчмарка на своя android телефон (или таблет) можете да видите тука: http://anrieff.net/pocketfract.
За който не разбира английски, да цъкне тук.
Малко резултати: HTC Desire / Android 2.2 изкарва ~5.5 кадъра в секунда. За сравнение, Asus Еее PC 901, със същия фракт и --no-sse, --no-mmx, --no-mmx2, --xres=400 и --cpus=1 дава към 11.7 FPS. Засега x86 печели :)