Evitar navegación.
Principal

Php calculando PI

Ahora que estamos en un nuevo servidor dedicado quería hacer unas pequeñas pruebas de rendimiento, para ello he utilizado el cálculo del número Pi que es uno de los sistemas más populares, para ello voy a comparar los datos de el actual servidor (Media Temple) con el antiguo (Servage).

Para ello el script tiene una variable llamada precisión la cual nos servirá para endurecer o suavizar la dificultad del cálculo del número Pi, aquí os dejo el código fuente del script con su correspondiente explicación.

function bcpi($precision=30){
$exactitud= ($precision+5)*45/32;
//Utilizar $precision a 180 tarda más o menos unos 30 segundos
bcscale($precision+5);
$n = 1;
$bcatan1 = 0;
$bcatan2 = 0;
while($n < $exactitud){
//Funciones
$bcatan1 = bcadd($bcatan1, bcmul(bcdiv(pow(-1, $n+1), $n * 2 - 1), bcpow(0.2, $n * 2 -1)));
$bcatan2 = bcadd($bcatan2, bcmul(bcdiv(pow(-1, $n+1), $n * 2 - 1), bcpow(bcdiv(1,239), $n * 2 -1)));
++$n;
}
return bcmul(4,bcsub(bcmul(4, $bcatan1),$bcatan2),5);
}

Esta no es la manera más eficaz de calcularlo pero si es la más fácil combinando la fórmula Machin y la serie de Taylor.

Te preguntarás porque no utilizar la función original pi(), pues muy simple porque su precisión es limitada.

La ejecución de este script es muy lenta y el tiempo necesitado para su cálculo aumenta a medida que subimos el valor de la variable precision.

Hay que aclarar que la variable exactitud no es lo mismo que la variable precision.

Servage

La ejecución con precision 1, tardó 0,00 segundos en su ejecucion
La ejecución con precision 11, tardó 0,02 segundos en su ejecucion
La ejecución con precision 21, tardó 0,10 segundos en su ejecucion
La ejecución con precision 31, tardó 0,38 segundos en su ejecucion
La ejecución con precision 41, tardó 3,24 segundos en su ejecucion
La ejecución con precision 51, tardó 2,05 segundos en su ejecucion
La ejecución con precision 61, tardó 2,72 segundos en su ejecucion
La ejecución con precision 71, tardó 5,99 segundos en su ejecucion
La ejecución con precision 81, tardó 11,59 segundos en su ejecucion
La ejecución con precision 91, tardó 24,40 segundos en su ejecucion
La ejecución con precision 101, tardó 28,88 segundos en su ejecucion

Media Temple

La ejecución con precision 1, tardó 0,00 segundos en su ejecucion
La ejecución con precision 11, tardó 0,01 segundos en su ejecucion
La ejecución con precision 21, tardó 0,06 segundos en su ejecucion
La ejecución con precision 31, tardó 0,20 segundos en su ejecucion
La ejecución con precision 41, tardó 0,72 segundos en su ejecucion
La ejecución con precision 51, tardó 1,45 segundos en su ejecucion
La ejecución con precision 61, tardó 2,84 segundos en su ejecucion
La ejecución con precision 71, tardó 5,23 segundos en su ejecucion
La ejecución con precision 81, tardó 10,25 segundos en su ejecucion
La ejecución con precision 91, tardó 15,12 segundos en su ejecucion
La ejecución con precision 101, tardó 24,28 segundos en su ejecucion

Conclusión

Cómo se puede apreciar hay una notable diferencia de velocidad de cálculo del script de un servidor a otro... lo cual me alegra bastante.

Si alguien esta interesado en hacer una prueba de rendimiento para su servidor aquí puede conseguir el código fuente.

Por cierto en el tiempo que he estado escribiendo este post he visto que Anieto ha escrito sobre el mismo script.

Fuente original del script: WebDevLogs

Enlaces Relacionados

