autor: Ing. Robert Krejčí, kategorie: Hardware

Kritéria volby vhodné hardwarové platformy pro číslicové zpracování signálů

Základní pojmy mikroprocesorové techniky
dsPIC33F - velmi výkonný Digital Signal Controller

Doktorské pondělky
12.1.2009

Ing. Robert Krejčí

Školitel: Ing. Václav Hanžl, CSc.

V našem výzkumu se zabýváme se optimalizací algoritmů rozpoznávačů řeči pro vybrané hardwarové platformy. V tomto článku si řekneme něco obecněji o hardwarových apektech optimalizace. Na toto téma navazuje článek o možnostech softwarové optimalizace algoritmů číslicového zpracování signálů. Jak jsme tyto teoretické poznatky využili, si můžete přečíst ve zhodnocení výsledků našeho dosavadního výzkumu.

"Běžná" platforma: x86

PC
  • Optimalizace algoritmů rozpoznávačů řeči pro vybrané hardwarové platformy

  • Běžně: Intel IA-32 (x86)

  • "Nějak se to spočítá."

  •  

    A=lpc(x,N);

     

V běžných případech, zejména v našem výzkumu, vyvíjíme algoritmy číslicového zpracování signálů na platformě PC a jistě víme, že jádrem každého počítače je mikroprocesor, na němž je napsáno třeba Intel IA-32 (x86). Když používáme nějaký algoritmus, třeba prediktivní filtr pro zpracování řečových signálů, tak předpokládáme, že se to nějak spočítá. Prostě napíšeme funkci v Matlabu:

A=lpc(x,N);

... a vůbec nás nemusí zajímat, jak náročný výpočet se za tím skrývá. Pracujeme na určité abstraktní vrstvě a předpokládáme, že autoři této funkce již provedli optimalizaci pro platformu x86 a že výpočet tedy probíhá nejrychlejším možným způsobem. A i kdyby tomu tak snad nebylo, moc nám to nevadí, protože v Matlabu na platformě Intel x86 obvykle pracujeme mimo reálný čas, tak si prostě chvíli počkáme, než se to spočítá.

Specifické případy

Malé zařízení
  • Malý příkon

  • Malé rozměry

  • Přenosnost

  • Malý rozpočet

  • Minimalizace ceny

Mít k dispozici čtyřjádrový procesor s taktovací frekvencí 3 GHz a operační pamětí 8 GB je jistě pohodlné. Jsou však úlohy, ve kterých si takovou "vymoženost" nemůžeme dovolit např. z těchto důvodů:

  • Je dán požadavek na malý příkon zařízení.

  • Je dán požadavek na malé rozměry zařízení a přenosnost.

  • Máme k dispozici malý rozpočet nebo chceme minimalizovat cenu zařízení.

Volba platformy

AD-DSP-DA
  • Jiný procesor

  • Jiné vývojové prostředky

  • DSP

Proto je potřeba zvolit jinou platformu, tedy jiný mikroprocesor než x86 a nejspíše také jiné prostředky pro vývoj programů. Pro zpracování signálů v reálném čase je vhodné zvolit nějaký signálový procesor.

Signálové procesory

Ukázka jádra signálového procesoru (dsPIC33)
  • DSP sada instrukcí

  • MAC: Multiply and Accumulate

  • ABS, saturace, zaokrouhlení

  • Více datových a adresových sběrnic

  • Adresování: cyklické, bitová reverze

  •  

Signálové procesory jsou speciální typy procesorů, které se od obecných procesorů liší zejména v těchto bodech:

  • Sada instrukcí je zaměřená na zpracování signálů:

    • Často se setkáme s instrukcemi typu MAC: násobení a akumulace v jednom instrukčním cyklu.

    • Aritmetické instrukce umožňují spočítat některé operace, které by se jinak musely rozepsat do více instrukcí, např. absolutní hodnota, saturace výsledku nebo zaokrouhlení.

  • Více datových a adresových sběrnic, aby bylo možné pracovat rychle s více daty.

  • Adresování paměti umožňuje efektivně vybírat z paměti data na úrovni hardwaru: např. cyklické adresování a adresování bitovou reverzí, což se využívá při výpočtu FFT.

Abychom mohli správně zvolit mikroprocesor vhodný pro rozpoznávání řeči, je potřeba dobře prozkoumat současnou nabídku na trhu a seznámit se s hardwarovými možnostmi "kandidátů". Při volbě je potřeba brát v úvahu některé základní vlastnosti, jimiž se procesory různých výrobců od sebe liší. Jsou to např. následující aspekty:

