Re: sviluppo mondo hw

Messaggioda apatriarca » 04/10/2020, 23:54

I corsi universitari di ingegneria elettronica parlano di questi argomenti. I corsi su siti come Coursera o Edx sono forse il posto migliore dove scoprire queste cose senza essere iscritti ad un corso universitario. L'argomento è poi così vasto che è difficile fornire qualcosa di più specifico. Quale sarebbero le tue basi e a quale livello di dettaglio vuoi arrivare?
apatriarca
Moderatore
Moderatore
 
Messaggio: 5496 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: sviluppo mondo hw

Messaggioda vict85 » 05/10/2020, 09:20

Penso che apatriarca si riferisse di più alle tue competenze di elettronica e circuiti digitali.
vict85
Moderatore
Moderatore
 
Messaggio: 10222 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: sviluppo mondo hw

Messaggioda apatriarca » 05/10/2020, 11:01

Prima di tutto è importante capire che esistono tantissimi livelli di astrazione quando si lavora con i computer. Un cambio di tecnologia nei transistor non ha necessariamente un effetto immediato visibile sui livelli superiori. Tu insomma continuerai probabilmente a scrivere il tuo programma in Python e questo funzionerà senza problemi e forse più velocemente sui nuovi computer di domani. Per darti un'idea generale i transistor sono simili a interruttori minuscoli. A partire da questi transistor si costruiscono dei circuiti digitali base come le porte logiche che rappresentano operazioni booleane come AND, XOR, NOT.. a partire da queste porte logiche si costruiscono circuiti logici per fare operazioni più complesse come la somma tra numeri interi o la radice quadrata di un numero in virgola mobile. A questo punto questi elementi di base vengono messi insieme per costruire il tuo processore. Un processore a sua volta verrà attratto in base alle operazioni che è un grado di eseguire (prende il nome di ISA instruction set architecture). A questo punto hai il tuo computer e iniziano le astrazioni software fornite dal firmware, sistema operativo, linguaggio di programmazione.. È molto difficile essere un esperto di tutti questi livelli e in effetti le astrazioni servono proprio a non renderlo necessario. Il mondo dei transistor è quello più legato alla fisica. Mentre alcune strade sono più ovvie al momento, altre potrebbero comparire all'improvviso grazie a nuove scoperte e processi ingegneristici attualmente ignoti. Non è facile, neanche per qualcuno che ha studiato queste cose e ne comprende le basi come me, seguire sempre le news in questo campo. Ma per qualcuno che non si occupa del design di processori, è più utile conoscere qualcosa dei livelli un po' più alti. Per esempio come funzionano i processori. Per esempio cos'è la pipeline, cosa si intende con SIMD, cosa significa out-of-order, cos'è la cache, cosa cambia tra una CPU e una GPU. Comprendere perché le GPU sono più adatte a fare operazioni per il deep learning..
apatriarca
Moderatore
Moderatore
 
Messaggio: 5498 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: sviluppo mondo hw

Messaggioda apatriarca » 06/10/2020, 10:11

Un addetto ai lavori lo saprà di certo, ma qualcuno al di fuori ha bisogno di tenersi aggiornato per riuscire a seguire tutti gli sviluppi. Non sono un addetto ai lavori, mi occupo di VFX per film, ho solo studiato questi argomenti in corsi universitari una decina di anni fa.

Ti consiglio di seguire un qualche corso di architettura dei computer o di ottimizzazione da qualche parte. Sono anche descritti in corsi o guide di ottimizzazione. Tuttavia per il deep learning serve fino ad un certo punto. Queste ottimizzazioni sono fatte a livello dei framework e puoi ignorarli se il tuo unico interesse è quello di fare uso di particolari algoritmi.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5501 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: sviluppo mondo hw

Messaggioda apatriarca » 06/10/2020, 10:57

Ti scrivo comunque qui una piccola spiegazione di quei termini per completezza.

Per eseguire una qualsiasi istruzione la CPU deve fare parecchie come
1. Leggere l'istruzione dalla memoria.
2. Interpretare l'istruzione.
3. Caricare dalla memoria i dati su cui l'istruzione deve lavorare.
4. Eseguire l'istruzione.
5. Scrivere il risultato in memoria.

Le prime CPU facevano tutte queste operazioni in un singolo clock, ma ci si è presto resi conto che non era molto efficiente. Le cpu hanno quindi iniziato ad avere una "catena di montaggio" (pipeline) interna per eseguire le istruzioni. In questo modo quando un'istruzione è letta dalla memoria un'altra viene per esempio eseguita. Se si riesce a tenere tutta la pipeline occupata allora si riescono ad ottenere nuovi valori continuamente e a risparmiare quindi tempo. Tuttavia se un'istruzione ha bisogno di un valore prodotto dall'istruzione precedente, questa deve aspettare fino a quando l'istruzione precedente non ha finito di essere eseguita perdendo quindi i vantaggi della pipeline. Per questa ragione le CPU hanno imparato ad eseguire le istruzioni in ordine diverso da quello presente nel codice (out-of-order). Se quindi un'istruzione è in attesa ma quella dopo può essere eseguita in modo indipendente, una CPU con questa funzionalità eseguirà l'istruzione successiva senza aspettare di eseguire quella in attesa.

Nota che ci sono molte ragioni per bloccare un'istruzione. L'esempio fatto sulla dipendenza tra le istruzioni è solo un esempio. Un altro importante esempio si ha quando si hanno degli if o dei cicli. In questo caso la CPU deve aspettare prima di sapere quale sarà la prossima istruzione. Per evitare questo le CPU hanno introdotto una tecnologia chiamata branch prediction che consiste in pratica in un circuito che cerca di prevedere se un determinato salto nel codice verrà eseguito o meno e inizierà ad eseguire le istruzioni successive in base a questa predizione. Se la predizione sarà vera allora si sarà risparmiato tempo, se è falsa si dovrà buttare tutto quello che si è fatto e partire con le istruzioni che dovevano davvero essere eseguite.

L'ultimo importante esempio di attesa si ha per la lettura della memoria. Per questa ragione sono state introdotte le cache. Sono dei blocchi di memoria via via più veloci che servono per accedere più velocemente ai dati usati di recente (è raro eseguire una sola istruzione su un set di dati) o dati che il processore prevede di dover usare presto.

SIMD (single instruction multiple data) è un modo alternativo di velocizzare del codice usando del parallelismo. In questo caso si hanno delle istruzioni che sono in grado di eseguire la stessa operazione su un certo numero di valori. Sono particolarmente utili per fare operazioni su array, matrici, tensori.. Sono nate in ambito grafico (le GPU ce le hanno da sempre) e multimediale (DSP). Quando si parla di SSE. AVX.. si parla di insiemi di istruzioni di questo tipo.

Più di recente i processori hanno anche iniziato ad avere delle pipeline parallele sullo stesso core (prendono il nome di superscalar processor) e avere più processori insieme (multicore) per incrementare la capacità di eseguire operazioni in parallelo.

È tutto molto breve e superficiale ma credo di averti fornito un po' di termini da cercare e una panoramica di molte delle complessità che esistono a livello hardware nei processori.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5502 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite