Diferencia entre revisiones de «Experiencias con MIPsim»

De Wiki Asqueados
Saltar a: navegación, buscar
(Riesgos por dependencia de datos)
()
Línea 8: Línea 8:
 
ëó÷øèå âèäåî ðîëèêè. ãåé ïîðíî, ìîëîäûå, ãðóïïîâîå ïîðíî, áëîíäèíêè, çðåëûå. , <a href="http://all-porno.facka.ru/www-holyava-porno-ru.html">www õîëÿâà ïîðíî ru</a> , http://all-porno.facka.ru/www-holyava-porno-ru.html www õîëÿâà ïîðíî ru ,  >:-[[[ , <a href="http://all-porno.facka.ru/porno-klipy-lolit.html">ïîðíî êëèïû ëîëèò</a> , http://all-porno.facka.ru/porno-klipy-lolit.html ïîðíî êëèïû ëîëèò ,  :-D , <a href="http://all-porno.facka.ru/zavarka-porno.html">çàâàðêà ïîðíî</a> , http://all-porno.facka.ru/zavarka-porno.html çàâàðêà ïîðíî ,  71746 , <a href="http://all-porno.facka.ru/podrostkovoe-video-porno.html">ïîäðîñòêîâîå âèäåî ïîðíî</a> , http://all-porno.facka.ru/podrostkovoe-video-porno.html ïîäðîñòêîâîå âèäåî ïîðíî ,  tgw ,
 
ëó÷øèå âèäåî ðîëèêè. ãåé ïîðíî, ìîëîäûå, ãðóïïîâîå ïîðíî, áëîíäèíêè, çðåëûå. , <a href="http://all-porno.facka.ru/www-holyava-porno-ru.html">www õîëÿâà ïîðíî ru</a> , http://all-porno.facka.ru/www-holyava-porno-ru.html www õîëÿâà ïîðíî ru ,  >:-[[[ , <a href="http://all-porno.facka.ru/porno-klipy-lolit.html">ïîðíî êëèïû ëîëèò</a> , http://all-porno.facka.ru/porno-klipy-lolit.html ïîðíî êëèïû ëîëèò ,  :-D , <a href="http://all-porno.facka.ru/zavarka-porno.html">çàâàðêà ïîðíî</a> , http://all-porno.facka.ru/zavarka-porno.html çàâàðêà ïîðíî ,  71746 , <a href="http://all-porno.facka.ru/podrostkovoe-video-porno.html">ïîäðîñòêîâîå âèäåî ïîðíî</a> , http://all-porno.facka.ru/podrostkovoe-video-porno.html ïîäðîñòêîâîå âèäåî ïîðíî ,  tgw ,
  
<a href="http://umypygimoni.narod.ru/index.html">просмотр порно без регистрации бесплатно</a>
+
==Riesgos por dependencia de datos==
 +
 
 +
En MIPS no se pueden escribir los programas despreocupadamente, ya que no existe una forma de tratar los riesgos de la segmentación.
 +
 
 +
En esta prueba vamos a comprobar qué ocurre en MIPS ante los riesgos por dependencia de datos. Estos se producen porque si una instrucción escribe en un registro, este cambio no se hace efectivo hasta el último segmento. Esto quiere decir que, ya que las instrucciones leen el banco de registros en su segundo segmento, cuando la escritura en el registro se produce hay cuatro instrucciones que pueden haber leído el registro con campos obsoletos.
 +
 
 +
Para comprobar esto, veremos dos programas.
 +
 
 +
 
 +
===Fibonaci a Mano===
 +
En el primero, se parte con todos los registros con valor 1. Se suma el registro 1 con el 2 y se almacena en el 3. Después se suma el 2 con el 3 y se almacena en el 4 y así sucesivamente hasta almacenar en el registro 10. El resultado es que los registros del 1 al 10 contienen los 10 primeros elementos de la sucesión de Fibonaci calculados de forma no estructurada. El código es el siguiente:
 +
 
 +
  <nowiki>
 +
add $3, $2, $1
 +
