risposta

6

È possibile utilizzare il DSP per tutti i tipi di calcoli. È una CPU per uso generico ottimizzata per le applicazioni DSP. Quindi sì, anche roba in virgola mobile funzionerà anche se le prestazioni non saranno grandiose.

Il DSP brilla davvero se si eseguono calcoli interi su grandi matrici di dati. Qui il DSP può facilmente calcolare così velocemente che il tempo per trasferire i dati da e verso la memoria diventa il collo di bottiglia.

Per darvi una cifra, ciò che è possibile: ho un algoritmo che esegue i dati post-elaborazione da una telecamera (facendo il deinterlacciamento bayer). Ho immagini di input a 8 bit e immagini a 24 bit in uscita. La performance che sto archiviando sul DSP beagleboard in esecuzione a ~ 350 Mhz è 144 milioni di pixel al secondo. Questo equivale a circa mezzo gigabyte di dati elaborati al secondo.

Ottenere il DSP installato e funzionante e compilare un programma Hello World non è semplice. Devi integrare un driver del kernel DSP (io uso DSPLINK). Devi imparare come usare le (enormi) librerie di interoperabilità DSP/ARM, come usare la toolchain solo per un semplice mondo Hello. Pianifica almeno due settimane.

Una volta che questo funziona, il vero lavoro inizia imparando come scrivere codice veloce per DSP, come gestire i memoriali interni, i DMA, gli interrupt e tutte queste cose.

Alla fine ne vale la pena perché si sblocca un DSP incredibilmente veloce che può facilmente sovraperformare il Cortex-A8 se assegnato al lavoro giusto.Inoltre, puoi accedere ai co-processori di immagini che ti consentono di scaricare ulteriormente i calcoli. E poi c'è una CPU ARM9 completa accoppiata strettamente al DSP che rimane inattivo e attende anche di essere utilizzata.

+0

Come posso integrare un driver Kernal DSP? puoi spiegare i passi –

+0

Ci vorrà mezza settimana per fare tutto il lavoro di integrazione se sai cosa stai facendo. Non puoi semplicemente spiegare tutti questi passaggi in un paragrafo o due. –

1

Il modello di programmazione in una piattaforma eterogenea come beagle board è solitamente quello di scaricare parte computazionale della vostra applicazione da GPP (ARM) a DSP. Avrai bisogno di un driver del kernel dsp e di un compilatore per c64x. Per i dettagli date un'occhiata al DSP BIOS guida di programmazione: http://omappedia.org/wiki/DSPBridge_Project

Se non si è ritenuto già, consiglio dando neon su Cortex A8 una prova per l'algoritmo di elaborazione delle immagini e vedere che tipo di incremento delle prestazioni si ottiene . Questo è abbastanza semplice da programmare in C senza bisogno di un driver/compilatore DSP.

3

Sì, è possibile, ma se non fa parte di this OpenCV port project, è necessario implementare l'algoritmo da soli.

Il DSP del BeagleBoard deve essere abbastanza potente per le dimensioni dell'immagine non troppo grandi (320x240, forse 640x480), ma se si desidera un throughput ottimale è necessario gestire l'aritmetica a punto fisso e così via.

EDIT: Perché fisso punto

di TI DSP C6xxx sono di due tipi: i numeri più piccoli (C64xx) non hanno un'unità in virgola mobile hardware, mentre i numeri più alti (C67xx) hanno uno. A differenza delle CPU desktop come Intel.

BeagleBoard-xm incorpora un C64xx privo di unità a virgola mobile. Quindi, ogni volta che si chiama una funzione matematica che opera su float, i calcoli a virgola mobile vengono emulati dal dispositivo, che è lento. Invece, il throughput massimo si ottiene quando si implementano queste operazioni in aritmetica in virgola fissa perché si chiamano operazioni native su tipi interi.

+0

Perché l'aritmetica in virgola fissa ad avere un rendimento ottimale? –

0

Non applicabile ai dispositivi ARM, ma per le persone che arrivano qui dopo la ricerca "DSP" e "OpenCV", per prestazioni elevate in server x86 una buona scelta è la serie CPU c66x TI, che ha sia fisso a 32 bit che istruzioni a virgola mobile. OpenCV è stato portato su schede di accelerazione c66x e funziona senza problemi:

http://processors.wiki.ti.com/index.php/C66x_opencv