Je Arduino UNO R4 výkonnější?

Před necelým měsícem se konečně začalo prodávat nové Arduino UNO R4. Hned jsem si ho tedy musel koupit. Výrobce při představení uváděl, že procesor „Renesas RA4M1 32-bit Cortex®-M4“ má být až 16x rychlejší, než předchozí ATmega328, rozhodl jsem se tedy rychlost vyzkoušet nějakým zajímavým výpočtem.

Jak na to?

Pro náš test použijeme Arduino UNO R4 Minima (ta verze bez Wi-Fi a LEDek – na tu se třeba podíváme příště 😉 ) a Arduino UNO R3. Originální R3 mám stále zabalenou jako sběratelský kousek, takže jsem použil klon – nicméně mikrokontrolér je stejný, tedy měření by nemělo být ovlivněno. Oba mikrokontroléry necháme spočítat 4000 hashů SHA256. Tento hashovací algoritmus se používá například v bitcoinovém blockchainu.
Kód algoritmu lze najít v open source formě na internetu a to i v jazyce C (což je velmi podobné Wiringu, ve kterém se programuje Arduino). Poté bude potřeba udělat pár úprav, například přepsat WORD a BYTE na uint32_t a uint8_t (tato varianta má dle standardu definovanou velikost, na rozdíl od WORD, který lze interpretovat různě).
Poté již stačí kód vložit do sketche a pustit. Pro zpomalení výpočtu jsem posílal vypočítané hashe na sériovou linku. Měření času proběhlo pomocí funkce millis() a to následovně: před výpočtem a po výpočtu si zaznamenáme hodnotu vrácenou touto funkcí. Jejich rozdíl poté odpovídá době trvání výpočtů (plus mínus něco málo). Následující tabulka ukazuje doby, kterých obě verze dosáhly.

Revize ArduinaČas programu v milisekundách
R372242
R43292

Závěr

Je vidět, že R4 je opravdu rychlejší a to dokonce 21,9 krát! Důvodem tohoto lepšího času je zcela určitě vyšší frekvence (R4 má 48 MHz a R3 pouze 16 MHz, tedy 3x rychlejší), ale také „šířka dat“. ATmega je 8-bitová, tedy operace s 32-bity musí rozložit do více operací na rozdíl od M4, která taková data zpracuje jednou instrukcí. Od Arduina byl tedy přechod k výkonnějšímu procesoru správnou volbou, protože nyní by mohly vznikat i projekty využívající šifrování.