add $4, $3, $2
 +
add $5, $4, $3
 +
add $6, $5, $4
 +
add $7, $6, $5
 +
add $8, $7, $6
 +
add $9, $8, $7
 +
add $10, $9, $8
 +
</nowiki>
 +
 
 +
El resultado esperado es el siguiente:
 +
 
 +
{| border=1 style="margin:0 0 1em 1em"
 +
|+ Resultado esperado
 +
! Registro !! Valor inicial !! Resultado Esperado
 +
|-
 +
|  1 || 1 ||  1
 +
|-
 +
|  2 || 1 ||  1
 +
|-
 +
|  3 || 1 ||  2
 +
|-
 +
|  4 || 1 ||  3
 +
|-
 +
|  5 || 1 ||  5
 +
|-
 +
|  6 || 1 ||  8
 +
|-
 +
|  7 || 1 || 13
 +
|-
 +
|  8 || 1 || 21
 +
|-
 +
|  9 || 1 || 34
 +
|-
 +
| 10 || 1 || 55
 +
|}
 +
 
 +
Que se corresponde con la sucesión de Fibbonaci.
 +
 
 +
 
 +
Sin embargo, el resultado obtenido es el siguiente:
 +
 
 +
{| border=1 style="margin:0 0 1em 1em"
 +
|+ Resultado real
 +
! Registro !! Valor inicial !! Resultado Esperado !! Resultado Obtenido
 +
|-
 +
|  1 || 1 ||  1 || 1
 +
|-
 +
|  2 || 1 ||  1 || 1
 +
|-
 +
|  3 || 1 ||  2 || 2
 +
|-
 +
|  4 || 1 ||  3 || 2
 +
|-
 +
|  5 || 1 ||  5 || 2
 +
|-
 +
|  6 || 1 ||  8 || 2
 +
|-
 +
|  7 || 1 || 13 || 2
 +
|-
 +
|  8 || 1 || 21 || 2
 +
|-
 +
|  9 || 1 || 34 || 2
 +
|-
 +
| 10 || 1 || 55 || 2
 +
|}
 +
 
 +
Ya que cada dato sirve para obtener los dos siguientes, al hacer una suma no da nunca tiempo a que los sumandos estén actualizados, luego siempre se toman como 1 y las sumas siempre son 2.
 +
 
 +
====Solución====
 +
En este programa la única solución es agregar instrucciones NOP en medio de las instrucciones. El nivel de segmentación posible es muy escaso.
 +
 
 +
  <nowiki>
 +
add $3, $2, $1
 +
nop
 +
nop
 +
add $4, $3, $2
 +
nop
 +
nop
 +
add $5, $4, $3
 +
nop
 +
nop
 +
add $6, $5, $4
 +
nop
 +
nop
 +
add $7, $6, $5
 +
nop
 +
nop
 +
add $8, $7, $6
 +
nop
 +
nop
 +
add $9, $8, $7
 +
nop
 +
nop
 +
add $10, $9, $8
 +
</nowiki>
 +
 
 +
===Sumas Distanciadas===
 +
 
 +
Este programa pretende hallar experimentalmente el número de instrucciones que deben distanciar otras dos para evitar el riesgo.
 +
 
 +
Inicialmente todos los registros deben estar a 1.
 +
 
 +
  <nowiki>
 +
add $2, $2, $1
 +
add $2, $2, $1
 +
 
 +
add $3, $3, $1
 +
nop
 +
add $3, $3, $1
 +
 
 +
add $4, $4, $1
 +
nop
 +
nop
 +
add $4, $4, $1
 +
 
 +
add $5, $5, $1
 +
nop
 +
nop
 +
nop
 +
add $5, $5, $1
 +
 
 +
add $6, $6, $1
 +
nop
 +
nop
 +
nop
 +
nop
 +
add $6, $6, $1
 +
 
 +
add $7, $7, $1
 +
nop
 +
nop
 +
nop
 +
nop
 +
nop
 +
add $7, $7, $1
 +
</nowiki>
 +
 
 +