Fixed Point vs. Floating Point

  • Způsob práce s reálnými čísly

  • Zásadní vlastnost pro volbu procesoru

Jedním z aspektů signálových procesorů je jejich způsob práce s reálnými čísly. Někdo se možná s těmito pojmy setkal pouze teoreticky, nicméně způsob práce signálového procesoru s reálnými čísly je pro volbu platformy zcela zásadní.

Fixed Point

  • Zlomkový tvar:

    ± , Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z
  • Interval hodnot: -1 až 1

  • + Větší rychlost

  • + Menší cena

  • + Menší rozměry

  • - Scaling

Jednodušší mikroprocesory pracují s reálnými čísly uloženými ve tvaru s pevnou řádovou čárkou (Fixed Point), obvykle v tzv. zlomkovém tvaru:

± , Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z

V případě 32-bitového čísla to znamená, že bit s nejvyšší váhou reprezentuje znaménko (0: kladné číslo, 1: záporné číslo - ve skutečnosti to je tedy také váha mocniny 2-1), pak následuje pomyslná řádová čárka a za ní 31 bitů desetinného čísla ve tvaru dvojkového doplňku. Lze tak vyjádřit číslo v intervalu přibližně od -1 do 1.

Výhodou takových procesorů je větší rychlost, menší cena, a menší rozměry. Naopak nevýhodou je nutnost upravovat algoritmy tak, aby nedocházelo k přetečení nebo podtečení rozsahu hodnot výsledků. To se obvykle provádí bitovou rotací vpravo o vhodný počet bitů po každé aritmetické operaci a říká se tomu scaling.

Floating Point

  • Vyjádření čísel: (32 bitů)

    ± E E E E E E E E Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z
  • Obrovský dynamický rozsah

  • Menší rychlost

  • Větší cena

Pohodlnější způsob práce s reálnými čísly umožňují procesory s plovoucí řádovou čárkou. Ty obsahují navíc tzv. Floating Point Unit (FPU), tedy jednotku pro práci s čísly vyjádřenými s plovoucí řádovou čárkou.

Možností reprezentace čísel je několik, např. Texas Instruments a Microchip požívají svůj vlastní tvar, ale uveďme si nejpoužívanější tvar, který je standadizovaný celosvětovou normou IEEE 754.

± E E E E E E E E Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z

Výhodou procesoru s plovoucí řádovou čárkou je to, že programátor má k dispozici obrovský dynamický rozsah čísel, a tedy saturaci či scaling v podstatě vůbec nemusí řešit. Nevýhodou je však menší dosažitelná rychlost procesoru a obvykle i větší cena.

RISC vs. CISC

  • CISC (Complex Instruction Set Computer)

  • RISC (Reduced Instruction Set Computer)

Dalším aspektem je komplexnost instrukční sady procesoru. Následující pojmy se netýkají jen signálových procesorů, ale zmíníme je zde proto, že s nimi budeme dále operovat. Z tohoto pohledu rozdělujeme procesory na:

  • CISC (Complex Instruction Set Computer): počítač s komplexní instrukční sadou

  • RISC (Reduced Instruction Set Computer): počítač s redukovanou instrukční sadou

CISC - počítač s komplexní instrukční sadou

  • Intel x86, Motorola 68k, 8051, ...

  • Jedna instrukce: složitejší operace

  • Složitější adresování

  • Mikroprogram

  • Složitější kompilátor

Typickými představiteli tohoto typu jsou platformy typu Intel x86, Motorola 68k nebo 8051.

  • Jedna instrukce umí provést složitejší operace.

  • Procesor umožňuje složitější efektivní způsoby adresování.

  • Každá instrukce spouští tzv. mikroprogram, jehož provedení trvá u různých instrukcí různou dobu.

  • Překladač (kompilátor) z vyššího programovacího jazyka je složitější.

RISC - počítač s redukovanou instrukční sadou

  • ARM, MIPS, PowerPC, SPARC, Microchip PIC/dsPIC, AVR, ...

  • Malý počet instrukcí

  • Instrukce stejně dlouhé

  • Jednoduché adresování

  • Efektivní kompilátor

  • Vyšší frekvence

Typickými představiteli RISCových procesorů jsou platformy ARM, MIPS, PowerPC, SPARC, Microchip PIC/dsPIC, Atmel AVR a další.

  • Instrukční sada je omezená na malý počet jednoduchých instrukcí, ale je zajištěno, že provedení každé instrukce trvá vždy stejnou dobu, obvykle jeden instrukční cyklus.

  • Adresování je omezeno pouze na několik málo základních způsobů.

  • Jednoduché instrukce a jednoduchý způsob adresování umožňují vytvořit jednoduchý a efektivní kompilátor z vyššího programovacího jazyka.

  • Jednodušší logika umožňuje taktovat procesor vyššími frekvencemi.

