sábado, 28 de febrero de 2015

Segmentaciòn (Pipeline)

INTRODUCCIÒN 

 


El presente trabajo tiene como finalidad el mostrar a grandes razgos el funcionamiento interno de una computadora en otras palabras informaciòn relacionada a la arquitectura de computadoras, màs especificamente a una arquitectura paralela que hace uso de la segmentaciòn o pipiline Para ello es importante considerar la siguiente definiciòn como punto de :

La arquitectura de computadoras es el diseño conceptual y la estructura operacional fundamental de un sistema de computadora. Es decir, es un modelo y una descripción funcional de los requerimientos y las implementaciones de diseño para varias partes de una computadora, con especial interés en la forma en que la unidad central de proceso (CPU) trabaja internamente y accede a las direcciones de memoria.

Durante mucho tiempo los equipos de còmputo contaron con una arquitectura basada en el modelo de Von Neumann, pero con el tiempo fueron evidentes las limitaciones técnicas en cuanto a la velocidad de proceso que pueden alcanzar. Por ello actualmente se esta haciendo uso de arquitecturas alternativas que utilizan varias unidades de procesamiento, este tipo de computadoras tienen lo que se conoce como arquitecturas paralelas, las cuales de acuerdo al tipo de paralelismo que llevan a cabo se pueden clasificar de la siguiente manera:


Paralelismo interno (con una única CPU)

- Segmentació

- División funcional


Paralelismo explícito (con varias CPUs )

- SIMD, un solo flujo de instrucciones y múltiples datos

- MISD, varios flujos de instrucciones y uno solo de datos

- MIMD, arquitectura multiprocesador con varios flujos tanto de instrucciones como de datos
















PROCESADORES SEGMENTADOS


La segmentación (pipelining) es una técnica de implementación de procesadores que desarrolla el paralelismo a nivel intrainstrucción. Mediante la segmentación se puede solapar la ejecución de múltiples instrucciones. El procesamiento segmentado aprovecha la misma filosofía de trabajo de la fabricación en cadena: cada etapa de la segmentación (o Segmento) completa una parte (subtarea) de la tarea total. Los segmentos están conectados cada uno con el siguiente de forma que la salida de uno pasa a ser la entrada del siguiente. Así, los segmentos configuran un cauce a través del que se va procesando la tarea deseada (por ello, en algunas ocasiones, a los procesadores segmentados también se les llama procesadores encauzados o simplemente, cauces). Lo más interesante de la segmentación es que las diferentes subtareas pueden procesarse de forma simultánea, aunque sea sobre diferentes datos.

Una contribución clave de la segmentación es la posibilidad de comenzar una nueva tarea sin necesidad de que la anterior se haya terminado. La medida de la eficacia de un procesador segmentado no es el tiempo total transcurrido desde que se comienza una determinada tarea hasta que se termina (tiempo de latencia del procesador), sino el tiempo máximo que puede pasar entre la finalización de dos tareas consecutivas.

Evidentemente, la segmentación no es posible sin incrementar los recursos de proceso, de la misma manera que la fabricación en cadena no es posible sin aumentar el número de operarios. Por ello, los procesadores segmentados necesitan redundancia de muchos recursos: registros, circuitos aritméticos, etc.

Considérese una tarea, compuesta por n subtareas. Si estas subtareas se procesan de forma totalmente secuencial, el tiempo necesario para procesar la tarea total será la suma de los tiempos necesarios para la terminación de cada una de las subtareas. Por otra parte, para comenzar el tratamiento de una nueva tarea será necesario esperar ese mismo tiempo. Esto se debe a que habrá algunas unidades funcionales que serán necesarias para llevar a cabo varias de las subtareas y, por ello, esas subtareas no podrán superponerse en el tiempo.



