ARM Cortex A8 Benchmarks: kimdir menga bu raqamlarni tushunishga yordam bera oladimi?

Men Android-da bir nechta real vaqtda DSP algoritmlarini yozish ustida ishlayapman, shuning uchun hamma narsani iloji boricha optimallashtirish va matematikani maksimal darajada engillashtirish uchun ARM-ni to'g'ridan-to'g'ri Assambleyada dasturlashga qaror qildim. Avvaliga men hech qanday ma'noga ega bo'lmagan tezlik ko'rsatkichlarini oldim, shuning uchun men quvur liniyasining xavf-xatarlari, ikki tomonlama muammolar imkoniyatlari va boshqalar haqida o'qishni boshladim. Olayotgan raqamlarim meni haligacha hayratda qoldirdi, shuning uchun kimdir men olgan narsamni nima uchun olishimga oydinlik kiritishi mumkin degan umidda ularni shu yerda joylashtiryapman. Xususan, NEON har bir operatsiyani aynan bitta siklda bajarishga daʼvo qilsa ham, har xil maʼlumotlar turlari boʻyicha hisob-kitoblarni bajarish uchun nima uchun har xil vaqt talab qilishi meni qiziqtiradi. Mening topilmalarim quyidagicha.

Men taqqoslash uchun juda oddiy halqadan foydalanmoqdaman va uni 2 000 000 iteratsiya uchun ishlataman. Mana mening funksiyam:

hzrd_test:

    @use received argument an number of iterations in a loop
    mov r3 , r0

    @come up with some simple values
    mov r0, #1
    mov r1, #2

    @Initialize some NEON registers (Q0-Q11)
    vmov.32 d0, r0, r1
    vmov.32 d1, r0, r1
    vmov.32 d2, r0, r1

    ...

    vmov.32 d21, r0, r1
    vmov.32 d22, r0, r1
    vmov.32 d23, r0, r1

hzrd_loop:

    @do some math
    vadd.s32 q0, q0, q1
    vadd.s32 q1, q0, q1
    vadd.s32 q2, q0, q1
    vadd.s32 q3, q0, q1
    vadd.s32 q4, q0, q1
    vadd.s32 q5, q0, q1
    vadd.s32 q6, q0, q1
    vadd.s32 q7, q0, q1
    vadd.s32 q8, q0, q1
    vadd.s32 q9, q0,s q1
    vadd.s32 q10, q0, q1
    vadd.s32 q11, q0, q1

    @decrement loop counter, branch to loop again or return
    subs r3, r3, #1
    bne hzrd_loop

    @return
    mov r0, r3
    mov pc, lr

Vektor qo'shish (vadd) va imzolangan 32-bit int (s32) sifatida ko'rsatilgan hisoblash operatsiyasi va ma'lumotlar turiga e'tibor bering. Ushbu operatsiya ma'lum vaqt ichida yakunlanadi (quyidagi natijalar jadvaliga qarang). ushbu ARM Cortex-A8 hujjati va keyingi sahifalarga ko'ra, deyarli barchasi NEON-da elementar arifmetik operatsiya bir tsiklda bajarilishi kerak, ammo men buni olaman:

vmul.f32 ~62ms
vmul.u32 ~125ms
vmul.s32 ~125ms

vadd.f32 ~63ms
vadd.u32 ~29ms
vadd.s32 ~30ms

Men ularni yuqoridagi tsikldagi hamma narsaning operatsiyalari va ma'lumotlar turlarini almashtirish orqali qilaman. vadd.u32 vadd.f32 dan ikki baravar tezroq va vmul.f32 vmul.u32 dan ikki barobar tezroq bo'lishiga sabab bormi?

Salom! =)


person Phonon    schedule 08.11.2011    source manba


Javoblar (2)


Vau, natijalaringiz juda aniq:

  • 32 bitli Q ko'paytmasi 4 tsiklni, float esa 2 tani oladi.
  • 32 bitli Q qo'shimchasi 1 tsiklni, float esa 2 tani oladi.

Yaxshi tajriba.

Ehtimol, siz allaqachon bilasiz, lekin NEON uchun kodlashda ehtiyot bo'ling:

  • NEON og'ir ishlarni bajarayotganda ARM bilan xotiraga kirmang
  • VFP ko'rsatmalarini NEON bilan aralashtirmang. (Umumiy bo'lganlardan tashqari)
  • S registrlariga kirmang.
  • NEON registrlaridan ARM registrlariga o'tkazmang

