I desarrollar GNU Paralelo. Para cada versión me gustaría probar si la versión que estoy a punto de estrenar tiene una pérdida de memoria.
Puedo medir el uso de la memoria. Lamentablemente, el uso varía ligeramente en la misma entrada. El uso de la memoria es: base + fuga. La base varía ligeramente y no se espera una pérdida de 1 bit por puesto de trabajo. Lo que quiero es detectar si hay una mayor pérdida de la esperada fuga.
Para una liberación de la base es de entre, digamos, 13050 y 13150 kB y otra de liberación puede ser entre 15000 y 15500 kB. Están más o menos distribuidos normalmente.
Es muy fácil ver si hay una pérdida de memoria: basta con comparar las carreras de 1000 puestos de trabajo para 1000000 de puestos de trabajo y si hay una fuga de 1 byte/trabajo, entonces el uso aumentará por 1000000 bytes que es más grande que el rango de la base del uso de la memoria.
Pero la ejecución de 1000000 de los trabajos se llevará alrededor de 10000 segundos (1 trabajo toma alrededor de 0.01 segundos para correr). Entonces, ¿hay una manera más rápida en la que me puedo determinar si es probable que un mayor de lo esperado fuga?
Estoy pensando en correr 10 carreras con 1000 puestos de trabajo y 10 carreras con más de 2000 puestos de trabajo y la comparación de las distribuciones de uso de la memoria de estos. Si las distribuciones son significativamente diferentes, a continuación, hay una fuga. ¿Cómo puedo hacer eso?
Intuitivamente puedo ver que usted necesita menos carreras y menos puestos de trabajo si la fuga es grande (por ejemplo, 500 bytes por puesto de trabajo), que si la fuga es pequeña (digamos, 2 bytes por puesto de trabajo), y por lo tanto debería ser posible para detener mucho antes. ¿Cómo puedo averiguar cuánta ejecuta y cómo muchos de los trabajos que se deben ejecutar para obtener un 99% de certeza?
(Yo soy un novato en estadística, R y Python, y avanzado en Perl. De modo que una solución tendrá que mostrar el código, no sólo se refieren a algunos de los métodos estadísticos; también el código que le da un "sí/no" es preferible a "eyeballing").
((Lo ideal sería que me quieras 2 piezas de código: que puedo decir "Usted tiene 3 minutos para que se ejecute. Después de que quiero saber que tan seguro acerca de un memleak de 1 byte, 10 bytes, 100 bytes, y 1000 bytes", y la segunda versión que me muestran las certezas continuamente mientras se está ejecutando carreras más, para recoger más puntos de datos.))