Si, para procesar esa misma tarea, se emplea un procesador segmentado, basta que se haya terminado la primera subtarea para poder empezar a procesar una nueva tarea (véase la figura 2.2). En la citada figura puede verse el continuo flujo de tareas que se van procesando a través de los n segmentos encargados de procesar cada una de las subtareas. Puede observarse que el tiempo total de procesamiento de una tarea completa puede ser el mismo, aunque frecuentemente será mayor, que el tiempo empleado para el procesamiento secuencial de la misma tarea mostrado en la figura 2.1. Esto, sin embargo, carece de importancia, ya que lo verdaderamente importante es el ritmo al que las tareas van saliendo del procesador (velocidad de emisión de tareas). Al número de segmentos del procesador, n, se le llama, en muchas Al número de segmentos del procesador, profundidad de la segmentación.



Para que el tiempo de latencia del procesador segmentado sea el mínimo posible, es necesario que el procesador esté equilibrado, es decir, que todas las subtareas en que se ha dividido la tarea total tarden en procesarse el mismo tiempo. Esto es debido a que las tareas no podrán evolucionar al segmento siguiente hasta que no se haya terminado la subtarea más lenta. Por ello, si el procesador no está equilibrado, los segmentos más rápidos estarán cierto tiempo sin hacer trabajo alguno, lo que disminuirá el rendimiento del procesador.






 

RIESGOS DE LA SEGMENTACIÔN 




Hay circunstancias que pueden disminuir el rendimiento de un procesador segmentado debido a que provocan la detención del cauce. Estas circunstancias se denominan riesgos o conflictos. Existen tres clases de conflictos (Hennessy & Patterson, 2003):

Conflictos estructurales: son detenciones producidas en el procesador por insuficiencia del hardware, debido a que una etapa no puede avanzar porque el hardware necesario está siendo utilizado por otra.

Conflictos por dependencia de datos: surgen, principalmente, cuando una instrucción necesita los resultados de otra anterior, que todavía no los tiene disponibles, por no haberse terminado de ejecutar completamente.

Conflictos de control: se deben a las instrucciones de control de flujo, en que no se puede leerla instrucción siguiente hasta que no se conozca su dirección.










CONCLUSIONES

 Las demandas actuales en cuanto a procesamiento de informaciòn, optimizaciòn de procesos y minimizaciòn en su tiempo de ejecuciòn han permitido el desarrollo de nuevas tecnologìas para hacer frente a este tipo de problemas, en el àrea de la còmputaciòn nos encontramos con el uso de multiples procesadores simultàneamente (arquitecturas paralelas), que mejoran en gran medida los resultados en compraciòn con los obtenidos al hacer uso de equipos con otro tipo de arquitecturas.

Es por ello que actualmente nos encontramos en una constante mejora y aumento en nùmero de procesadores y su capacidad para trabajar simltaneamente entre ellos dentro de cualquier equipo, la implementaciòn de esta tecnologìa se ve en todo tipo de dispositivos, ya sean mòviles o en equipos de còmputo en nuestros hogares y lugares de trabajo.

Como desarrollador de software es importante tener en cuenta las complicaciones implicadas en el còmputo paralelo, ya que existen distintos tipos de problemas que aun persisten relacionados a la concurrencia e integridad de los datos o a la perdida de control de las etapas dentro de los procesos, todo ello con la finalidad de llevar a cabo un mejor uso de los recursos y ofrecer mejores resultados.








 

REFERENCIAS

 


1.- Bastida Ibàñez J. PROCESADORES SEGMENTADOS. [archivo PDF]. Disponible en http://www.infor.uva.es/~bastida/Arquitecturas%20Avanzadas/Segment.pdf

2.- Silva Bijit L. Segmentaciòn.[archivo PDF]. Disponible en http://www2.elo.utfsm.cl/~lsb/elo311/clases/c14.pdf



 

jueves, 19 de febrero de 2015

Programación de Computadoras Paralelas

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO

FACULTAD DE INGENIERÍA
INTRODUCCIÓN

En el presente trabajo se aborda el tema de la Programación de Computadoras Paralelas, tema sobre él cual se están llevando a cabo investigaciones en todo el mundo, todo ello con la finalidad de mejorar la eficiencia y eficacia a la hora de solucionar problemas computables, desde los cálculos más simples llevados a cabo en una calculadora hasta los relacionados con simulaciones del comportamiento del universo.