Generar passwords accesibles con Php
Codigo Fuente del generador de passwords en PHP
Ejemplo de ejecución del script
PHP y MySql una estrecha relación
5 cosas que no sabías hacer con PHP
Generar documentos OpenOffice con PHP
Nueva versión de Notepad++
Hola Mundo!
Identificar las consultas más lentas de MySql
Crea sencillas gráficas con MySql
Programar un script PHP para saber quién está en línea
Consejos para optimizar PHP
Editando en Opera páginas web en tiempo real

Enlaces Relacionados


Este es el resultado en

Este es el resultado en DreamHost (plan de host compartido)

La ejecución con precision 1, tardó 0,00 segundos en su ejecucion3.14159
La ejecución con precision 11, tardó 0,01 segundos en su ejecucion3.14159
La ejecución con precision 21, tardó 0,07 segundos en su ejecucion3.14159
La ejecución con precision 31, tardó 0,28 segundos en su ejecucion3.14159
La ejecución con precision 41, tardó 1,43 segundos en su ejecucion3.14159
La ejecución con precision 51, tardó 2,36 segundos en su ejecucion3.14159
La ejecución con precision 61, tardó 4,91 segundos en su ejecucion3.14159
La ejecución con precision 71, tardó 8,20 segundos en su ejecucion3.14159
La ejecución con precision 81, tardó 15,44 segundos en su ejecucion3.14159
La ejecución con precision 91, tardó 22,07 segundos en su ejecucion3.14159
La ejecución con precision 101, tardó 35,95 segundos en su ejecucion

Nueva versión con una velocidad más rápida

La nueva versión del código está aquí, él puede calcular 1000 decimales del pi en 5 segundos.

Mola, pero no deja de ser un

Mola, pero no deja de ser un benchmark sencillo que no te da una medida real del rendimiento del servidor (sólo de la potencia de cálculo por fuerza bruta). Hay más aspectos que influyen en el rendimiento (memoria, transferencia a/desde disco...) No estoy muy puesto en estos temas, pero seguro que buscando un poco encuentras un benchmark integral para estos menesteres. Si no siempre puedes seleccionar una serie de páginas, medir los tiempos de respuesta y luego comparar con otra/s máquina/s, esa sería una buena medida del rendimiento del servidor.

Prueba con este otro codigo,

Prueba con este otro codigo, el problema se debe a que la ejecucion del script es demasiado larga, subiendo el valor inicial del contador i la ejecucion del script tendra que realizar menos operaciones...
http://www.tufuncion.com/archivos/prueba-pi2.txt

valores parecidos

manu, lo que habías pedido...

3.14159
La ejecución con precision 81, tardó 9,79 segundos en su ejecucion3.14159
La ejecución con precision 91, tardó 14,08 segundos en su ejecucion

valores parecidos...

es verdad los resultados son

es verdad los resultados son casi identicos

No pasa de 81

Del 81 no pasa...

mejorable?

La ejecución con precision 1, tardó 0,00 segundos en su ejecucion
La ejecución con precision 11, tardó 0,01 segundos en su ejecucion
La ejecución con precision 21, tardó 0,05 segundos en su ejecucion
La ejecución con precision 31, tardó 0,20 segundos en su ejecucion
La ejecución con precision 41, tardó 0,64 segundos en su ejecucion
La ejecución con precision 51, tardó 1,39 segundos en su ejecucion
La ejecución con precision 61, tardó 2,68 segundos en su ejecucion
La ejecución con precision 71, tardó 4,72 segundos en su ejecucion
La ejecución con precision 81, tardó 9,59 segundos en su ejecucion

Eso en un hosting físicamente en España...

son buenos los resultados si

son buenos los resultados si los comparamaos con los de mi hosting dedicado en media temple, los datos mas significativos se obtendrian con precision 90 y 100, pero hay que hacer una pequña modificacion en el script, puse el limite en 81 porque sino el servidor excedia el tiempo limite de ejecucion, si puedes postea los resultados de 91 y 100...

Gracias

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato