b'\n_START_ARTICLE_\nDhrystone\n_START_PARAGRAPH_\nEl Dhrystone es un peque\xc3\xb1o benchmark sint\xc3\xa9tico que pretende ser representativo de programaci\xc3\xb3n entera de sistemas. Est\xc3\xa1 basado en estad\xc3\xadsticas publicadas sobre uso de particularidades de los lenguajes de programaci\xc3\xb3n, sistemas operativos, compiladores, editores, etc.\n_START_SECTION_\nHistoria y caracter\xc3\xadsticas generales\n_START_PARAGRAPH_\nLa publicaci\xc3\xb3n original de este benchmark se puede ver en CACM 27,10 (Oct. 1984), 1013-1030, por Reinkol P. Weicker de Siemens-Nixdorf Information System. Originalmente fue publicado en ADA, aunque hoy en d\xc3\xada la mayor\xc3\xada utiliza la versi\xc3\xb3n en C distribuida por Rick Richardson. La versi\xc3\xb3n 2 fue publicada en SIGPLAN Notices 23,8 (Ago. 1988), 49-62, junto con las reglas de medici\xc3\xb3n y en tres lenguajes: Ada, C y Pascal. Meses despu\xc3\xa9s sali\xc3\xb3 la \xc3\xbaltima versi\xc3\xb3n: la 2.1. La versi\xc3\xb3n 1 ya no se recomienda debido a que los compiladores actuales pueden eliminar mucho del "c\xc3\xb3digo muerto" del benchmark (sin embargo, los n\xc3\xbameros MIPS citados son frecuentemente extra\xc3\xaddos de la versi\xc3\xb3n 1). Su nombre representa un juego de palabras con su antecesor: el Whetstone ("wet" = mojado, "dry" = seco), su antecesor en el sentido de que fue tambi\xc3\xa9n una mezcla representativa bas\xc3\xa1ndose en programas existentes, pero los datos eran de programas cient\xc3\xadficos en lugar de comerciales._NEWLINE_Uno de sus usos actuales es como de otros benchmarks; sin embargo, su escasa representatividad y su alta sensibilidad frente a compiladores y optimizaciones desalientan su uso._NEWLINE_Es un benchmark sint\xc3\xa9tico y comercial._NEWLINE_Resultado:_NEWLINE_Intenta medir la velocidad del sistema en cuanto a rendimiento no num\xc3\xa9rico, expresando los resultados en DPS (instrucciones Dhrystones Por Segundo)._NEWLINE_El rendimiento de Dhyrstone se calcula a partir de la siguiente f\xc3\xb3rmula:_NEWLINE_Iteraciones Dhrystone por segundo = reloj del procesador * n\xc3\xbamero de pasadas / tiempo de ejecuci\xc3\xb3n. _NEWLINE_Para que el resultado sea v\xc3\xa1lido el c\xc3\xb3digo Dhrystone debe ser ejecutado al menos por dos segundos.\n_START_SECTION_\nCaracter\xc3\xadsticas\n_START_PARAGRAPH_\nContiene muchas instrucciones simples, llamadas a procedimiento y condicionales, y pocas de coma flotante y bucles. No realiza llamadas al sistema. Usa pocas variables globales y ejecuta operaciones con punteros. Est\xc3\xa1 compuesto por 12 procedimientos incluidos en un bucle de medida con 94 sentencias. No se puede variar su tama\xc3\xb1o. Est\xc3\xa1 compuesto por un 53% de instrucciones de asignaci\xc3\xb3n, 32% de instrucciones de control y un 15% de llamadas a procedimiento._NEWLINE_Dhrystone es compacto (no m\xc3\xa1s de 1,5 KB), ampliamente disponible en el dominio p\xc3\xbablico, y sencillo de ejecutar._NEWLINE_Por ser tan peque\xc3\xb1o el Dhrystone entra completamente en la cach\xc3\xa9 interna, de esta manera no mide el resto del sistema pero presenta la ventaja de que mide solamente la capacidad del procesador para trabajar con enteros._NEWLINE_El Dhrystone compara el rendimiento del procesador usando una m\xc3\xa1quina de referencia: la VAX 11/780 es la m\xc3\xa1quina que corre a 1 MIPS (logra 1757 Dhrystones por segundo)._NEWLINE_No se puede parametrizar, a diferencia del Whetstone donde los distintos tipos de instrucci\xc3\xb3n est\xc3\xa1n en bucles, aqu\xc3\xad los mismos no existen por lo que no se puede cambiar la importancia de cada tipo de instrucci\xc3\xb3n alterando la cantidad de veces que se itera cada bucle.\n_START_SECTION_\nProblemas\n_START_PARAGRAPH_\nUn considerable porcentaje del tiempo se gasta en funciones de manejo de cadenas de caracteres, lo que hace al test muy dependiente de la manera en que estas operaciones son ejecutadas (como ser c\xc3\xb3digo en l\xc3\xadnea, rutinas escritas en lenguaje ensamblador, etc.). En pocas palabras, es muy susceptible a optimizaciones de rutinas cr\xc3\xadticas por los fabricantes. El Dhrystone en realidad lo que refleja es m\xc3\xa1s bien el rendimiento del compilador y sus bibliotecas que el procesador en s\xc3\xad mismo._NEWLINE_Particularmente Dhrystone contiene dos instrucciones en las cuales el lenguaje de programaci\xc3\xb3n y su traducci\xc3\xb3n se llevan el mayor tiempo de ejecuci\xc3\xb3n: una asignaci\xc3\xb3n de cadena de caracteres (en el procedimiento Proc_0 / main) y una comparaci\xc3\xb3n de cadena de caracteres (en la funci\xc3\xb3n Func_2). En la VAX 11/785 con el Berkeley UNIX (4.2) los compiladores consumieron 23% del tiempo en estas funciones de cadenas de caracteres. En m\xc3\xa1quinas RISC (donde se gasta menor tiempo en secuencias de llamadas a procedimiento que en la VAX) y con mejores compiladores optimizadores, el porcentaje var\xc3\xada del 21% al 65%, claramente por encima de las aplicaciones t\xc3\xadpicas de hoy en d\xc3\xada. Es muy dif\xc3\xadcil que existan aplicaciones que posean una proporci\xc3\xb3n tan importante de uso de bibliotecas de C o incluso de llamadas a bibliotecas espec\xc3\xadficas._NEWLINE_El manejo de cadena de caracteres es muy distinto en Ada y Pascal, donde estas son parte del lenguaje, es por esto que ejecutar en C siempre otorga resultados peores y que se consume tanto tiempo en ellas (fue dise\xc3\xb1ado considerando las habilidades de Ada para manejarse).\n_START_SECTION_\nFalta de certificaci\xc3\xb3n\n_START_PARAGRAPH_\nNo existe un proceso de certificaci\xc3\xb3n necesario para citar los resultados del Dhrystone. Esto es una ventaja en cuanto a la facilidad de trabajar con los resultados, pero una desventaja por el hecho de que uno debe examinar bien estos resultados cuando son externos antes de llegar a alguna conclusi\xc3\xb3n.\n_START_SECTION_\nEficiencia del compilador\n_START_PARAGRAPH_\nEs clave en el Dhrystone la dependencia del compilador y la tecnolog\xc3\xada de biblioteca usada - mucho m\xc3\xa1s que cualquier otro benchmark. Se han encontrado diferencias de hasta un 100% con la misma m\xc3\xa1quina pero diferentes compiladores_NEWLINE_ANSI C_NEWLINE_En lugar de usar el formato normal de Kernighan & Ritchie (K&R) muchas veces el c\xc3\xb3digo es alterado para cumplir con los formatos ANSI. Este cambio puede otorgar mucha m\xc3\xa1s informaci\xc3\xb3n para el compilador, lo cual redunda en una mejor optimizaci\xc3\xb3n.\n_START_SECTION_\nCombinar los Archivos Fuente\n_START_PARAGRAPH_\nCombinar los dos archivos fuentes en un m\xc3\xb3dulo habilita al compilador a ejecutar optimizaciones adicionales en todas las funciones simult\xc3\xa1neamente.\n_START_SECTION_\nC\xc3\xb3digo Inline\n_START_PARAGRAPH_\nHabilitar el inline de procedimientos puede mejorar el rendimiento. Con la disponibilidad del ANSI C la definici\xc3\xb3n de la funci\xc3\xb3n de cadena de caracteres no era parte del lenguaje; ahora s\xc3\xad, con lo que se permite expl\xc3\xadcitamente poner inline a las funciones de biblioteca. La regla Dhrystone "No usar inline en procedimientos para Dhrystone" se refiere s\xc3\xb3lo al nivel de procedimientos del usuario y no al de rutinas de biblioteca.\n_START_SECTION_\nForma de medir el resultado\n_START_PARAGRAPH_\nSe basa en el reloj del procesador y la cantidad de tiempo que se ejecuta es demasiado corta (algo m\xc3\xa1s de 2 segundos)._NEWLINE_Adaptar las bibliotecas de C para que acelere el c\xc3\xb3digo de Dhrystone puede alterar los resultados del benchmark de forma dr\xc3\xa1stica, aunque esto pueda influir negativamente en la performance de c\xc3\xb3digo t\xc3\xadpico.\n_START_SECTION_\nC\xc3\xb3digo fuente del Dhrystone\n_START_PARAGRAPH_\nEl c\xc3\xb3digo fuente consta de dos archivos, uno donde est\xc3\xa1 el programa principal y la definici\xc3\xb3n de procedimientos y funciones, en el segundo hay directivas de compilador e instrucciones simples. El programa en s\xc3\xad ejecuta un bucle una cantidad de veces tal que llegue a 2 segundos el tiempo de ejecuci\xc3\xb3n. Dentro del bucle se hacen asignaciones, llamadas a los distintos procedimientos (que tienen distinto tipo de instrucciones), definiciones de puntero y finalmente escribe en pantalla los datos para que no exista "c\xc3\xb3digo muerto". Previo a la visualizaci\xc3\xb3n en pantalla detiene el reloj para poder obtener el tiempo que consume y calcular as\xc3\xad los DPS.'