Indudablemente todos somos partícipes en el uso de la tecnología que emplea el concepto de paralelismo, como puede ser el uso simultáneo de distintas aplicaciones en nustros dispositivos móviles o en nuestros equipos de cómputo, por ello y dada nuestra exigencia por un mejor rendimiento en dichos dispositivos es que resulta importante y a la vez muy interesante conocer  manera básica esta información.

 

 

 

 

 

PROGRAMACIÓN DE COMPUTADORAS PARALELAS

En 1988 McGraw y Axelrod identificaron cuatro formas distintas de desarrollar software (aplicaciones) para las computadoras paralelas:
  1. Extender o enriquecer un compilador existente para que traduzca programas secuenciales en programas paralelos.

  2. Extender o enriquecer un lenguaje existente con nuevas operaciones que permita a los usuarios expresar el paralelismo.

  3. Agregar una nueva capa de lenguaje paralelo encima de un lenguaje secuencial existente.

  4. Definir totalmente un nuevo lenguaje paralelo así como su compilador.



AGREGAR UNA CAPA DE PROGRAMACIÓN PARALELA

Se puede pensar en la programación paralela como tener dos capas. 

Capa inferior:
-
Núcleo (core) del cómputo.- Los procesos manipulan su propia porción de datos para producir su parte del resultado (objetos persistentes similares). 

Capa superior:- Creación y la sincronización de los procesos- Particionamiento de datos entre procesos

En otras palabras este tipo de enfoque consiste en añadir una capa en la parte superior de un lenguaje de programación secuencial, de tal forma que en ella se lleven a cabo la creación y sincronización de los procesos y la partición de los datos entre los procesos, en otras palabras es donde se expresará el paralelismo.

Estas acciones podrían ser programadas usando un lenguaje paralelo (quizá un lenguaje de programación visual). Donde el compilador sería responsable de traducir estas dos capas del programa paralelo en código listo para su ejecución sobre una computadora paralela.

Este enfoque requiere que el programador aprenda y use un nuevo sistema de programación paralelo, lo cual puede ser la razón por la que no ha captado mucha atención en la comunidad de programación paralela. Mientras que los prototipos de investigación están siendo distribuidos, no se conoce ningún sistema comercial basado en esta filosofía.
 Algunos de los prototipos de investigación que se han construido sobre la base de estos principios son: 

- Linda (Modelo de coordinación y comunicación entre varios procesos paralelos que operan sobre objetos almacenados en memoria de uso compartido, virtual y asociativa.)
- Plataforma iC2Mpi
- SyD Middleware - Sistema de Dispositivos
- Además de MPI y OpenMp




 CREAR UN LENGUAJE PARALELO

La creación de un lenguaje de programación paralela desde cero libera al diseñador del lenguaje de las restricciones de usar un lenguaje estándar existente, pero también significa crear un nuevo compilador desde cero y tratar de conseguir que los usuarios adopten el nuevo idioma.

Se trata sin duda de la más radical de las cuatro vías que se han comentado. Evidentemente, es la más cara y la que exige más labor de desarrollo. Como contrapartida, la mayoría de los problemas que se han expuesto hasta ahora se pueden solucionar mediante un diseño adecuado del sistema lenguaje/compilador.

Los avances realiados hasta la fecha se han orientado en el área de los lenguajes funcionales, como FP o SISAL. Las principales características de diseño de estos lenguajes son mejorar la claridad de la concurrencia, sin requerir que el programador maneje la sincronización, así como permitir que no dependan de la arquitectura objeto sobre la que se van a implementar.

Otra de las grandes ventajas aparece desde el punto de vista de la depuración de programas. Por contra los mayores inconvenientes descanan en la construcción del compilador. Este requiere técnicas muy sofisticadas para realizar con eficacia las funciones que tiene encomendadas, como particionar, mapear y sincronizar el programa. En la actualidad se está teniendo problemas en el manejo dinámico de memoria. ya que las más simples implementaciones requieren grandes cantidades de memoria.

