2024. április 25., csütörtök

Gyorskeresés

RPi 1 B vs. RPi 2 B gyorsulás

Írta: | Kulcsszavak: Raspberry Pi . ARM . ASM . USADA8

[ ÚJ BEJEGYZÉS ]

Van egy C progim, amely egy home projektem része, és most hozzájutottam egy RPi 2-höz, gondoltam lemérem mennyivel gyorsabb. A táblázatban idő van másodpercekben.

ASM:

Threads | RPi | RPi 2 | speedup
---------------------------------
1 | 29.24 | 7.65 | 3.82
2 | 28.87 | 3.91 | 7.38
3 | 28.91 | 2.66 | 10.87
4 | 28.92 | 2.03 | 14.24
=================================

PLAIN:

Threads | RPi | RPi 2 | speedup
---------------------------------
1 | 46.43 | 20.80 | 2.23
2 | 46.01 | 10.55 | 4.36
3 | 45.96 | 7.08 | 6.49
4 | 45.83 | 5.36 | 8.55
=================================

A felső kézi ASM /USADA8/ kódot tartalmaz, az alsó meg ugyanaz a funkcionalitás, csak C-ben. Most jön a WTF: 4 szálon a gyorsulás 14-szeres, és egy szálon relatíve a 3,82 még durvább. Többször lemértem, nem hiba. A GCC ugyan más verziójú, de ez nem számít, mert a Pi 1 által fordított kód ugyanolyan gyorsan fut le, mintha a Pi 2-őn fordítottam volna. Valakinek van ötlete?

Hozzászólások

(#1) ivana


ivana
Ármester

Mi a kód? :) Már mint a C...

[ Szerkesztve ]

(#2) weiss válasza ivana (#1) üzenetére


weiss
addikt

Az érdemi rész:

#if _M_IX86_FP == 2
/* SSE2 x86 kód */
#elif __arm__ == 1
for (short l = j; l < j + input->w_small; l = l + 4){
add_b = k * input->w_big + l;
add_s = (k - i) * input->w_small + l - j;

__asm__ __volatile__(
"ldr %%r1, [%1];"
"ldr %%r2, [%2];"
"usada8 %0, %%r1, %%r2, %0;"
:"+r" (sad)
: "r" (input->pic_big + add_b), "r" (input->pic_small + add_s)
: "r1", "r2"
);
}
#else
for (short l = j; l < j + input->w_small; l++){
sad += abs(input->pic_big[k * input->w_big + l] - input->pic_small[(k - i) * input->w_small + l - j]);
}
#endif

I did nothing, the pavement was his enemy!

(#3) Vladi


Vladi
nagyúr

Ilyen fasza az rp2. :DD

Más összetettebb kóddal is meg kéne nézni, akkor nem lenne ekkor a különbség.
Milyen proccok vannak ezekben? Ha most modernebben futtatsz kódot, akkor nyilván van ekkora gyorsulás, mint anno sse2-3 és a nélkül futna.

Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!

(#4) Vladi válasza Vladi (#3) üzenetére


Vladi
nagyúr

Megnéztem, azért itt armv6 1 magos és armv7 4 (!) magos áll szemben, szóval nyilván. :U

Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!

(#5) weiss válasza Vladi (#4) üzenetére


weiss
addikt

Igen, de csak egy szálon fut a kód.

I did nothing, the pavement was his enemy!

(#7) Vladi válasza Aron1988 (#6) üzenetére


Vladi
nagyúr

Rendes tőled, hogy ennyit segítesz a srácnak. :DDD

(#5) weiss:

Nem értem. Ott a táblázatban, hogy 1-4 szálon megy a dolog. :F

Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!

(#8) ivana válasza weiss (#2) üzenetére


ivana
Ármester

Fura értem mit csinál, de hogy ez miért lesz jobb több szálon :F Hogy párhuzamosítod? Egymás mellett futatsz csak 4-et?

(#10) weiss válasza ivana (#8) üzenetére


weiss
addikt

Igen, persze. Nyitok n szálat, amely csak ezzel a függvénnyel dolgozik nyilván más-más adatokon.

I did nothing, the pavement was his enemy!

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.