Zřetězené zpracování instrukcí s překrýváním fází - Pipelining

  • Provádění instrukcí během více hodinových taktů

  • V každém taktu je dokončeno provádění jedné instrukce

  • Predikce skoků

  • Původní provedení - pultový prodej v bufetu

    Původní provedení - pultový prodej
  • Pipeline - menza

    Pipeline - menza

Další jev, který se objevuje u současných procesorů, je tzv. pipelining. Je to provádění instrukcí během více hodinových taktů, přičemž v každém taktu je dokončeno provádění jedné instrukce.

  • Původní provedení - pultový prodej v bufetu

    Pro porovnání si nejprve můžeme popsat původní provedení bez překrývání fází. Je to podobné jako v bufetu: prodavačka Maruška vydává polévku, hlavní jídlo, zákusek a nápoj. Přijde Pavel, dostane polévku, hlavní jídlo, zákusek a nápoj. Obsloužení Pavla trvá čtyři časové jednotky. Přijde Petr a po čtyřech časových jednotkách dostane opět polévku, hlavní jídlo, zákusek a nápoj podle svého výběru. Stejně tak Vašek a Zdeněk. Obsloužení každého zákazníka trvá čtaři časové jednotky.

    Původní provedení - pultový prodej
  • Pipeline - menza

    Majitel bufetu však zjistil, že bude schopen obsloužit více lidí, když z bufetu udělá menzu. Prodloužil výdejní pult a najal další tři prodavačky. Maruška teď vydává pouze polévku, Anička vydává hlavní jídlo, Katka vydává zákusek nebo salát a Bětka vydává nápoj. Obsloužení jednoho zákazníka sice trvá také čtyři časové jednotky, ale po naplnění fronty u pultu je po každé časové jednotce obsloužen jeden zákazník. Fronta tak ubývá čtyřikrát rychleji.

    Pipeline - menza

    Není to však tak úplně jednoduché. Co se stane, když si Petr vybírá polévku podle toho, jaký si Pavel vezme nápoj? Pak fronta čeká tři časové jednotky, než Pavel dojde až k Bětce a vybere si nápoj. Pak si teprve Petr vybere polévku. Mezi zím není nikdo obsloužen.

    Takovému případu se říká pipeline stalling a součástí optimalizace algoritmů je také to, abychom se mu pokud možno vyhnuli.

Další aspekty architektury mikroprocesorů

Ještě je potřeba zmínit některé další aspekty, které je potřeba znát při volbě vhodné platformy. Jsou to např.:

  • SIMD

  • VLIW

  • Cache

SIMD

  • SIMD (Single Instruction Multiple Data): operace nad více daty současně

  • Např. komplexní sčítání (Re + Im)

  • Bit reduction

Princip SIMD (Single Instruction Multiple Data) znamená provedení výpočetní operace nad více daty současně během jedné instrukce. Během jednoho instrukčního cyklu tak je k dispozici např. výsledek komplexního sčítání, což znamená provedení dvou operací najednou. Při tom je obvykle potřeba snížení počtu bitů operandů, tomu se říká bit reduction.

VLIW

  • VLIW (Very Long Instruction Word): velmi dlouhé instrukční slovo

  • Paralelní provádění operací: aritmetické operace, práce s pamětí, ...

  • Možnost velmi efektivního programování, ale potřeba "ruční" práce.

Architektura VLIW (Very Long Instruction Word) znamená, že se instrukce zpracovávají paralelně. Jsou sdruženy do instrukčního paketu a vznikne tím velmi dlouhé instrukční slovo, např. 256 bitů. Paralelní umožňuje provádění několika různých operací současně: např. aritmetické operace, práce s pamětí atd. Zároveň jednotlivé instrukce instrukčního paketu mohou bát typu SIMD, takže mohou pracovat s více daty současně. Taková architektura umožňuje vytvořit velmi efektivní program, ale většinou je potřeba "ruční" práce při optimalizaci. Kompilátor ne vždy dokáže seřadit všechny instrukce efektivně do navazujících paketů.

Cache

  • Jednočipy: jádro + paměť

  • Výkonnější procesory: externí paměť

  • Vyrovnávací paměť: cache

  • Zrcadlení dat z hlavní paměti

  • Koherentní cache x softwarově ovládaná cache