Algunos lenguajes paralelos, tales como C*, no fueron adoptados como estándar. En esta situación muchos vendedores en competencia decidieron no proporcionar compiladores para el lenguaje en sus máquinas. Cuando esto pasa, la portabilidad de códigos se encuentra severamente en peligro.

Otra barrera para la adopción de nuevos lenguajes de programación es la resistencia del usuario. Cuando nuevas construcciones paralelas se agregan a un lenguaje de programación, los programadores deben aprender cómo usar estas nuevas construcciones. Muchos programadores están renuentes a tomar esta transición.

Algunos ejemplos de lenguajes que surgieron como lenguajes de programación para computadoras paralelas son:
OCCAM Que cuenta con una sintaxis sorprendentemente diferente de los lenguajes tradicionales imperativos, este lenguaje soporta tanto la ejecución de procesos en paralelo como secuenciales, así como la comunicación y la sincronización entre ellos.
- Ada
- Parlog
- Smalltalk
- HPF
- La API OpenMP
- Halide Permite el desarrollo de aplicaciones con un rendimiento 70 veces el de aplicaciones realizadas con lenguajes tradicionales.





CONCLUSIONES

Como individuos que tenemos contacto con este tipo de tecnología de manera cotidiana con nuestros dispositivos móviles y más aun quiénes realizamos alguna actividad realacionada con la computación debemos prestar atención a los disitntos avances y nuevos descubrimientos que se realizan en todo el mundo con la finalidad de sacar provecho de todo ello, de tal forma que tengamos los conocimientos necesarios para mejorar la disponibilidad de todas estas aplicaciones en nuestra día a día.
Como Desarrollador de Software el conocimiento de la computación paralela permite el uso de los procesadores de un dispositivo de una manera más eficiente y abierta a las posibilidades, ya que como muestra la información dentro del presente trabajo un uso correcto e informado de dichos medios aumenta el poder y limpieza a la hora de crear aplicaciones y hacer que interactuan con otras de manera simultánea, sin hacer sacrificios de rendmiento entre ellas.

Por último es importante hacer hincapié en los problemas relacionados al uso de este tipo de programación, si bien las posibilidades son muy amplias también lo son los impedimientos para implantarla completamete, ya que nos encontramos en una etapa donde pareciera que existe el temor a seguir por ese camino y se plantea el mantenerse con lo que es conocido y seguro, por ejemplo, un cómputo lineal. Aún asi, es muy viable y ha demostrado el potencial con el que cuenta, por lo que no está de más seguirle el paso a su desarrollo. 





REFERENCIAS

1.-  Stewart Weiss. Parallel Computing [archivo PDF]. Disponible en http://compsci.hunter.cuny.edu/~sweiss/course_materials/csci493.65/lecture_notes/chapter01.pdf
2.- Michael J. Quinn. Parallel Programming archivo PDF]. Disponible en http://www.cs.kent.edu/~jbaker/PRTS-Sp09/references/Ch-1%20Quinn.pdf
3.-  José M. García Carrasco, Fco. José Quiles Flor. EL PARALELISMO: UNA MANERA DE MEJORAR LA EFICIENCIA DE LOS ORDENADORES. 

  

martes, 10 de febrero de 2015

Ley de Moore / Computadoras Cuánticas

INTRODUCCIÓN

EL objetivo de este trabajo es hablar de manera introductoria sobre la importancia de la nanotecnología y su efecto en la vida diaria de todos nosotros, ya que nos encontramos en una constante interacción con las distintas aplicaciones tecnológicas que hacen uso de ésta.

Para ello se hará mención a la Ley de Moore, que es sin lugar a dudas una de las principales motivaciones de la industria microelectrónica y de semiconductores en la busqueda de mejores materiales y procesos de desarrollo de dispositivos electrónicos más compactos, más rápidos, más eficientes y sobretodo baratos.

Por otro lado se abordará el tema de la computación cuántica, un nuevo paradigma que pretende resolver las limitaciones de las leyes de la física clásica que rigen la estructura de las computadoras actualmente.






