LINUX.ORG.RU

История изменений

Исправление steemandlinux, (текущая версия) :

каким волшебным образом вы сможете сделать префетч СРАЗУ 8 пакетов, если у арма префетч команда один адрес выгребает?

Надо читать документацию и тестировать, а не теоретизировать теорию.

и что, что есть? какой с него профит-то? отрицательный? отож, отож…

и да, оффлоады далеко не на всех платформах присутствуют. и даже без использования оффлоадов какой-то двухголовый мипс спокойно пережевывает гигабит, да… на обычном айпитейблс, без волшебного дпдк.

Ну пакеты по 1500 байт любой проц потянет, там шина в основном загружена.

и да, оффлоады далеко не на всех платформах присутствуют. и даже без использования оффлоадов какой-то двухголовый мипс спокойно пережевывает гигабит, да… на обычном айпитейблс, без волшебного дпдк.

но если хочется странного - ну можете пытаться запиливать реализацию неон в дпдк, проверять и убеждаться что прирост отрицательный, а потом геморроиться с тем чтобы дпдк нормально заработал с дхцп/пппое и т.п. на роутере))) и в результате работать оно будет ровно так же как и какой-то туполинк со стоком)))

У нас беседа не про DPDK в роутере, а про оптимизацию на Rockchip.

А так как вы теоретик и на практике не можете написать симуляцию, то я сделаю за вас.

:~ $ gcc -O3 -march=armv8-a -mtune=cortex-a76 -DNDEBUG -fno-tree-vectorize -fno-tree-slp-vectorize scalar_auto.c -o sim
:~ $ gcc -O3 -march=armv8-a -mtune=cortex-a76 -DNDEBUG scalar_auto.c -o sim_neon
:~ $ ./sim
Total elements: 500000000  (chunk=8000000)
scalar: 1.144 s, 437.01 M elems/s, digest=16447876457047
:~ $ ./sim_neon 
Total elements: 500000000  (chunk=8000000)
scalar: 0.557 s, 897.07 M elems/s, digest=16447876457047

:~ $ objdump -d ./sim | egrep -n '\b(ld1|st1|ld2|st2|zip1|zip2|uzp1|uzp2|ext|tbl|tbx|add\s+v|sub\s+v|mul\s+v|eor\s+v|orr\s+v|and\s+v|f(add|mul|mla|madd))'
248: b30:       1f492048        fmadd   d8, d2, d9, d8
254: b48:       1f490862        fmadd   d2, d3, d9, d2
256: b50:       1e62294a        fadd    d10, d10, d2
:~ $ objdump -d ./sim_neon | egrep -n '\b(ld1|st1|ld2|st2|zip1|zip2|uzp1|uzp2|ext|tbl|tbx|add\s+v|sub\s+v|mul\s+v|eor\s+v|orr\s+v|and\s+v|f(add|mul|mla|madd))'
274:     b98:   1f48280a        fmadd   d10, d0, d8, d10
291:     bdc:   1f480020        fmadd   d0, d1, d8, d0
293:     be4:   1e602929        fadd    d9, d9, d0
479:     ecc:   4ee78610        add     v16.2d, v16.2d, v7.2d
480:     ed0:   4ef4844a        add     v10.2d, v2.2d, v20.2d
481:     ed4:   4ee5845a        add     v26.2d, v2.2d, v5.2d
482:     ed8:   4ee4845c        add     v28.2d, v2.2d, v4.2d
483:     edc:   4ef78443        add     v3.2d, v2.2d, v23.2d
484:     ee0:   4ef6845b        add     v27.2d, v2.2d, v22.2d
485:     ee4:   4ef58441        add     v1.2d, v2.2d, v21.2d
486:     ee8:   4ee6845d        add     v29.2d, v2.2d, v6.2d
487:     eec:   4e9c1b5a        uzp1    v26.4s, v26.4s, v28.4s
488:     ef0:   4e8a1821        uzp1    v1.4s, v1.4s, v10.4s
489:     ef4:   4e9d1842        uzp1    v2.4s, v2.4s, v29.4s
490:     ef8:   4e9b1863        uzp1    v3.4s, v3.4s, v27.4s
492:     f00:   4e5a1842        uzp1    v2.8h, v2.8h, v26.8h
493:     f04:   4e411863        uzp1    v3.8h, v3.8h, v1.8h
494:     f08:   4e608442        add     v2.8h, v2.8h, v0.8h
495:     f0c:   4e608463        add     v3.8h, v3.8h, v0.8h
496:     f10:   4e739c41        mul     v1.8h, v2.8h, v19.8h
497:     f14:   4e031842        uzp1    v2.16b, v2.16b, v3.16b
498:     f18:   4e739c63        mul     v3.8h, v3.8h, v19.8h
500:     f20:   6e321c21        eor     v1.16b, v1.16b, v18.16b
501:     f24:   6e321c63        eor     v3.16b, v3.16b, v18.16b
863:    1494:   4e318400        add     v0.16b, v0.16b, v17.16b
872:    14b8:   4e261e01        and     v1.16b, v16.16b, v6.16b
873:    14bc:   4e261ce0        and     v0.16b, v7.16b, v6.16b
874:    14c0:   4e261c44        and     v4.16b, v2.16b, v6.16b
875:    14c4:   4e261c65        and     v5.16b, v3.16b, v6.16b
881:    14dc:   4e455824        uzp2    v4.8h, v1.8h, v5.8h
882:    14e0:   4e451821        uzp1    v1.8h, v1.8h, v5.8h
883:    14e4:   4e435802        uzp2    v2.8h, v0.8h, v3.8h
884:    14e8:   4e431800        uzp1    v0.8h, v0.8h, v3.8h
885:    14ec:   4e618481        add     v1.8h, v4.8h, v1.8h
886:    14f0:   4e608440        add     v0.8h, v2.8h, v0.8h
903:    1534:   0e228421        add     v1.8b, v1.8b, v2.8b
910:    1550:   4e201c61        and     v1.16b, v3.16b, v0.16b
911:    1554:   4e201c40        and     v0.16b, v2.16b, v0.16b
914:    1560:   4e405822        uzp2    v2.8h, v1.8h, v0.8h
915:    1564:   4e401821        uzp1    v1.8h, v1.8h, v0.8h
916:    1568:   4e618440        add     v0.8h, v2.8h, v1.8h

