Newsgroup: it.hobby.elettronica.digitale
Titolo: documentazione sull'uso di + micro in un'unica board

Salve, volevo sapere se conoscete qualche progetto di esempio, o della 
documentazioe specifica su come poter progettare una scheda con piu di un 
micro che lavora in parallelo con gli altri.
Grazie 


Nel senso di calcolo distribuito o di ridondanza (affidabilità,
processori che eseguono la stessa cosa e confrontati tra loro, 2 al
meglio di 3 per intenderci)?
Piccio.

 micro che lavora in parallelo con gli altri.
Oltre alla domanda di Piccio, quello che mi verrebbe naturale chiederti �: 
che tipo di micro vorresti mettere in parallelo? Il calcolo parallelo ha 
senso solo in certi determinati casi, e per quanto riguarda la potenza di 
calcolo nuda e cruda quasi sempre conviene usare un micro di classe 
superiore...
Ciao
CG 


La cosa "processori che eseguono la stessa cosa e confrontati tra
loro, 2 al meglio di 3 per intenderci)?" mi potrebbe interessare a me.
Conosco situazioni sia dove ci sono 3 elaborazioni e devono essere 2
uguali su 3, e sia una soluzioni 2 sole elaborazioni ( che devono
avere lo stesso risultato ). Ma non ho mai capito chi e come si fanno
questi confronti vengono fatti. Anche perché di solito queste
situazioni richiedono "sicurezza" contro errori, come ci si protegge
da errori/gusti del confrontatore?

>Nel senso di calcolo distribuito o di ridondanza
Ciao, nel senso di calcolo distribuito, grazie 

 superiore...
Ciao, non so .. cercavo appunto della documentazione a proposito perch� ..
Se volessi ad esempio usare dei PIC, non saprei come fare a spedire a N pic 
il codice che devono eseguire ..

 da errori/gusti del confrontatore?
Si scelgono componenti con bassa failure rate e la si considera
accettabile. Anche perch� se una determinata funzione � cos� critica da
richiedere un'affidabilit� quasi totale, non la si pu� comunque affidare a
un singolo blocco, ci sar� anche una ridondanza funzionale.
-- 
emboliaschizoide.splinder.com

Un bel giorno Fedewiico digit�:

Mi pare che tu stia parlando di un vero e proprio sistema operativo
distribuito, qualcosa tipo i Java Agents, che � una roba sostanzialmente
limitata all'ambito accademico (non dico "seghe mentali" perch� visto che
si studiano all'universit� magari qualcuno � rimasto abbagliato dal loro
fascino teorico e se ne pu� avere a male).
Il parallelismo implementato usando piccoli microprocessori/controllori di
solito ha senso soltanto per applicazioni "hard-wired", nelle quali destini
ogni nodo a un compito ben preciso e immutabile. A tale proposito guarda i
Parallax Propeller, magari ti possono fornire qualche spunto utile:
http://en.wikipedia.org/wiki/Parallax_Propeller
-- 
emboliaschizoide.splinder.com

 il codice che devono eseguire ..
Per fare questo dovresti usare dei PIC con la memoria
programma in RAM e non so se esistono.
In ogni caso la struttura a multiprocessore non ha senso
con dei microcontrollori in quanto manca la possibilita'
di comunicare ad alta velocita' tra le CPU.
Ci sono molte strutture ma la piu' comune fa uso di
memoria condivisa tra due o piu' CPU o quanto meno
devono condividere un bus.
Credo che allo stato attuale i sistemi multiprocessori
siano convenienti con CPU vicine alle massime
prestazioni fisicamente possibili in termini di velocita' come
avviene nei personal computer. In questo caso l'unica
possibilita' per incrementare ancora le prestazioni complessive
e' di usare piu' cpu in parallelo, che e' anche la struttura
dei supercomputer attuali.
Ma in tutti gli altri casi, come ti hanno gia' detto, e' piu'
conveniente usare una cpu piu' potente.