U jednočipových mikrokontrolérů jsou všechny obvody včetně pamětí na jednom čipu, v jediném pouzdře. U výkonnějších procesorů by však bylo technicky nemožné umístit velké množství paměti do jediného čipu. Proto se zde používá externí paměť, jak to známe z klasického PC. Vznikne však problém: procesory bývají mnohem rychlejší než paměti. Aby paměť stačila přímo komunikovat s procesorem, musela by být velmi rychlá, a tedy neúměrně drahá. Pokud bychom používali relativně pomalejší paměť, procesor by musel čekat na provedení každého zápisu a čtení v paměti. Proto vznikly procesory s (obvykle dvouúrovňovou) vyrovnávací pamětí, která se nazývá Cache nebo česky keš.

Cache je rychlá paměť umístěná přímo na čipu blízko jádra mikroprocesoru a má za úkol zrcadlit vždy určité části hlavní datové či programové paměti podle toho, se kterými částmi se zrovna pracuje. Když jsou data pro čtení nebo zápis přítomna v rychlé keši, výpočet se provede bez čekání. Když data nejsou přítomna, procesor musí počkat, než se nahrají z hlavní paměti, což nějakou dobu trvá. (Běžné paměti mají přístupovou dobu řádově desítky až stovky nanosekund.)

Některé platformy, jako např. x86, pracují s keší transparentně, tzn. na úrovni hardwaru. Programátor nemusí řešit přesuny dat mezi pamětí a keší. Tomu se říká koherentní cache.

Jiné platformy, např. MIPS, v rámci zefektivnění architektury nechávají ovládání keše na programátorovi nebo na případném operačním systému. V rámci optimálního provádění programů je pak nutné si včas předem připravit data do keše, abychom je měli k dispozici, až s nimi budeme pracovat.

Jízda po dálnici a závod ve sněhu

To byl výčet některých aspektů, které je nutné brát v úvahu při volbě vhodné platformy pro číslicové zpracování signálů a optimalizaci algoritmů DSP.

Škodovka s pohonem zadních kol
Popisek obrázku: Škodovka s pohonem zadních kol
Favorit s pohonem předních kol
Popisek obrázku: Favorit s pohonem předních kol

Je to podobné, jako když si pořídíme auto a jezdíme s ním po dálnici za pěkného letního dne mezi Prahou a Hradcem Králové. Ať už má pohon předních, nebo zadních kol, je to úplně jedno. Vždycky bude mít vlevo spojku, uprostřed brzdu a vpravo plyn. Ale zcela jiná situace nastane, když se s ním vydáme na závody ve sněhu. Zde je naopak pro jízdu zcela zásadní, která kola jsou poháněna. Nejlepší by bylo mít pohon obou náprav.

Hummer s pohonem obou náprav - auto vhodné pro jízdu v terénu
Hummer s pohonem obou náprav - auto vhodné pro jízdu v terénu

Podobně tomu je i při volbě platformy pro konkrétní úlohu, např. rozpoznávače řeči. Je nutné velmi dobře porozumět hardwaru (tzn. "kde je motor"), abychom mohli provádět efektivní optimalizaci algoritmů.

Kritéria volby optimální platformy

  • Signálový procesor

  • Rozšířené DSP instrukce, SIMD

  • Efektivita:
    2400 MIPS = 300 MHz VLIW = 2400 MHz RISC = N×2400 MHz CISC

Na začátku každého optimalizačního procesu stojí důležité rozhodnutí: volba vhodné hardwarové platformy, na níž budeme provozovat systém číslicového zpracování signálů. Z uvedených informací vyplývá několik kritérií pro výběr vhodné platformy:

  • Je vhodnější zvolit signálový procesor, než procesor pro obecné použití.

  • Pokud není ekonomické použít signálový procesor, je vhodné použít alespoň procesor s rozšířenou sadou DSP instrukcí a instrukcemi typu SIMD.

  • Rozhodující nemusí být frekvence procesoru, ale jeho efektivita, např.:
    2400 MIPS = 300 MHz VLIW = 2400 MHz RISC = N×2400 MHz CISC

Literatura

  • Dominic Sweetman: See MIPS run Linux. Morgan Kaufmann Publishers, 2007.

  • MIPS Technologies Inc.: Effective Programming of the 24KE™ and the 34K™ Core Families for DSP Code, 2007.

  • Oficiální dokumenty výrobců.

Kam dál?

Na toto téma navazuje článek o možnostech softwarové optimalizace algoritmů číslicového zpracování signálů. Jak jsme tyto teoretické poznatky využili, si můžete přečíst ve zhodnocení výsledků našeho dosavadního výzkumu.

 
{e_like}
 
 
Nahoru