<< Chapter < Page Chapter >> Page >

El desorden puede asumir muchas formas. Considere que en las secciones previas hemos batallado con grandes piezas de basura como las que puede usted encontrar en el armario de su sala: una tabla de planchar, palos de hockey y palos de billar. Ahora nos dedicaremos a cosas más pequeñas: una goma de borrar, una pelota de tenis y el sombrero que nadie usa. Aquí queremos mencionar unos cuantos. De entrada pedimos disculpas por cambiar los temas tanto, ¡pero así es la naturaleza de limpiar un armario!

Conversiones de tipos de datos

Las sentencias que incluyen conversiones de tipos a tiempo de ejecución producen algo de penalización del rendimiento cada vez que se ejecutan. Si la sentencia se localiza en una porción muy activa del programa, la penalización total puede resultar significativa.

Las personas tienen sus razones para escribir aplicaciones que mezclan tipos. A menudo es cuestión de ahorrar espacio de memoria, ancho de banda de memoria, o tiempo. En el pasado, por ejemplo, los cálculos de doble precisión tomaban el doble que sus contrapartes de precisión sencilla, así que si alguno de tales cálculos podía arreglarse para hacerse en precisión sencilla, beneficiaba al rendimiento. Actualmente, los cálculos en precisión sencilla pueden tardar más tiempo que aquellos en doble precisión de registro a registro. Pero cualquier tiempo ahorrado realizando parte de los cálculos en precisión sencilla y la otra parte en doble precisión, debe medirse contra la sobrecarga adicional causada por las conversiones de tipos a tiempo de ejecución. En el siguiente código, la suma de A(I) con B(I) tiene tipos mezclados :


INTEGER NUMEL, I PARAMETER (NUMEL = 1000)REAL*8 A(NUMEL) REAL*4 B(NUMEL)DO I=1,NUMEL A(I) = A(I) + B(I)ENDDO

En cada iteración, B(I) debe convertirse a doble precisión antes de que pueda ocurrir la suma. Usted no ve la conversión en el código fuente, pero está ahí, y consume tiempo.

Advertencia para los programadores de C: en el libro de C de Kernighan y Ritchie (K&R) C, todos los cálculos de punto flotante que aparecen en los programas son en doble precisión - incluso si todas las variables involucradas están declaradas como float . Es posible que usted escriba una aplicación K&R completa en una precisión, si bien sufrirá la penalización derivada de muchas conversiones de tipos.

Otro error relacionado con los tipos de datos, es usar operaciones de caracteres en las pruebas de las sentencias IF. En muchos sistemas, las operaciones sobre caracteres tienen un rendimiento más pobre que sus equivalentes enteras, dado que se realizan mediante llamados a procedimientos. Por lo mismo, puede que los optimizadores no revisen el código que usa variables de tipo caracter como buenos candidatos para optimización. Por ejemplo, el siguiente código:


DO I=1,10000 IF ( CHVAR(I) .EQ. ’Y’ ) THENA(I) = A(I) + B(I)*C ENDIFENDDO

puede escribirse mejor usando una variable entera para indicar si debe o no realizarse el cálculo:


DO I=1,10000 IF ( IFLAG(I) .EQ. 1 ) THENA(I) = A(I) + B(I)*C ENDIFENDDO

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cómputo de alto rendimiento. OpenStax CNX. Sep 02, 2011 Download for free at http://cnx.org/content/col11356/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?

Ask