Este programa fue escrito por Oskar Linde y nuevamente hallado__ en el grupo
de noticias. Fue construido para mostrar como el hecho de que el recolector
sea conservativo puede hacer que al leer datos binarios hayan muchos *falsos
Este programa fue escrito por Oskar Linde y nuevamente hallado__ en el grupo
de noticias. Fue construido para mostrar como el hecho de que el recolector
sea conservativo puede hacer que al leer datos binarios hayan muchos *falsos
accesibles desde el *root set* del grafo de conectividad.
__ http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=46407
accesibles desde el *root set* del grafo de conectividad.
__ http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=46407
Tiempo total de ejecución de Dil_ al generar la documentación completa del
código de Tango_ en función del valor de ``MAX_DEPTH``. El rombo no
Tiempo total de ejecución de Dil_ al generar la documentación completa del
código de Tango_ en función del valor de ``MAX_DEPTH``. El rombo no
recolector debe debe ser conservativo en este caso, y escanear esa palabra
como si fuera un puntero.
recolector debe debe ser conservativo en este caso, y escanear esa palabra
como si fuera un puntero.
En la figura :vref:`fig:sol-ptrmap-blk` se puede ver, como continuación del
ejemplo anterior, como se almacenaría en memoria un objeto del tipo ``S``.
En la figura :vref:`fig:sol-ptrmap-blk` se puede ver, como continuación del
ejemplo anterior, como se almacenaría en memoria un objeto del tipo ``S``.
direcciones bajas. La opción ``-R`` solamente desactiva la componente azarosa
al momento de asignar direcciones.
direcciones bajas. La opción ``-R`` solamente desactiva la componente azarosa
al momento de asignar direcciones.
Variación entre corridas para TBGC. La medición está efectuada utilizando
los valores máximo, mínimo y media estadística de 20 corridas, utilizando
Variación entre corridas para TBGC. La medición está efectuada utilizando
los valores máximo, mínimo y media estadística de 20 corridas, utilizando
realizarse utilizando el desvío estándar en vez de la amplitud máxima, pero
en este cuadro se quiere ilustrar la variación máxima, no la típica.
realizarse utilizando el desvío estándar en vez de la amplitud máxima, pero
en este cuadro se quiere ilustrar la variación máxima, no la típica.
Ambas opciones, reducen notablemente la variación en los resultados (ver
cuadro :vref:`t:sol-setarch`). Esto probablemente se debe a la naturaleza
conservativa del recolector, dado que la probabilidad de tener *falsos
Ambas opciones, reducen notablemente la variación en los resultados (ver
cuadro :vref:`t:sol-setarch`). Esto probablemente se debe a la naturaleza
conservativa del recolector, dado que la probabilidad de tener *falsos
aunque las pruebas en la que hay concurrencia involucrada, se siguen viendo
grandes variaciones, que probablemente estén vinculadas a problemas de
sincronización que se ven expuestos gracias al indeterminismo inherente a los
aunque las pruebas en la que hay concurrencia involucrada, se siguen viendo
grandes variaciones, que probablemente estén vinculadas a problemas de
sincronización que se ven expuestos gracias al indeterminismo inherente a los
Resultados para ``bigarr`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``bigarr`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``bigarr`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``bigarr`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``concpu`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``concpu`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``concpu`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``concpu`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``conalloc`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``conalloc`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``conalloc`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``conalloc`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``split`` (utilizando 1 procesador). Se presenta el mínimos
(en negro), la media centrada entre dos desvíos estándar (en gris), y el
máximo (en blanco) calculados sobre 50 corridas (para tiempo de ejecución)
o 20 corridas (para el resto).
Resultados para ``split`` (utilizando 1 procesador). Se presenta el mínimos
(en negro), la media centrada entre dos desvíos estándar (en gris), y el
máximo (en blanco) calculados sobre 50 corridas (para tiempo de ejecución)
o 20 corridas (para el resto).
Resultados para ``mcore`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``mcore`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``mcore`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``mcore`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``rnddata`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``rnddata`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
El aumento en el variación de los tiempos de ejecución al usar marcado preciso
probablemente se debe a lo siguiente: con marcado conservativo, debe estar
sobreviviendo a las recolecciones el total de memoria pedida por el programa,
El aumento en el variación de los tiempos de ejecución al usar marcado preciso
probablemente se debe a lo siguiente: con marcado conservativo, debe estar
sobreviviendo a las recolecciones el total de memoria pedida por el programa,
*stack* y la memoria estática, se sigue marcado de forma conservativa, por lo
tanto dependiendo de los valores (aleatorios) generados por la prueba, aumenta
*stack* y la memoria estática, se sigue marcado de forma conservativa, por lo
tanto dependiendo de los valores (aleatorios) generados por la prueba, aumenta
memoria consumida y el tiempo de ejecución.
No se muestran los resultados para más de un procesador por ser demasiado
memoria consumida y el tiempo de ejecución.
No se muestran los resultados para más de un procesador por ser demasiado
Resultados para pruebas pequeñas
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Resultados para pruebas pequeñas
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Resultados para ``bh`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``bh`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Memoria pedida y asignada para ``bh`` según modo de marcado conservativo
o preciso (acumulativo durante toda la vida del programa).
Memoria pedida y asignada para ``bh`` según modo de marcado conservativo
o preciso (acumulativo durante toda la vida del programa).
Resultados para ``bisort`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``bisort`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
usa marcado conservativo y preciso. Estos valores fueron tomados usando la
opción ``malloc_stats_file`` (ver :ref:`sol_stats`).
usa marcado conservativo y preciso. Estos valores fueron tomados usando la
opción ``malloc_stats_file`` (ver :ref:`sol_stats`).
Resultados para ``em3d`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``em3d`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``tsp`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``tsp`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
este caso el marcado preciso y el uso de *early collection** no parecen
ayudar; por el contrario, aumentan levemente el tiempo de pausa real.
este caso el marcado preciso y el uso de *early collection** no parecen
ayudar; por el contrario, aumentan levemente el tiempo de pausa real.
Resultados para ``voronoi`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``voronoi`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``voronoi`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``voronoi`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
para TBGC se ve una variación entre los resultados muy grande que desaparece
al cambiar a CDGC, esto no puede ser explicado por esa optimización. En
general la disminución de la variación de los resultados hemos visto que está
para TBGC se ve una variación entre los resultados muy grande que desaparece
al cambiar a CDGC, esto no puede ser explicado por esa optimización. En
general la disminución de la variación de los resultados hemos visto que está
-asociada al incremento en la precisión en el marcado, dado que los falsos
-punteros ponen una cuota de aleatoriedad importante. Pero este tampoco parece
-ser el caso, ya que no se observan cambios apreciables al pasar a usar marcado
-preciso.
+asociada al incremento en la precisión en el marcado, dado que los *falsos
+positivos* ponen una cuota de aleatoriedad importante. Pero este tampoco
+parece ser el caso, ya que no se observan cambios apreciables al pasar a usar
+marcado preciso.
Lo que se observa en esta oportunidad es un caso patológico de un mal factor
de ocupación del *heap* (ver :ref:`sol_ocup`). Lo que muy probablemente está
Lo que se observa en esta oportunidad es un caso patológico de un mal factor
de ocupación del *heap* (ver :ref:`sol_ocup`). Lo que muy probablemente está
Resultados para pruebas reales
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Resultados para pruebas reales
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Resultados para ``dil`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``dil`` (utilizando 1 procesador). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
utilizando CDGC con la opción ``min_free=0`` se obtiene una media del orden de
los 80 segundos, bastante más alta que el tiempo obtenido para TBGC.
utilizando CDGC con la opción ``min_free=0`` se obtiene una media del orden de
los 80 segundos, bastante más alta que el tiempo obtenido para TBGC.
Resultados para ``dil`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
Resultados para ``dil`` (utilizando 4 procesadores). Se presenta el
mínimos (en negro), la media centrada entre dos desvíos estándar (en gris),
y el máximo (en blanco) calculados sobre 50 corridas (para tiempo de
ejecución) o 20 corridas (para el resto).
En el cuadro :vref:`t:sol-prec-mem-dil` se puede observar la diferencia de
memoria desperdiciada entre el modo conservativo y preciso.
En el cuadro :vref:`t:sol-prec-mem-dil` se puede observar la diferencia de
memoria desperdiciada entre el modo conservativo y preciso.
Memoria pedida y asignada para ``dil`` según modo de marcado conservativo
o preciso (acumulativo durante toda la vida del programa).
Memoria pedida y asignada para ``dil`` según modo de marcado conservativo
o preciso (acumulativo durante toda la vida del programa).
============== ============== ============== =================
El pequeño incremento en el tiempo total de ejecución podría estar dado por la
============== ============== ============== =================
El pequeño incremento en el tiempo total de ejecución podría estar dado por la
del *heap*; se recuerda que el *stack* y memoria estática se siguen marcado de
forma conservativa, incluso en modo preciso.
del *heap*; se recuerda que el *stack* y memoria estática se siguen marcado de
forma conservativa, incluso en modo preciso.