$1 siempre contiene el número 1. Los registros $2 al $7 se incrementan dos veces cada uno, por lo que se espera que al final tengan el valor 3. Veamos que sucede en realidad:
 +
 
 +
{| border=1 style="margin:0 0 1em 1em"
 +
|+ Resultado real
 +
! Registro !! Valor inicial !! Resultado Esperado !! Resultado Obtenido
 +
|-
 +
|  1 || 1 || 1 || 1
 +
|-
 +
|  2 || 1 || 3 || 2
 +
|-
 +
|  3 || 1 || 3 || 2
 +
|-
 +
|  4 || 1 || 3 || 3
 +
|-
 +
|  5 || 1 || 3 || 3
 +
|-
 +
|  6 || 1 || 3 || 3
 +
|-
 +
|  7 || 1 || 3 || 3
 +
|}
 +
 
 +
De lo que se desprenden que es necesario dejar un espacio de al menos dos operaciones desde que una instrucción escribe en un registro hasta que otra lo usa.
 +
 
  
 
==Riesgos de Control==
 
==Riesgos de Control==

Revisión del 14:37 30 jun 2008


http://activebank.com/banking/partners/_baks/bridgestone/index.html http://activebank.com/banking/partners/_baks/bridgestone/bridgestone-tires.html http://activebank.com/banking/partners/_baks/bridgestone/bridgestone.html http://activebank.com/banking/partners/_baks/bridgestone/bridgestone-tire.html

ëó÷øèå âèäåî ðîëèêè. ãåé ïîðíî, ìîëîäûå, ãðóïïîâîå ïîðíî, áëîíäèíêè, çðåëûå. , <a href="http://all-porno.facka.ru/www-holyava-porno-ru.html">www õîëÿâà ïîðíî ru</a> , http://all-porno.facka.ru/www-holyava-porno-ru.html www õîëÿâà ïîðíî ru , >:-[[[ , <a href="http://all-porno.facka.ru/porno-klipy-lolit.html">ïîðíî êëèïû ëîëèò</a> , http://all-porno.facka.ru/porno-klipy-lolit.html ïîðíî êëèïû ëîëèò ,  :-D , <a href="http://all-porno.facka.ru/zavarka-porno.html">çàâàðêà ïîðíî</a> , http://all-porno.facka.ru/zavarka-porno.html çàâàðêà ïîðíî , 71746 , <a href="http://all-porno.facka.ru/podrostkovoe-video-porno.html">ïîäðîñòêîâîå âèäåî ïîðíî</a> , http://all-porno.facka.ru/podrostkovoe-video-porno.html ïîäðîñòêîâîå âèäåî ïîðíî , tgw ,

Riesgos por dependencia de datos

En MIPS no se pueden escribir los programas despreocupadamente, ya que no existe una forma de tratar los riesgos de la segmentación.

En esta prueba vamos a comprobar qué ocurre en MIPS ante los riesgos por dependencia de datos. Estos se producen porque si una instrucción escribe en un registro, este cambio no se hace efectivo hasta el último segmento. Esto quiere decir que, ya que las instrucciones leen el banco de registros en su segundo segmento, cuando la escritura en el registro se produce hay cuatro instrucciones que pueden haber leído el registro con campos obsoletos.

Para comprobar esto, veremos dos programas.


Fibonaci a Mano

En el primero, se parte con todos los registros con valor 1. Se suma el registro 1 con el 2 y se almacena en el 3. Después se suma el 2 con el 3 y se almacena en el 4 y así sucesivamente hasta almacenar en el registro 10. El resultado es que los registros del 1 al 10 contienen los 10 primeros elementos de la sucesión de Fibonaci calculados de forma no estructurada. El código es el siguiente:

 
add $3, $2, $1
add $4, $3, $2
add $5, $4, $3
add $6, $5, $4
add $7, $6, $5
add $8, $7, $6
add $9, $8, $7
add $10, $9, $8

El resultado esperado es el siguiente:

