Entradas

Mostrando las entradas etiquetadas como computación

Optimizaciones en paralelo (I)

Imagen
Hace unos días leí acerca del procesador de la consola PS3 y su capacidad para realizar varias operaciones aritméticas en una sola instrucción . Es decir, dado que tiene un bus de 128 bits, podría sumar 4 valores de 32 bits en una operación. Me sirvió para darle vueltas a la cabeza e intentar hacer lo mismo en mi ordenador. La anchura del bus de un procesador es equivalente al número de cifras que puede tener la pantalla de una calculadora simple, sólo que en lugar de tratarse de dígitos decimales (del 0 al 9) son dígitos binarios (0 ó 1). El planteamiento es sencillo: supongamos que tenemos una calculadora de 12 dígitos y necesitamos sumar cuatro parejas de números de tres cifras -suponiendo que estamos seguros de que nunca nos vamos a pasar de 999-. Por ejemplo: 293 + 266 496 + 357 459 + 330 458 + 471 En lugar de realizar cuatro operaciones y dejar nueve ceros a la izquierda, podemos agrupar los números y "pegarlos" en dos sumandos: 293.496.459.458...

Desafiando las leyes de la computación (II)

Imagen
¡Hola a todos de nuevo! Después de casi seis meses sin escribir, vuelvo al blog con una nueva meta: refutar el problema de la parada de Alan Turing . El problema de la parada enuncia, a grandes rasgos, que es imposible escribir un programa que detecte que otro se bloquearía en algún caso. Nosotros lo hemos complicado aún más: ¿Se puede hacer un programa que detecte que él mismo se ha bloqueado? ¡Y hemos encontrado la forma! La solución es muy sencilla: construimos una aplicación con dos hebras que se envían señales entre sí . Si una de ellas se bloquea, la otra se daría cuenta al enviar señales pero no recibir respuestas. Presentamos un programa que se divide en dos hebras: una de ellas dibuja figuras en memoria, y la otra representa en pantalla lo que la primera ha escrito. La hebra principal envía cada segundo una señal a la auxiliar, y ésta devuelve una respuesta. Si tarda más de medio segundo en hacerlo, la primera mostrará una alerta. En el programa encontramo...

Desafiando las leyes de la computación (I)

Imagen
¿Decíais que no? ¿Que un programa se bloquea por entrar en un bucle infinito? Bueno, hablemos de ello. Para los más profanos, un bucle es un fragmento de código que se repite , atendiendo a una condición. Mientras ésta se cumpla, el bucle sigue en funcionamiento. Claro que la limitación que impongamos es harina de otro costal. No vamos a entrar en detalles de programación. El bucle de Manolo , así bautizado esta mañana en una clase de Informática, juega con esta cláusula e introduce el concepto de falso infinito , que nos acabamos de inventar. for (i = 1; i > 0; i++) { } ¿Qué ocurre con esta sentencia? ¿Es un bucle infinito? Pues sí, pero no: es un bucle de Manolo. Lo que expresa es lo siguiente: Sea i un valor numérico que, inicialmente, vale 1 . Mientras i sea estrictamente mayor que 0 , ejecutar el código entre llaves e incrementar i en una unidad. Visto desde un punto de vista matemático, dado que los números son infinitos, el programa que impleme...