programma in RAM e non so se esistono.
Infatti .. dal momento in cui il codice da eseguire � nella flash del micro, 
temo che riprogrammare la flash runtime sia un suicidio.
Ma non esistono microprocessori eventualmente (z80?) che eseguono codice da 
RAM eventualmente condivisa con altre cpu?

 un singolo blocco, ci sarà anche una ridondanza funzionale.
Ridondanza funzionale? Spiegati bene.

 RAM eventualmente condivisa con altre cpu?
Non e' possibile eseguire codice a run time sui PIC,
o su altri micro con poca RAM.
Pero' se il compito ï¿œ predefinito a priori puoi organizzare
una rete per distribuire i processi da eseguire (predefiniti!)
in modo dinamico.
L' uso di piu' processori in parellelo per applicazioni non
banali pero' richiede un software apposito per sincronizzare
il tutto!
Quando una applicazione puo' essere eseguita su piu' macchine
anche diverse, collegate in rete si parla di sistemi distribuiti,
esistono gia' e non in ambito accedemico.
Quando invece esiste una sola macchina con piu' processori
a bordo, si usa in genere un solo sistema operativo.
Lo fa sia Linux che Windows (in qualche modo).
Un sistema real-time che gestisce sia processi distribuiti
che multiprocessing, anche se di nicchia , e' QNX.
a.

 Ridondanza funzionale? Spiegati bene.
Intendo dire che le funzioni critiche vengono ridondate usando sistemi
diversi e indipendenti fra loro. Anzich� cercare di rendere perfetto un
singolo sistema, se ne usano due o pi� alternativi che possano agire
indipendentemente gli uni dagli altri. Un caso tipico � il paracadute, dove
ce n'� uno principale che pieghi tu stesso, e uno di emergenza che viene
piegato e controllato periodicamente da personale abilitato.
-- 
emboliaschizoide.splinder.com

 il tutto!
Hai il nome di uno di questi software da suggerirmi?
Grazie


Molto interessnti, grazie del suggerimento! 


Si ma questi sistemi funzionano una alla volta non contemporaneamente
giusto? Mi sembrava che tu parlassi di sistemi trasparenti, che non
interompevano mai il servizio. La cosa mi sembrava strana tutto qui.
Tra parentesi ho cercato su internet il Triple Module Redundancy e non
ho captio una frase. Questa:
Per tale motivo in un buon sistema TMR il voter deve essere molto più
affidabile degli altri componenti del TMR. In alternativa, se si
adopera un ulteriore TMR a valle di quello considerato, si possono
utilizzare tre voter, l'output di ognuno dei quali costituirà l'input
di ognuna delle copie del TMR successivo.
Quindi in pratica si crea un TMR di TMR? dove il voter del primo
diventa input del voter del secondo?

scusate se mi appiccico spero non inutilmente: ma che
differenze mettereste in evidenza tra il collegare dei micro
via bus o collegare delle uscite di uno all'altro? 
Per scambiare pochissimi segnali, si intende

 Hai il nome di uno di questi software da suggerirmi?
In genere si tratta di sistemi operativi :-)
Una delle tecniche piu' usate e' SMP (Symmetric Multi Processing),
poi che' la NUMA, la ASMP ... ma sono tecniche meno usate.
Una buona documentazione sull' SMP la trovi su Wiky
o sul sito QNX.
B.

 diventa input del voter del secondo?
