Emulazione CPU

di il
3 risposte

Emulazione CPU

Salve, ho delle domande un pò fuori dal comune da porvi, nello specifico riguardanti una mia curiosità sui calcoli matematici che usano valori più grandi di quelli contenibili nei registri dei processori.

Nello specifico mi chiedevo come avvenga la ricerca su problemi matematici che richiedono molte risorse al punto da superare la capacità dei registri. Mi sono dato delle possibili risposte di cui non sono sicuro dell'esattezza, in primis per probabilità considerando il calcolo in parallelo (che non sò programmare in assembly) non tanto per la velocità di calcolo raggiungibile ma quanto per la possibilità di lavorare con i registri di più processori come fosse uno solo (se è possibile).

In secundis mi sono chiesto se è possibile programmare un emulatore di cpu, come EMU8086 per esempio, ma che non usi i registri propri della macchina limitandoli come in quest'ultimo caso a 16 bit ma usando la ram opportunamente configurata per impostare dimensioni ai registri del tutto arbitrarie (maggiori della macchina che ospita l'emulatore), cioè usando degli spazi in memoria per salvare valori come se fossero registri. Non sò proprio se è possibile per via della natura delle memorie dei registri rispetto a quelle della ram (e non solo per le diverse velocità).

Non voglio sapere se non è ottimizzabile come cosa o se troppo dispendiosa (dal punto di vista del linguaggio soprattutto perchè bisognerebbe inventarsi un linguaggio apposito), vorrei solo un parere, se è possibile in linea puramente ipotetica fare una cosa del genere progettando un emulatore dell'hardware che abbia quelle caratteristiche (che di per se sarebbe come progettare un microprocessore su Multisim da zero) per farlo poi girare su processori con capacità inferiori.

3 Risposte

  • Re: Emulazione CPU

    Quando c'erano solo le CPU a 8 bit si facevano tranquillamente calcoli a 16 e 32 bit utilizzando la memoria e software opportuno. Oggi sono disponibili librerie che permettono il calcolo con precisione arbitraria e sono facilmente integrabili con i moderni linguaggi/ambienti di programmazione nei comuni sistemi.

    Non vedo perché dover progettare apposite CPU... Mi sembra la strada sbagliata...
  • Re: Emulazione CPU

    Ci sono fondamentalmente due mondi:

    1) quello del calcolo numerico, e ad alte prestazioni, ed in questo caso il double (64 bit) o il long double (80 bit), o, ancora, il double double (128 bit) sono abbondantemente sufficienti: classico tool MatLab, e ci sono libreri per i double double.

    2) quello del calcolo simbolico, che coinvolge l'aritmentica in precisione arbitraria, classici esempi: Mathematica, Maple, e i cosidetti Computer Algebra System. In questo caso ci sono, appunto, le librerie, come indicato da Oregon:

    https://gmplib.org
    http://www.mpfr.org
    http://www.multiprecision.org/index.php?prog=mp

    Quindi non ti serve creare un emulatore: praticamente c'e' gia'! Normale CPU + libreria!

    Ci sono i wrapper in C++ per le librerie soppracitate che fanno si che tu scriva l'espressione sempre con la solita sintassi, ma invece di usare i float o i double, usi gli oggetti della libreria.

    Invece, una tecnologia decisamente piu' interessante di cui ci sono pochi esperti, e' saper sfruttare le istruzioni SSExx e AVX dei processori Intel (ma esistono le stesse cose per altri tipi di processori).

    Non e' solo questione di conoscere le istruzioni assembler, ma anche di COME scomporre il problema in modo da sfruttare al massimo il parallelismo disponibile.
  • Re: Emulazione CPU

    Grazie mille per la risposta esauriente, per quanto riguarda quelle istruzioni ora le cercherò per vedere cosa fanno perché non le conosco.
Devi accedere o registrarti per scrivere nel forum
3 risposte