Это без использования arm_neon.h

Исходная версия steemandlinux, :

каким волшебным образом вы сможете сделать префетч СРАЗУ 8 пакетов, если у арма префетч команда один адрес выгребает?

Надо читать документацию, а не теоретизировать теорию.

и что, что есть? какой с него профит-то? отрицательный? отож, отож…

и да, оффлоады далеко не на всех платформах присутствуют. и даже без использования оффлоадов какой-то двухголовый мипс спокойно пережевывает гигабит, да… на обычном айпитейблс, без волшебного дпдк.

Ну пакеты по 1500 байт любой проц потянет, там шина в основном загружена.

и да, оффлоады далеко не на всех платформах присутствуют. и даже без использования оффлоадов какой-то двухголовый мипс спокойно пережевывает гигабит, да… на обычном айпитейблс, без волшебного дпдк.

но если хочется странного - ну можете пытаться запиливать реализацию неон в дпдк, проверять и убеждаться что прирост отрицательный, а потом геморроиться с тем чтобы дпдк нормально заработал с дхцп/пппое и т.п. на роутере))) и в результате работать оно будет ровно так же как и какой-то туполинк со стоком)))

У нас беседа не про DPDK в роутере, а про оптимизицию на роутере.

А так как вы теоретик и на практике не можете написать симуляцию, то я сделаю за вас.

:~ $ gcc -O3 -march=armv8-a -mtune=cortex-a76 -DNDEBUG -fno-tree-vectorize -fno-tree-slp-vectorize scalar_auto.c -o sim
:~ $ gcc -O3 -march=armv8-a -mtune=cortex-a76 -DNDEBUG scalar_auto.c -o sim_neon
:~ $ ./sim
Total elements: 500000000  (chunk=8000000)
scalar: 1.144 s, 437.01 M elems/s, digest=16447876457047
:~ $ ./sim_neon 
Total elements: 500000000  (chunk=8000000)
scalar: 0.557 s, 897.07 M elems/s, digest=16447876457047