DESARROLLO

La Ley de Moore


¿Qué dice la Ley de Moore? 

Expresa que aproximadamente cada dos años se duplica el número de transistores en un circuito integrado.

En 1965, Gordon Moore (co- fundador en 1968 de la compañia Intel) afirmó que el número de transistores por centímetro cuadrado en un circuito integrado se duplicaba cada año y que la tendencia continuaría durante las siguientes dos décadas.

Más tarde, en 1975, modificó su propia afirmación y predijo que el ritmo bajaría, y que la densidad de transistores se duplicariá aproximadamente cada 18 meses.

Esta progresión de crecimiento exponencial de la densidad de transistores, o sea, el duplicar la capacidad de los microprocesadores cada año y medio, es lo que se considera actualmente como la Ley de Moore. En abril de 2005 se cumplieron 40 años de la ley de Moore y la industria de la microelectrónica estima que seguirá siendo válida al menos otros 20 años.

En las siguientes figuras se puede corroborar que la predicción del crecimiento exponencial en el número de transistores en los procesadores Intel se ha cumplido de acuerdo a la ley de Moore.



Todo parece indicar que la ley de Moore pasó de ser una profecía auto cumplida por la industria microelectrónica a una obligación que los fabricantes de semiconductores deben de cumplir para poder vender sus productos a precios más competitivos. Así, si en 1954 el precio de un transistor era de casi 6 dólares, actualmente su precio es menor a una mil millonésima parte de un dólar, o sea, menor a un nanodólar.

Es importante mencionar que la capacidad de cada componente de un computador se ve afectada por la Ley de Moore.. Sin embargo, en términos de procesadores, no siempre el crecimiento de transistores no se traduce en un incremento directo de rendimiento. Particularmente, en los procesadores multi core, las aplicaciones seriales no se ejecutan sustancialmente más rápido. Hay muchos casos donde un incremento de un 45% en el número de transistores sólo se traduce entre 10 y 20% de rendimiento.

La supervivencia de la ley de Moore dependerá seguramente de los resultados de las investigaciones en el área de las nanociencias, que llevarán a la industria de la alta tecnología a otros caminos como la nanoelectrónica, la optoelectrónica e incluso, la bioelectrónica. Por lo tanto, todavía nos quedan muchas cosas por ver en el futuro cercano, y la única limitación tal vez sea un dimensión de nivel fundamental, como lo es el tamaño del átomo mismo




Computadoras Cuánticas


Límites de las computadoras clásicas

La máquina de Turing, y por lo tanto todas las computadoras de hoy, funcionan de acuerdo con las leyes de la llamada física clásica. Ésta prescribe que los bits tengan uno de dos valores bien definidos, es decir, que los transistores operen como puertas que se abren o se cierran, dejando pasar o interrumpiendo la corriente, sin ambigüedades. Pero la mecánica cuántica, teoría que describe el comportamiento de la materia en la escala de los átomos y las partículas subatómicas como el electrón, ha demostrado que nuestro mundo es más complicado.

Richard Feynman, uno de los físicos teóricos más brillantes del siglo pasado, reflexionó en 1982 acerca de las limitaciones de las computadoras clásicas. Le interesaba, en particular, el problema de hacer simulaciones del mundo real, que es cuántico a fin de cuentas, por medio de computadoras clásicas. ¿Se puede? Simular un fenómeno por medio de una computadora exige que le proporcionemos a ésta las ecuaciones matemáticas que describen el fenómeno. La descripción matemática de los fenómenos cuánticos es la ecuación de Schrödinger. Se trata de una ecuación diferencial que una computadora clásica puede manipular. En otras palabras, nada impide resolver ecuaciones de movimiento cuántico con una computadora clásica. Pero la dificultad, como indicó Feynman, es que sólo podríamos resolver problemas muy simples y de poco interés, en los que intervienen sólo unas cuantas partículas (en un sistema cuántico de interés hay miles de millones de partículas). Si el número de partículas aumenta, la capacidad de la máquina debe aumentar exponencialmente. Para simular procesos cuánticos no triviales la computadora clásica tendría que ser gigantesca, porque su capacidad aumenta en forma lineal. Además de plantear esta crítica de la física computacional clásica, Richard Feynman Propuso la utilización de sistemas cuánticos sencillos, llamados qubits (de quantum bits), como elementos estructurales básicos de una nueva computadora. Así nace el sueño de una computadora cuántica.


 Bits cuánticos