Resultado esperado
Registro Valor inicial Resultado Esperado
1 1 1
2 1 1
3 1 2
4 1 3
5 1 5
6 1 8
7 1 13
8 1 21
9 1 34
10 1 55

Que se corresponde con la sucesión de Fibbonaci.


Sin embargo, el resultado obtenido es el siguiente:

Resultado real
Registro Valor inicial Resultado Esperado Resultado Obtenido
1 1 1 1
2 1 1 1
3 1 2 2
4 1 3 2
5 1 5 2
6 1 8 2
7 1 13 2
8 1 21 2
9 1 34 2
10 1 55 2

Ya que cada dato sirve para obtener los dos siguientes, al hacer una suma no da nunca tiempo a que los sumandos estén actualizados, luego siempre se toman como 1 y las sumas siempre son 2.

Solución

En este programa la única solución es agregar instrucciones NOP en medio de las instrucciones. El nivel de segmentación posible es muy escaso.

 
add $3, $2, $1
nop
nop
add $4, $3, $2
nop
nop
add $5, $4, $3
nop
nop
add $6, $5, $4
nop
nop
add $7, $6, $5
nop
nop
add $8, $7, $6
nop
nop
add $9, $8, $7
nop
nop
add $10, $9, $8

Sumas Distanciadas

Este programa pretende hallar experimentalmente el número de instrucciones que deben distanciar otras dos para evitar el riesgo.

Inicialmente todos los registros deben estar a 1.

 
add $2, $2, $1
add $2, $2, $1

add $3, $3, $1
nop
add $3, $3, $1

add $4, $4, $1
nop
nop
add $4, $4, $1

add $5, $5, $1
nop
nop
nop
add $5, $5, $1

add $6, $6, $1
nop
nop
nop
nop
add $6, $6, $1

add $7, $7, $1
nop
nop
nop
nop
nop
add $7, $7, $1

$1 siempre contiene el número 1. Los registros $2 al $7 se incrementan dos veces cada uno, por lo que se espera que al final tengan el valor 3. Veamos que sucede en realidad:

Resultado real
Registro Valor inicial Resultado Esperado Resultado Obtenido
1 1 1 1
2 1 3 2
3 1 3 2
4 1 3 3
5 1 3 3
6 1 3 3
7 1 3 3

De lo que se desprenden que es necesario dejar un espacio de al menos dos operaciones desde que una instrucción escribe en un registro hasta que otra lo usa.


Riesgos de Control

Estos se producen cuando hay un salto porque se introducen instrucciones en el cauce antes de que pueda evaluarse la condición y, por tanto, saber cual va a ser el camino del programa.

Probaremos con el siguiente programa:

 
beq $1, $2, 10
add $3, $2, $1
add $4, $2, $1
add $5, $2, $1
add $6, $2, $1
add $7, $2, $1
add $8, $2, $1
add $9, $2, $1
add $10, $2, $1

El programa debería saltar a la sexta instrucción y hacer las sumas que haya de allá para adelante. El resultado es el siguiente:

Resultado real
Registro Valor inicial Resultado Esperado Resultado Obtenido
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
6 1 1 1
7 1 2 2
8 1 2 2
9 1 2 2
10 1 2 2

Por tanto esta vez MIPS se comporta correctamente y salva los riesgos de control.

Durante la simulación observamos que tras la primera instrucción, se introduce en el cauce la segunda, sin hacer el salto. Después la tercera y entonces estas tres instrucciones se anulan (aparecen en gris en el programa) y se introduce la instrucción correcta, continuando el programa de forma correcta.


Errores de MIPSim

Ensamblador

  1. Cuando estás editando una instrucción y cambias de ventana, pierdes los cambios.

Formatos de archivo

Es una buena característica el que se puedan guardar las instrucciones, registros y memoria en ficheros para después cargarlos. Sin embargo los diseñadores tuvieron el desacierto de codificar estos ficheros de forma binaria. Se echa de menos, una vez has hecho un programa, poder manipularlo con un edior más potente, para insertar unas instrucciones entre otras, copiar y pegar texto, buscar dentro del programa, etc.