Non esattamente (vedi schema in fondo). Nel caso in alto, Fa usa un solo
voter; la sua uscita si ripartisce negli ingressi del blocco successivo Fb
(a sua volta ridondato). In questo caso se il voter si rompe, sei fregato.
Nel caso in basso invece usi tre voter, ognuno che alimenta un singolo
blocco di Fb. In questo caso se un voter si rompe, la ridondanza continua a
funzionare.
[FIDOCAD]
RV 55 20 75 30
TY 62 22 5 3 0 0 0 * Fa1
RV 55 35 75 45
TY 62 37 5 3 0 0 0 * Fa2
RV 55 50 75 60
TY 62 52 5 3 0 0 0 * Fa3
RV 90 35 110 45
TY 91 37 5 3 0 0 0 * voter
LI 75 25 85 25
LI 75 40 90 40
LI 85 25 85 38
LI 85 38 86 38
LI 86 38 90 38
LI 75 55 85 55
LI 85 55 85 42
LI 85 42 90 42
RV 130 20 150 30
TY 137 22 5 3 0 0 0 * Fb1
RV 130 35 150 45
TY 137 37 5 3 0 0 0 * Fb2
RV 130 50 150 60
TY 137 52 5 3 0 0 0 * Fb3
RV 165 35 185 45
TY 166 37 5 3 0 0 0 * voter
LI 150 25 160 25
LI 150 40 165 40
LI 160 25 160 38
LI 160 38 161 38
LI 161 38 165 38
LI 150 55 160 55
LI 160 55 160 42
LI 160 42 165 42
LI 120 25 130 25
LI 110 40 130 40
LI 120 55 120 25
LI 120 55 130 55
RV 55 80 75 90
TY 62 82 5 3 0 0 0 * Fa1
RV 55 95 75 105
TY 62 97 5 3 0 0 0 * Fa2
RV 55 110 75 120
TY 62 112 5 3 0 0 0 * Fa3
LI 75 100 90 100
RV 130 80 150 90
TY 137 82 5 3 0 0 0 * Fb1
RV 130 95 150 105
TY 137 97 5 3 0 0 0 * Fb2
RV 130 110 150 120
TY 137 112 5 3 0 0 0 * Fb3
RV 165 95 185 105
TY 166 97 5 3 0 0 0 * voter
LI 150 85 160 85
LI 150 100 165 100
LI 160 85 160 98
LI 160 98 161 98
LI 161 98 165 98
LI 150 115 160 115
LI 160 115 160 102
LI 160 102 165 102
LI 110 100 130 100
RV 90 80 110 90
TY 91 82 5 3 0 0 0 * voter
RV 90 95 110 105
TY 91 97 5 3 0 0 0 * voter
RV 90 110 110 120
TY 91 112 5 3 0 0 0 * voter
LI 75 83 90 83
SA 120 40
LI 78 98 90 98
LI 78 115 90 115
LI 78 83 78 115
SA 78 83
SA 78 98
LI 80 85 80 113
LI 80 85 90 85
LI 90 113 80 113
SA 80 100
LI 90 117 75 117
LI 82 117 82 87
LI 82 87 90 87
LI 82 102 90 102
SA 82 102
SA 82 117
LI 110 85 130 85
LI 110 115 130 115
-- 
emboliaschizoide.splinder.com


Ma per la programmazione oppure durante il lavoro?
In programmazione puoi condividere la linea di clock e selezionare in 
qualche modo dove "instradare" la linea dati, ma durante il lavoro potrebbe 
essere un problema. Nel caso per� che tutti i chip debbano eseguire lo 
stesso compito, molto semplice, puoi usare un SPI come slave e un I/O come 
chip select, pi� un altro micro che faccia da master, tutti controllati 
dallo stesso clock.
Questo pu� aver senso, ma quando c'� bisogno di usare queste "strutture" di 
lavoro � molto molto meglio usare delle FPGA! Fai il blocco di lavoro e lo 
duplichi sugli altri I/O.
Ciao
CG 

 funzionare.
Ma in questo caso, non si rimane comunque vincolati all' affidabilita' 
del voter finale?

 del voter finale?
S�, ma ne hai pur sempre uno solo anzich� due (o N, a seconda del numero di
blocchi in cascata). L'affidabilit� totale non esiste.
-- 
emboliaschizoide.splinder.com

 L'affidabilit� totale non esiste.
Yep.

 blocchi in cascata). L'affidabilità totale non esiste.
e' anche vero che, mentre i canali indipendenti (dovendo svolgere
algoritmi complessi) potrebbero essere strutture analogico_digitale
complicate e prone a guasti e difetti, il voter finale potrebbe dover
processare solo semplici segnali on_off, con una posizione di sicurezza
predefinita (guasto): in questo caso il voter (a prova di guasto) si
costruisce con pochi rele' (di sicurezza, con contatti guidati).
saluti
-- 
  lowcost