Yuqoridagilarning barchasi katta hiqichoqlarga olib keladi.

Omad!

PS: Men A9 uchun optimallashtirishni afzal ko'raman (bir oz boshqacha tsikl vaqtlari), chunki deyarli barcha yangi qurilmalar A9 bilan birga keladi. Va ARM-dan A9 vaqt jadvali ancha o'qilishi mumkin. :-)

person Jake 'Alquimista' LEE    schedule 08.11.2011
comment
Tsikllarni hisoblash usulidan kelib chiqib, mening ma'lumotlarim aniq mantiqiy, lekin siz ularni qanday hisoblaysiz? Men hujjatlarni to'g'ri o'qimayapman yoki biz turli hujjatlarni o'qiyapmiz. - person Phonon; 09.11.2011
comment
Biz aslida xuddi shunday o'qiymiz. Hisoblash shart emas. Bu faqat tsikllar ostidagi jadvalda. ARM bizga haddan tashqari ko'p narsani ko'rsatishga harakat qilmoqda va bizni chalkashtirib yuborishga muvaffaq bo'ldi. VMUL(butun, normal) ga qarang, Qd, Qm, Qn dan 1 dan 4 gacha ko'rasiz. Bu 4 tsiklni oladi degan ma'noni anglatadi va ularning o'ng tomonida bajarish siklining BU bosqichida nima sodir bo'layotganini ko'rishingiz mumkin. (src operandlari quvur liniyasining qaysi bosqichida kutilmoqda va dst operandlari qaysi bosqichga qo'yiladi) - person Jake 'Alquimista' LEE; 09.11.2011
comment
Men buni shunday qo'ygan bo'lardim: 4, Qd (5,3), Qn (4,2), Qm (3,1). Lekin bu ARM. - person Jake 'Alquimista' LEE; 09.11.2011
comment
Rahmat! = ) Men haqiqatan ham hujjatdan dovdirab qoldim. - person Phonon; 09.11.2011

Men taxmin qilmoqchiman (chunki menda hujjat havolalari mavjud emas), siz quvur liniyasi bilan bog'liq muammolarga duch kelyapsiz. Bilaman, endi VFPU deb ataladigan FPU - err protsessoringiz tsiklingizning butun sonli matematik qismini bajarish uchun ishlatadigan quvur liniyasi uzunligidan farq qiladi. Men ko'ramanki, ikkinchi arifmetik operatsiya birinchisiga bog'liq bo'lib, u quvur liniyasini to'xtatib qo'yadi va ehtimol siz ko'rgan farqlarni ochib beradi.

Bundan tashqari, men ko'paytirish ints uchun 1 tsiklli ko'rsatma emas, balki 2-qiymatning msb ga bog'liq bo'lgan 2-5 tsikli - bu farqni tushuntiradigan kichik raqam tufayli bu erda 2 tsikl. Buni tekshirish uchun kattaroq koʻpaytiruvchi raqamdan boshlang va kattaroq oʻlchamda uning sekinlashishini tekshiring.

Bundan tashqari, bu imkoniyatni yo'q qilish uchun kodingiz 1 kesh sahifasiga to'g'ri kelishini tasdiqlayman.

Bundan tashqari, yuqoridagi ikkilamchi ijro bo'limini ko'rib chiqaman, chunki u erda ishlar o'zaro bog'liq bo'lganda ham sodir bo'ladigan quvur liniyasining barcha turlari mavjud.

person Michael Dorgan    schedule 08.11.2011
comment
Cortex-A8 TRM (PDF) to'g'ri, lekin menimcha, siz ba'zi ko'rsatmalar 1 tsikldan ko'proq vaqtni olgani haqida haqsiz. - person user786653; 08.11.2011
comment
Maykl, ko'rsatmalar keshining bir sahifasi qanchalik katta? Men bunga hech qachon e'tibor bermaganman. Bilish yaxshi bo'lardi. - person Jake 'Alquimista' LEE; 09.11.2011
comment
Rostini aytsam, ishonchim komil emas. Bu har bir dasturga qarab farq qiladi - siz o'zingizning qurilmangizni qidirishingiz kerak bo'lgan narsa. Yaxshi javob BTW - Sizning javobingiz katta farqlarni tushuntiradi, meniki esa kichikroq farqlarni tushuntirishi mumkin. - person Michael Dorgan; 09.11.2011