La descripción cuántica tiene varias peculiaridades. Por ejemplo, cuando se lanza al aire una moneda la mecánica clásica nos permitiría saber de qué lado caerá si tuviéramos todos los datos acerca de la posición y la velocidad de la moneda al salir de nuestra mano. Si no tenemos los datos, decimos que hay una probabilidad de 50% de que caiga de un lado o del otro. En cambio, la probabilidad en mecánica cuántica es otra cosa. En los experimentos cuánticos no podemos predecir el resultado, sólo la probabilidad de que ocurra cierto resultado.

Pero la peculiaridad cuántica más importante para nuestros propósitos es el llamado principio de superposición. Si en el mundo clásico un objeto puede estar en uno de varios estados distintos (por ejemplo, en distintas posiciones, o con distintos valores de la energía), en mecánica cuántica puede estar, además, en combinaciones de todos los estados posibles. Esta superposición de estados perdura mientras el objeto permanezca aislado. En cuanto interactúa con su entorno (por ejemplo, cuando alguien trata de determinar con una medición en qué estado se encuentra), la superposición se destruye y el objeto cae en uno de sus estados. Por ejemplo, un electrón confinado en cierto volumen puede ocupar al mismo tiempo muchas posiciones. Pero cuando uno trata de localizarlo con una medición, el electrón se manifiesta en una sola posición. La destrucción de los estados de superposición al interactuar un sistema cuántico con su entorno se llama decoherencia.

Las computadoras cuánticas aprovechan el principio de superposición para sacarles más partido a los bits. Un bit cuántico, o qubit, tiene más posibilidades de almacenar información porque, además de los dos estados clásicos 1 y 0, puede encontrarse en una superposición de éstos. Dicho de otro modo, puede estar parcialmente en uno y otro al mismo tiempo. La gama de posibilidades varía continuamente del 0 al 1, con superposiciones que contienen más o menos de los dos estados clásicos. El qubit lleva una vida mucho más rica que el bit clásico. Esto finalmente define la importancia de los sistemas cuánticos para la informática y la computación. Es cómodo imaginar al qubit como un vector. La longitud de este vector es fija, pero puede apuntar en cualquier dirección, a diferencia del bit clásico, que sólo puede apuntar, digamos, hacia arriba y hacia abajo.


La computadora cuántica

En 1985 David Deutsch dio una base matemática sólida a la propuesta de Feynman. Deutsch explicó cómo podría funcionar una computadora cuántica universal y describió su funcionamiento como secuencias de operaciones elementales sobre qubits. La computadora cuántica de Deutsch es muy parecida a la máquina universal de Turing, pero con qubits en el lugar de bits clásicos. Sin embargo, la operación de una computadora cuántica es muy distinta de la operación de la máquina de Turing. Había que formular algoritmos computacionales cuánticos.

Los algoritmos cuánticos hacen uso de las peculiaridades de los qubits. Para iniciar un proceso de cómputo cuántico, podríamos, por ejemplo, poner para empezar todos los qubits que representan la información inicial en una superposición de 0 y 1. El estado inicial de esta computadora contendrá así todos los datos iniciales posibles. Ahora sólo falta hacer un cálculo adecuado (aplicar el algoritmo). Operando sobre los qubits en superposiciones de 1 y 0, el algoritmo cuántico resuelve, en cierta forma, todos los cálculos posibles al mismo tiempo. Uno puede imaginar (muy aproximadamente) una computadora cuántica como un conjunto muy grande de computadoras clásicas que funcionan en paralelo. Esta riqueza de la información se llama paralelismo cuántico, y disminuye drásticamente el número de pasos necesarios para resolver un problema en una computadora cuántica. Pensemos en la siguiente analogía. Supongamos que queremos comunicar información sobre una figura geométrica tridimensional muy complicada por medio de fotografías. La computadora clásica funcionaría entonces como una cámara que sólo maneja fotos en blanco y negro. En cambio una computadora cuántica podría transmitir todos los tonos de gris además del blanco y negro. Es claro que necesitaremos muchas menos fotos para representar el objeto debido a la riqueza de la descripción cuántica.


