Mi a kód? Már mint a C...
[ Szerkesztve ]
Mi a kód? Már mint a C...
[ Szerkesztve ]
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!
Ilyen fasza az rp2.
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!
Megnéztem, azért itt armv6 1 magos és armv7 4 (!) magos áll szemben, szóval nyilván.
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!
Igen, de csak egy szálon fut a kód.
I did nothing, the pavement was his enemy!
Rendes tőled, hogy ennyit segítesz a srácnak.
(#5) weiss:
Nem értem. Ott a táblázatban, hogy 1-4 szálon megy a dolog.
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!
Fura értem mit csinál, de hogy ez miért lesz jobb több szálon Hogy párhuzamosítod? Egymás mellett futatsz csak 4-et?
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!
Azt hittem valami cache dolog, de így nem lehet az
Rájöttem, hogy simán jó ez a gyorsulási érték. Az, hogy az armv7 ennyivel gyorsabb az simán lehet az armv6 egy foshalmaz. 4 maggal csak 3,71-szerese az egy magnak ami lehetséges ha proci limites kód.
Amennyiben csak egy szálad van, akkor is nyitsz új szálat ennek a függvénynek a végrehajtásához?
Igen.
I did nothing, the pavement was his enemy!
Véleményem szerint, miután merőben más a két proci 1 vs. 4 mag, így nem annyira pontos a mérésed. Egy magos esetén gyakorlatilag azon a magon osztozol minden, a gépen futó, pl.oprendszer processzekkel is. Amikor ugyanezt a négymagoson futtatod, akkor eleve futhat az 1 szálon futó programod egy dedikált magon, ahova esetleg semmi más nem kerül. Plusz, ha csak egy szálon fut a progid és ehhez a függvényhez nyitsz egy új processzt, akkor lehet, hogy annak a menedzselése is felesleges terhet ró a rendszerre.
bejegyzés RPi 1 B vs. RPi 2 B gyorsulás