:~ $ objdump -d ./sim | egrep -n '\b(ld1|st1|ld2|st2|zip1|zip2|uzp1|uzp2|ext|tbl|tbx|add\s+v|sub\s+v|mul\s+v|eor\s+v|orr\s+v|and\s+v|f(add|mul|mla|madd))'
248: b30:       1f492048        fmadd   d8, d2, d9, d8
254: b48:       1f490862        fmadd   d2, d3, d9, d2
256: b50:       1e62294a        fadd    d10, d10, d2
:~ $ objdump -d ./sim_neon | egrep -n '\b(ld1|st1|ld2|st2|zip1|zip2|uzp1|uzp2|ext|tbl|tbx|add\s+v|sub\s+v|mul\s+v|eor\s+v|orr\s+v|and\s+v|f(add|mul|mla|madd))'
274:     b98:   1f48280a        fmadd   d10, d0, d8, d10
291:     bdc:   1f480020        fmadd   d0, d1, d8, d0
293:     be4:   1e602929        fadd    d9, d9, d0
479:     ecc:   4ee78610        add     v16.2d, v16.2d, v7.2d
480:     ed0:   4ef4844a        add     v10.2d, v2.2d, v20.2d
481:     ed4:   4ee5845a        add     v26.2d, v2.2d, v5.2d
482:     ed8:   4ee4845c        add     v28.2d, v2.2d, v4.2d
483:     edc:   4ef78443        add     v3.2d, v2.2d, v23.2d
484:     ee0:   4ef6845b        add     v27.2d, v2.2d, v22.2d
485:     ee4:   4ef58441        add     v1.2d, v2.2d, v21.2d
486:     ee8:   4ee6845d        add     v29.2d, v2.2d, v6.2d
487:     eec:   4e9c1b5a        uzp1    v26.4s, v26.4s, v28.4s
488:     ef0:   4e8a1821        uzp1    v1.4s, v1.4s, v10.4s
489:     ef4:   4e9d1842        uzp1    v2.4s, v2.4s, v29.4s
490:     ef8:   4e9b1863        uzp1    v3.4s, v3.4s, v27.4s
492:     f00:   4e5a1842        uzp1    v2.8h, v2.8h, v26.8h
493:     f04:   4e411863        uzp1    v3.8h, v3.8h, v1.8h
494:     f08:   4e608442        add     v2.8h, v2.8h, v0.8h
495:     f0c:   4e608463        add     v3.8h, v3.8h, v0.8h
496:     f10:   4e739c41        mul     v1.8h, v2.8h, v19.8h
497:     f14:   4e031842        uzp1    v2.16b, v2.16b, v3.16b
498:     f18:   4e739c63        mul     v3.8h, v3.8h, v19.8h
500:     f20:   6e321c21        eor     v1.16b, v1.16b, v18.16b
501:     f24:   6e321c63        eor     v3.16b, v3.16b, v18.16b
863:    1494:   4e318400        add     v0.16b, v0.16b, v17.16b
872:    14b8:   4e261e01        and     v1.16b, v16.16b, v6.16b
873:    14bc:   4e261ce0        and     v0.16b, v7.16b, v6.16b
874:    14c0:   4e261c44        and     v4.16b, v2.16b, v6.16b
875:    14c4:   4e261c65        and     v5.16b, v3.16b, v6.16b
881:    14dc:   4e455824        uzp2    v4.8h, v1.8h, v5.8h
882:    14e0:   4e451821        uzp1    v1.8h, v1.8h, v5.8h
883:    14e4:   4e435802        uzp2    v2.8h, v0.8h, v3.8h
884:    14e8:   4e431800        uzp1    v0.8h, v0.8h, v3.8h
885:    14ec:   4e618481        add     v1.8h, v4.8h, v1.8h
886:    14f0:   4e608440        add     v0.8h, v2.8h, v0.8h
903:    1534:   0e228421        add     v1.8b, v1.8b, v2.8b
910:    1550:   4e201c61        and     v1.16b, v3.16b, v0.16b
911:    1554:   4e201c40        and     v0.16b, v2.16b, v0.16b
914:    1560:   4e405822        uzp2    v2.8h, v1.8h, v0.8h
915:    1564:   4e401821        uzp1    v1.8h, v1.8h, v0.8h
916:    1568:   4e618440        add     v0.8h, v2.8h, v1.8h

Это без использования arm_neon.h