Obstáculos a vencer

El obstáculo principal para la construcción de una computadora cuántica es la fragilidad de los estados superpuestos de los qubits con el mundo exterior debe disminuirse al nivel más bajo posible para evitar la decoherencia de los estados superpuestos. Las influencias no controlables destruirían por completo la delicada superposición y el “enredamiento” de los qubits, propiedades que son la base de todos los algoritmos computacionales cuánticos. Aislar unos cuantos qubits de influencias incontrolables es relativamente fácil y ya se han hecho algunos experimentos. Pero cuanto más grande es un sistema cuántico (cuantos más elementos contiene, o en este caso, más qubits), más probable es que alguno de ellos interactúe con el exterior, y eso basta para producir la decoherencia de todo el sistema.

Claro que el problema de aparición de errores por influencias externas también existe en las computadoras clásicas. Por ejemplo, si guardamos un bit de información en el disco duro de una computadora clásica, con el tiempo este bit puede invertirse. Una manera de prevenir este error es guardar copias de cada bit. Después se compara periódicamente el valor de este bit con el de las copias, y si uno de ellos no coincide con los otros, se invierte.

Desgraciadamente este método no sirve en una computadora cuántica. Para determinar en qué estado se encuentra un qubit hay que interactuar con él, lo que destruye su estado y afecta el resultado del cálculo. Aunque ya existe un progreso importante en el desarrollo de métodos cuánticos no-destructivos de corrección de errores, todavía falta mucho para la construcción de una computadora cuántica suficientemente grande.






CONCLUSIONES

Actualmente el desarrollo de la tecnología nos permite enfrentar problemas que hace un par de décadas no era posible resolver, ya que contamos con computadoras más rápidas, más eficientes y que además pueden ser adquiridas por una mayor catidad de personas gracias a la disminución en los costos de producción.

Por otra parte quizá sea un poco necesario el entender el funcionamiento de los distintos dispositivos con los que interactuamos a diario, ya que nos encontramos en una época en la que inevitablemente nuestras vidas se ven afectadas por los avances en la tecnología y el contar un poco de conocimiento sobre el tema nos permite sacarle mejor provecho a nuestros dispositivos.

La Ley de Moore ha impulsado a lo largo de las ultimas dos décadas el perfeccionamiento de las computadoras (entre muchos otros sectores) y lo que en un principio era considerado como algo un tanto decabellado por la industria poco a poco llego a ser una realidad a tal grado que ahora mismo nos encontramos con el problema de las limitaciones fisicas de los componentes, cuya posible solución se encuentre haciendo uso del paradigma de la Computación Cuántica. Sin embargo, aun nos encontramos intentando alcanzar el cambio, debido a las interrogantes que existe entorno a la Física Cuántica y su aplicación en el mundo de las computadoras.






REFERENCIAS

Yuri Rubo, Julia Tagüeña. Computación cuántica. artículo en español en el sitio web: http://www.comoves.unam.mx/numeros/articulo/67/computacion-cuantica, consultado el 10 de Febrero de 2015.

Dr. Juan Carlos Cheang Wong. LEY DE MOORE, NANOTECNOLOGÍA Y NANOCIENCIAS: SÍNTESIS Y MODIFICACIÓN DE NANOPARTÍCULAS MEDIANTE LA IMPLANTACIÓN DE IONES. Revista Digital Universitaria (http://www.revista.unam.mx/vol.6/num7/art65/jul_art65.pdf) 10 de Julio 2005, consultado el 10 de Febrero de 2015.