You are on page 1of 41

Definicion de NUMA

Editar 0 13

Que es NUMA?

El acceso a memoria no uniforme o NUMA es un diseo de memoria utilizado en un sistema de


multiprocesamiento para que se pueda compartir la memoria local, mejorando el rendimiento y la
capacidad del sistema para ser expandida. En NUMA se utiliza en un sistema de
multiprocesamiento simtrico (SMP).

SMP (Symmetric Multiprocessing):


Es una arquitectura de computadores que provee un rpido desempeo haciendo que mltiples CPUs estn disponibles para completar procesos individuales

simultneamente. Su principal caracteristica es el hecho de que varias CPU compartan el acceso a la memoria, teniendo una igualdad de condiciones para dicho acceso,

por eso se lo denomina "Simetrico".

Ventajas de NUMA:

El principal beneficio de la NUMA es la escalabilidad. La arquitectura NUMA fue diseado


para superar los lmites de escalabilidad de la arquitectura SMP. Con SMP, se realiza un gran uso
del mismo bus de memoria compartida. Esto funciona bien para un relativamente pequeo nmero
de CPU, pero no cuando se tiene decenas, incluso cientos, de las CPU que compiten por el acceso
al bus de memoria compartida. NUMA este problema, al limitar el nmero de CPU en cualquier bus
de memoria y la conexin de los diversos nodos por medio de una interconexin de alta velocidad.

Otro beneficio que nos brinda NUMA, es la baja latencia que posee, es decir el tiempo o
lapso necesario para que un paquete de informacin se transfiera de un lugar a otro es menor.
Arquitectura de Memoria Compartida -
NUMA
Editar 0 1

Arquitectura de Memoria Compartida - NUMA


Comparacion de Costo y Escalabilidad
Editar 0 1

Comparacin de costo y escalabilidad

En sistemas UMA, cada procesador conecta a memoria compartida va un bus


de sistema. Se puede expandir de 2 a 32 procesadores. Debido al ancho de banda del
bus y el ancho de banda de la memoria al procesador unido se restringe la
escalabilidad. Acerca del costo, debido a que la expansin es limitada por el tamao,
el costo es relativamente ms alto.

En cambio en NUMA, cada procesador tiene su propia memoria, cache y E/S.


No como UMA, se puede extender fcilmente y ninguna restriccin de mquina, as el
costo es relativamente ms bajo.

Razones por la cual surguieron


computadores NUMA
Editar 0 5

1. En una configuracin SPM existe un limite de 16 y 64 procesadores q puedan utiliza, a medida


que estos procesadores se incremente el trafico en el bus tambien aumenta aadiendo mas carga
y a partir de cierto momento el bus se vuelve un cuello de botella.
2. Precisamente el limite de procesador SPM es uno de los motivos para el desarrollo de los
cluster, donde cada nodo tiene su propia memorai principal privada y las aplicaciones no ven la
memoria global, pero esta jerarquizacion de memoria afecta las prestacin, y para conseguir el
maximo nivel de ellas el software debe ajustarse a este entorno.
Ventajas y Desventajas
Editar 0 3

Ventajas

Proporciona un nivel de prestaciones efectivos con mayores nivel de paralelismo que un SMP con
varios nodos Numas el trafico del bus en cualquier nodo se limita a las peticiones que el bus pueda
manejar, no obstante si muchos de los accesos a memorias se producen a lados remotos las
prestaciones empiezan a reducirse.

Desventajas

Un computador CC-NUMA, no parece tan transparente como un SMP, se necesita ciertos cambios
en el sofware como asignacion de paginas, la asignacion de procesos y el equilibrado de la carga
para adaptar el sistema operativo y las aplicaciones desde un SMP hacia un CC-NUMA, aparte hay
que considerar la disponibilidad, ya que se trata de una cuestion bastante compleja que depende
de la implementacion exacta de CC-NUMA.
CC-NUMA
Editar 0 4

Los sistemas CC-NUMA buscan reducir el tiempo de acceso a los datos residentes en un nodo
remoto utilizando en cada nodo una cache de tercer nivel (L3). Esta cache recibe el nombre de
cache remota (RC) ya que almacena copias de datos remotos que han sido utilizados
La arquitectura CC-NUMA, al igual que la arquitectura NUMA, utiliza memoria fsicamente
distribuida entre los nodos. En estas cada nodo posee una parte del espacio compartido de
direcciones y una memoria cache que puede utilizarse para replicar datos presentes en cualquier
otro nodo. Dado que la memoria fsica est uniformemente repartida entre los nodos y adems su
tamao es igual al de la memoria direccionable, basta con analizar la direccin solicitada para
determinar en qu nodo reside el bloque que contiene al dato.
MODELOS COMERCIALES MPP
Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

INTRODUCCIN

Ya que el problema es el hecho de contar con memoria


compartida y sus limitaciones, se propuso un esquema de una
mquina paralela que consta de varias unidades de
procesamiento bsicamente independientes. En efecto cada una
de estas unidades, conocida como ``nodo'', es prcticamente
una computadora en s misma, contando con su propio
procesador, memoria no compartida, y que se comunica con las
dems unidades de procesamiento a travs de un canal provisto
exclusivamente para este propsito. Este tipo de mquinas se
conocen como computadoras masivamente paralelas o
mquinas MPP (Massively Parallel Processing, procesamiento
masivamente paralelo).
DESARROLLO

El DAP (Distributed Array Proccesor) producido por el ICL (International


Computers Limited) fue el primer computador MPP del mundo. Su diseo
fue realizado en 1972 y el primer prototipo se inici en 1974. La primera
mquina fue entregada al Queen Mary College en 1979.

El ICL DAP tiene 64x64 elementos de procesamiento (PE) con 4096 bits
de almacenamiento por cada PE. Los programas para el DAP fueron
escritos en DAP FORTRAN que fue un FORTRAN extendido con una
matriz de 64x64 y vectores de 64 elementos. El diseo como se describe
en el documento de Stewart en 1973 es ms o menos lo que se llev a
cabo en la primera versin comercial, excepto la eliminacin en los
elementos de procesamiento de algunas bits suplementarios en las
direcciones, lo que simplific en gran medida la deteccin de errores en
el hardware. Una instalacin adicional fue una mejora forma de sumar
vectores en los PE. Connection Machine fue una serie de
superordenadores que surgi de la investigacin Danny Hillis en la
dcada de 1980 en el MIT sobre las alternativas a la tradicional
arquitectura de von Neumann de la computacin. Fue pensada
originalmente para aplicaciones del campo de la inteligencia artificial y el
procesamiento simblico, pero versiones posteriores alcanzaron un gran
xito en el campo de la ciencia computacional. La tesis original de Danny
Hillis fue la base de la Connection Machine CM-1. En ella se ofrece una
visin general de la filosofa, la arquitectura y el software para la
conexin de la mquina, incluidos los datos de enrutamiento entre los
nodos de la CPU, gestin de memoria, la programacin Lisp para las
distintas mquinas, etc.

El UltraComputer de la Universidad de Nueva York es un diseo


importante de procesador en la historia de la computacin paralela. El
sistema tiene N procesadores, N memoria y un sistema de paso de
mensajes N a N para conectarlos. Ese conmutador de paso de mensajes
utiliza un instruccin innovadora llamada fetch-and-add que combina
referencias de varios procesadores en una sola referencia, para redu cir
impacto en la memoria. La mquina fue desarrollada en la dcada de
1980 en el Instituto Courant de Ciencias de la Computacin, en base a
un concepto desarrollado por Jacob T. Schwartz. La mayor parte de la
labor realizada fue terico, pero hubo dos prototipos construidos que
fueron dos: Uno de 8 procesadores, y otro de 16 procesadores, 16
mdulos de memoria con conmutadores VLSI que soportan la instruccin
especial fetch-and-add. Blue Gene/L, considerado como el cuarto
superordenador ms rpido del mu ndo segn el ranking TOP500 en
noviembre de 2008, y el quinto en Junio de 2009, es un ejemplo de MPP.
Es el primer supercomputador de la serie Blue Gene, desarrollada a
travs de una colaboracin entre Lawrence Livermore National
Laboratory (LLNL), tiene un pico terico de rendimiento de 360 teraflops,
y en el Linpack benchmark da ms de 280 teraflops estables. Su
arquitectura se muestra en la imagen siguiente:

CONCLUSIONES

El tener varias secciones de memoria independientes complica


la programacin en este tipo de arquitecturas. En una
arquitectura MPP la distribucin de trabajo entre los nodos es
una consideracin vital al disear cualquier aplicacin. Se debe
tomar en cuenta la sincronizacin de datos entre los nodos, y en
toda comunicacin entre ellos debe realizarse explcitamente
por medio de llamadas al mecanismo de paso de mensajes.

FUENTE

http://www.bsc.es/

http://www.cesga.es/

http://www.atc.uniovi.es/inf_superior/atc2010/trabajos/paralelas/
6-SM%20de%20Memoria%20Distribuida%20comerciales-
memoria.pdf
MODELOS COMERCIALES DE LA ARQUITECTURA
NUMA
Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

INTRODUCCIN

NUMA (del ingls Non-Uniform Memory Access, en espaol "acceso a memoria no uniforme")
es un diseo de memoria utilizado en multiprocesamiento donde la memoria se accede en
posiciones relativas de otro proceso o memoria compartida entre procesos. Bajo NUMA, un
procesador puede acceder a su propia memoria local de forma ms rpida que a la memoria
no local (memoria local de otro procesador o memoria compartida entre procesadores).

Cada particin de esta memoria se ata directamente a un nodo pero se puede acceder a ella
por procesadores en otro nodos via la red de interconexin. As, los tiempos de acceso a la
memoria difieren dependiendo de si la ubicacin requerida es local al nodo o remota a este.
Este nivel de complejidad agregado puede ser escondido del software de aplicacin pero
hacer esto lleva a un desempeo suboptimo. Para hacer mejor uso del hardware, el
programador debe tomar la arquitectura en consideracin. El cache se usa entre procesadores
y memoria local asi como entre nodos. Mquinas con cach coherente a nivel del hardware se
llaman ccNUMA.
DESARROLLO

NUMA: Non-Uniform Memory Access


Es un tipo de arquitectura de procesamiento paralelo en que cada
procesador tiene su propia memoria local pero puede tambin tener
acceso a la memoria de otros procesadores. Est es llamada no-
uniforme porque un procesador puede acceder su propia memoria local
ms rpido que la memoria no local (memoria que est en otro
procesador o compartida entre procesadores).

La arquitectura NUMA ofrece la "escalabilidad" de MPP y la


programacin simple de SMP.

MPP o procesamiento paralelo masivo (Massively Parallel Processing) es


un tipo de arquitectura que usa muchas CPUs separadas corriendo en
paralelo para procesar un solo programa. MPP es similar a
procesamiento simtrico (SMP: Symmetric Multiprocessing), con la
principal diferencia que en los sistemas SMP todas las CPUs comparten
la misma memoria, mientras que en los sistemas MPP cada CPU tiene su
memoria propia. Los sistemas MPP son por eso ms difciles de
programar porque las aplicaciones se deben dividir en tal manera que
todos los segmentos que se ejecutan se puedan comunicar unos con
otros. En cambio, MPP no tiene los problemas de cuello de botella
inherente en los sistemas SMP cuando todas las CPUs intentan acceder
la misma memoria al mismo tiempo.

SMP o multiprocesamiento simtrico (Symmetric Multiprocessing) es una


arquitectura de computadores que provee un rpido desempeo
haciendo que mltiples CPUs estn disponibles para completar procesos
individuales simultneamente (multiprocesamiento). En forma distinta a
procesamiento asimetrico, se le puede asignar a cualquier tarea
cualquier procesador ocioso, y se pueden agregar CPUs para aumentar
el desempeo y as manejar el aumento de cargas. Una variedad de
sistemas operativos especializados y arreglos de hardware estan
disponibles para dar soporte a SMP. Las aplicaciones especficas se
pueden beneficiar de SMP si el cdifigo permite hacer multithreading.

SMP usa un solo sistema operativo y comparte porciones de memoria


comn y recursos de entrada/salida de disco. Ambos UNIX y Windows
NT soportan SMP.
La arquitectura ccNUMA es una extensin de SMP. Diseada para
superar los cuellos de botella inherentes de SMP, la arquitectura ccNUMA
deja a los proveedores construir servidores en gran escala. ccNUMA
ofrece todos los mejores beneficios de SMP y MPP, sin ninguna de sus
desventajas.

CONCLUSIONES

En la arquitectura NUMA tenemos un modelo de


memoria compartida, como los sistemas SMP,
presentan solo un modelo de memoria
unificado. Tambin tiene multi CPUs, es decir,
hace multi procesamientos, distribuye los
accesos a memoria por mltiples subsistemas
como MPP pero no balancea la carga
automticamente y puede soportar mltiples
operaciones .

FUENTE:

http://users.dcc.uchile.cl/~rbaeza/cursos/proyarq/choviedo/numa
_definicion.html
COHERENCIA DE CACH

Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

INTRODUCCIN

La coherencia de cach se refiere a la coherencia de los datos almacenados en las


memorias cach locales de un recurso compartido.

En un sistema multiprocesador de memoria compartida con una memoria cach


separada para cada procesador, es posible tener muchas copias de cualquier un
operando de instruccin: una copia en la memoria principal y uno en cada memoria
cach. Cuando se modifica una copia de un operando, las otras copias del operando
se debe cambiar tambin. Coherencia de cach es la disciplina que asegura que los
cambios en los valores de los operandos compartidos se propagan por todo el sistema
en el momento oportuno.

DESARROLLO
Hay tres niveles diferentes de coherencia de cach:

Cada operacin de escritura parece ocurrir instantneamente

Todos los procesadores ver exactamente la misma secuencia de los cambios de los valores
para cada operando separada

Diferentes procesadores pueden ver una operacin y asumir diferentes secuencias de valores

Tanto en el nivel 2 el comportamiento y el nivel de comportamiento 3, un programa


puede observar datos obsoletos. Recientemente, los diseadores de computadoras
han llegado a darse cuenta de que la disciplina de programacin requerido para hacer
frente a la conducta de nivel 2 es suficiente para lidiar tambin con el comportamiento
de nivel 3. Por lo tanto, en algn momento slo el nivel 1 y el comportamiento del nivel
3 se ver en mquinas.

Definicin
Coherencia define el comportamiento de lee y escribe en la misma ubicacin de
memoria. Se obtiene la coherencia de cach si se cumplen las siguientes condiciones:

En una operacin de lectura realizada por un procesador P a una ubicacin X que sigue una
operacin de escritura por el mismo procesador P a X, sin escribe de X por otro procesador que se
produce entre la escritura y las instrucciones de lectura realizadas por P, X siempre debe devolver
el valor escrito por P. Esta condicin est relacionada con el mantenimiento el orden del programa,
y esto debe lograrse incluso en arquitecturas monoprocessed.

Una lectura hecha por un procesador P1 a la posicin X que sigue una escritura por otro
procesador P2 X debe devolver el valor escrito por P2 si no hay otro escribe a X realizados por
cualquier procesador de ocurrir entre los dos accesos. Esta condicin define el concepto de vista
coherente de la memoria. Si los procesadores pueden leer el mismo valor anterior despus de la
escritura hecha por P2, podemos decir que la memoria es incoherente.

Escribe en el mismo lugar debe ser secuenciado. En otras palabras, si la ubicacin X recibi
dos valores diferentes A y B, en este orden, de los dos procesadores, los procesadores pueden no
leer localizacin X como B y luego leerlo como A. La ubicacin X debe ser visto con los valores A y
B, en ese orden.

Estas condiciones se definen suponiendo que las operaciones de lectura y escritura


se realizan de forma instantnea. Sin embargo, esto no sucede en el ordenador de
hardware determinada latencia de la memoria y otros aspectos de la arquitectura. Una
escritura por el procesador P1 no puede ser visto por una lectura desde el procesador
P2 si la lectura se hace en muy poco tiempo despus de haber realizado la escritura.
El modelo de consistencia de memoria cuando se define un valor escrito debe ser
visto por un siguiente instruccin lectura hecha por los otros procesadores.

Es cuando existen varias copias del mismo dato simultneamente en


caches diferentes, por lo tanto si los procesadores actualizan sus copias
puede producirse inconsistencia de memoria, debido a que se puede estar
trabajando con datos errneos, sin tener conocimiento de ello. Cuando un
procesador cambia (escribe) un dato en su propia cache local, el cambio
debe hacerse en todas las caches que tienen copia. Alternativemente, las
otras copias se deben invalidar. Es decir, los datos compartidos deben ser
coherentes en todas las caches del sistema.

La figura muestra tres procesadores con caches conectadas por un bus a una memoria
principal compartida. Se realiza por parte de los procesadores una serie de accesos a la
posicin u. Primero, el procesador P1 lee u, trayendo una copia a su cache. Despus el
procesador P3 lee u, con lo que tambin pone una copia en su cache. Tras esto, el
procesador P3 escribe en la posicin u cambiando su valor de 5 a 7. Con una cache de
escritura directa, esto causara que la posicin en memoria principal se actualizara; sin
embargo, cuando el procesador P1 vuelve a leer la posicin u (accin 4),
desafortunadamente leer el valor obsoleto (5) de su propia cach en lugar del valor
correcto (7) de la memoria principal.

CONCLUSIN

Para resolver el problema de coherencia de cach se han dividido en aproximaciones de


software y hardware.

Software: intentan evitar la necesidad de circuitera y lgica de hardware adicional


dejando que el compilador y el sistema operativo se encarguen del problema. Esto lo que
quiere decir es que el compilador realiza un anlisis del cdigo para determinar qu datos
pueden dar problemas al pasar a cache, y los marcan en consecuencia. Despus el
sistema operativo o el hardware impiden que se pasen a cache los datos marcados como
no almacenables en cache.

Hardware: estos se denominan protocolos de coherencia de cache. Y permiten reconocer


dinmicamente en el momento de la ejecucin las situaciones de inconsistencia por lo
tanto, existe un uso mas efectivo de las caches y reduce la complejidad en el desarrollo
del software.

REFERENCIAS

http://docsetools.com/articulos-informativos/article_70643.html

http://arqui-gr4-her-val-dan-
ldro.wikispaces.com/Coherencia+de+cache+y+protocolo+MESI
Procesamiento Pipeline
Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

Definicin de Peline

En computacin, se le llama pipeline a una serie de elementos de procesamiento de datos ordenados de


tal modo que la salida de cada uno es la entrada del siguiente, como quien dice una cadena de montaje
pero en vez de orientada a la manufactura, orientada al procesamiento de datos e instrucciones. En esta
gua explicaremos cmo funcionan.

La arquitectura en pipeline (basada en filtros) consiste en ir transformando un flujo de datos


en un proceso comprendido por varias fases secuenciales, siendo la entrada de cada una la
salida de la anterior.

Esta arquitectura es muy comn en el desarrollo de programas para elintrprete de comandos,


ya que se pueden concatenar comandos fcilmente con tuberas (pipe).

Tambin es una arquitectura muy natural en el paradigma de programacin funcional, ya que


equivale a la composicin de funciones matemticas.

Pipeline (Tuberias ) es un trmino que pertenece a la ingeniera de software y consiste


en una cadena de elementos de procesamiento ordenados de tal manera que la salida
de cada elemento es la entrada del siguiente elemento con almacenamiento temporal
de datos o buffering entre todos los procesos.

https://arquicompuv.wordpress.com/2013/11/21/pipeline/
Aplicaciones de pipelines en informtica

Pipelines graficos se encuentran en la mayora de las tarjetas graficadoras y consiste


en mltiples unidades aritmticas o

CPUs completas que implementan variados escenarios de operaciones tpicas, por


ejemplo calculos de luz y colores renderizado

proyeccin de perspectiva entre otros.

En software o tuberas consiste en varios procesos ordenados de tal forma que el


flujo de salida de un proceso alimenta la entrada

del siguiente proceso. Como por ejemplo, los pipelines de Unix.

Consumo en la Aquitectura Pipeline

A fin de reducir consumo se investiga una solucin de compromiso entre la

resolucin por etapa y la cantidad de etapas.

El mtodo de escalamiento de capacitores est descrito para reducir la potencia con


el cual se ha sobredimensionado en las ltimas etapas del caso de una arquitectura
Pipeline convencional.

Tambin el uso de la correccin digital permite eliminar los efectos no deseados

causados por imperfecciones en los comparadores utilizando circuitos digitales de

bajo consumo y no muy alto costo.

Caractersticas de pipeline

Se puede hablar de niveles de paralelismo caracterizados de la siguiente manera:

Multiprogramacin y Multiprocesamiento.- Estas acciones se toman a nivel de


Programa o Trabajo.
Tarea o Procedimientos.- Acciones que se toman dentro de un mismo programa
ejecutndose procesos independientes en forma simultnea.

Interinstrucciones.- Acciones a nivel de instruccin o sea dentro de mismo


proceso o tarea se pueden ejecutar instrucciones independientes en forma simultnea.

Referencias

http://msanchez.usach.cl/lcc/Arquitectura-Pipeline.pdf

http://pipelinecomplejos.blogspot.es/

http://www.foro3d.com/f12/que-pipeline-49174.html

http://tuspreguntas.misrespuestas.com/preg.php?idPregunta=9785

http://www.slideshare.net/rehoscript/arquitectura-pipeline
Practica #1
Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

5 ALGORITMOS DE ORDENAMIENTO SECUENCIAL

1.- Selection Sort

2.- Bubble Sort


3.- Insertion Sort

4.- Merge Sort


5.- Quick Sort

http://interactivepython.org/runestone/static/pythonds/
2 ALGORITMOS DE BSQUEDA SECUENCIAL

1.- Bsqueda Secuencial

Se utiliza cuando el contenido del vector no se encuentra o no puede ser ordenado. Consiste en buscar
el elemento comparndolo secuencialmente (de ah su nombre) con cada elemento del vector
hasta que ste se encuentre, o hasta que se llegue al final del vector. La existencia se puede
asegurar desde el momento que el elemento es localizado, pero no podemos asegurar la no
existencia hasta no haber analizado todos los elementos del arreglo.

Implementacin en Python

vector=['1','33','23','45','12','78','99','21','31']

valor_a_buscar='21'

posicion=0

encontrado='No'

posicion_del_valor_a_buscar=0

longuitud_del_vector=len(vector)

while posicion< longuitud_del_vector:

if vector[posicion]==valor_a_buscar :

posicion_del_valor_a_buscar=posicion

encontrado='Si'

posicion=posicion+1

if encontrado=='Si':

print 'Valor '+valor_a_buscar+' encontrado en posicion '+str(posicion)

else:

print 'Valor no encontrado'

2.- BSQUEDA BINARIA

Implementacin en Python
#Gustavo Adolfo Mercado Gonzlez

def busqueda_binaria(lista, x):


"""Bsqueda binaria
Precondicin: lista est ordenada
Devuelve -1 si x no est en lista;
Devuelve p tal que lista[p] == x, si x est en lista
"""

# Busca en toda la lista dividindola en segmentos y considerando


# a la lista completa como el segmento que empieza en 0 y termina
# en len(lista) - 1.

izq = 0 # izq guarda el ndice inicio del segmento


der = len(lista) -1 # der guarda el ndice fin del segmento

# un segmento es vaco cuando izq > der:


while izq <= der:
# el punto medio del segmento
medio = (izq+der)/2

print "DEBUG:", "izq:", izq, "der:", der, "medio:", medio

# si el medio es igual al valor buscado, lo devuelve


if lista[medio] == x:
return medio

# si el valor del punto medio es mayor que x, sigue buscando


# en el segmento de la izquierda: [izq, medio-1], descartando la
# derecha
elif lista[medio] > x:
der = medio-1

# sino, sigue buscando en el segmento de la derecha:


# [medio+1, der], descartando la izquierda
else:
izq = medio+1
# si no sali del ciclo, vuelve a iterar con el nuevo segmento

# sali del ciclo de manera no exitosa: el valor no fue encontrado


return -1

# Cdigo para probar la bsqueda binaria


def main():
lista = input ("Dame una lista ordenada ([[]] para terminar): ")
while lista != [[]]:
x = input("Valor buscado?: ")
resultado = busqueda_binaria(lista, x)
print "Resultado:", resultado
lista = input ("Dame una lista ordenada ([[]] para terminar): ")
main()
Resultado: 0
Dame una lista ordenada ([[]] para terminar): [1, 3, 5]
Valor buscado?: 2
DEBUG: izq: 0 der: 2 medio: 1
DEBUG: izq: 0 der: 0 medio: 0
Resultado: -1
Dame una lista ordenada ([[]] para terminar): [1, 3, 5]
Valor buscado?: 3
DEBUG: izq: 0 der: 2 medio: 1
Resultado: 1
Dame una lista ordenada ([[]] para terminar): [1, 3, 5]
Valor buscado?: 5
DEBUG: izq: 0 der: 2 medio: 1
DEBUG: izq: 2 der: 2 medio: 2
Resultado: 2
Dame una lista ordenada ([[]] para terminar): [1, 3, 5]
Valor buscado?: 6
DEBUG: izq: 0 der: 2 medio: 1
DEBUG: izq: 2 der: 2 medio: 2
Resultado: -1
Dame una lista ordenada ([[]] para terminar): []
Valor buscado?: 0
Resultado: -1
Dame una lista ordenada ([[]] para terminar): [1]
Valor buscado?: 1
DEBUG: izq: 0 der: 0 medio: 0
Resultado: 0
Dame una lista ordenada ([[]] para terminar): [1]
Valor buscado?: 3
DEBUG: izq: 0 der: 0 medio: 0
Resultado: -1
Dame una lista ordenada ([[]] para terminar): [[]]

http://librosweb.es/libro/algoritmos_python/capitulo_8/busqueda_binaria.html
Programacin de Computadoras Paralelas
Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

INTRODUCCIN

La computacin paralela es una tcnica de programacin en la que muchas instrucciones se


ejecutan simultneamente. Se basa en el principio de que los problemas grandes se pueden dividir
en partes ms pequeas que pueden resolverse de forma concurrente ("en paralelo").

En 1988 McGraw y Axelrod identificaron cuatro formas de desarrollar software 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.

En esta tarea hablaremos de los puntos 3 y 4 que estos autores propusieron.

DESARROLLO
3.- AGREGAR UNA CAPA DE PROGRAMACIN PARALELA

Imaginemos que la programacin paralela tiene dos capas: la capa inferior contiene el
ncleo del cmputo, donde un proceso manipula su parte de los datos para producir su
parte del resultado, mientras que la capa superior controla la creacin y sincronizacin de
los procesos y la particin de los datos entre los procesos. El compilador sera
responsable de traducir estas dos capas del programa paralelo en cdigo listo para su
ejecucin sobre una computadora paralela.

Dos ejemplos de este enfoque son:

CODE (Computationally Oriented Display Environment): es un lenguaje de programacin


visual el cual permite al usuario convertir programa secuenciales a paralelos.

HENCE (Heterogeneous Network Computing Environment): es un programa diseado


para asistir al usuario en el desarrollo de programas paralelos que funcionen en una red
de computadoras.

Este enfoque requiere que el programador aprenda y use un nuevo sistema de


programacin paralelo, lo cual puede ser la razn por la que no ha captado mucha
atencin en la comunidad de programacin paralela.

4.- CREAR UN LENGUAJE PARALELO

Tal como suena, el cuarto enfoque consiste en desarrollar un lenguaje de programacin


desde cero. El lenguaje de programacin OCCAM (desarrollado por el Ingls David May)
es un ejemplo famoso de este enfoque. Cuenta con una sintaxis totalmente diferente de
los lenguajes tradicionales, este lenguaje soporta tanto la ejecucin de procesos en
paralelo como secuenciales, as como la comunicacin y la sincronizacin entre ellos.

Una desventaja de este enfoque es el hecho de que al agregar instrucciones paralelas a


un lenguaje de programacin existente o crear por completo un nuevo lenguaje de
programacin paralelo requiere el desarrollo de nuevos compiladores. El desarrollo de un
compilador nuevo de alta calidad normalmente lleva aos de trabajo.
Algunos lenguajes paralelos, tales como C*, no fueron adoptados como estndar. En esta situacin
muchos vendedores en competencia decidieron no proporcionar compiladores para el lenguaje en
sus mquinas. Cuando esto pasa, la potabilidad de cdigos se encuentra severamente en peligro.

Otra barrera para la adopcin de nuevos lenguajes de programacin es la resistencia del


usuario. Cuando nuevas construcciones paralelas se agregan a un lenguaje de
programacin, los programadores deben aprender cmo usar estas nuevas
construcciones. Muchos programadores estn renuentes a tomar esta transicin.

CONCLUSIONES

Durante muchos aos, la computacin paralela se ha aplicado en la computacin de altas


prestaciones, pero el inters en ella ha aumentado en los ltimos aos debido a las restricciones
fsicas que impiden el escalado en frecuencia. La computacin paralela se ha convertido en el
paradigma dominante en la arquitectura de computadores, principalmente en los procesadores
multi ncleo. Sin embargo, recientemente, el consumo de energa de los ordenadores paralelos se
ha convertido en una preocupacin.

REFERENCIAS

http://www.netlib.org/hence/
Encuesta

Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

Este fue el cuestionario aplicado a 50 alumnos de la Facultad de Ingenieria de la UAEMex.

1.- Es crtico el rendimiento y la escalabilidad para que el software sea exitoso?

2.- Cul consideras que es tu nivel de conocimientos de programacin para


mltiples hilos y ncleos?

3.- En qu tipo de plataformas implementa sus aplicaciones?

4.- Si fuera dueo de un negocio de desarrollo de software, Qu sera lo ms


importante para usted en el desarrollo de cdigo paralelo?
5.- Qu lenguaje utilizas para desarrollar?

Anlisis de los resultados:

Pregunta 1:

El 82% de las personas encuestadas piensa que es extremadamente critico el rendimiento y la


escalabilidad para que el software sea exitoso.

Mientras que nadie contesto que el rendimiento y escabilidad no son importantes.

Pregunta 2:
El 56% de las personas entrevistadas dijo que posee conocimiento y domina la programacin para
multiples hilos y ncleos.

El 42% contesto que posee conocimientos teoricos desactualizados, 2% dijo que es experto en
programacion paralela y nadie dijo que no conociera esta disciplina.

Pregunta 3:

El 62% de los entrevistados dijo que implementan sus aplicaciones en estaciones de trabajo y
servidores, 22% en plataformas moviles, 10% en grids, clusters, Cloud y solo un 6% dijo que en
super computadoras.
Pregunta 4:

El 56% contesto a esta pregunta que para ellos lo mas importante si fueran dueos de un negocio
de desarrollo de software es optimizar el rendimiento multicore con el minimo esfuerzo, el 24% dijo
facilidad en convertir aplicaciones secuenciales en paralelas, el 16% dijo compatibilidad con las
normas abiertas de clculo paralelo y solo un 4% contesto rendimiento linealmente a escala a
travs de hardware heterogneo.

Pregunta 5:
El 37% de los encuestados dicen que ellos desarrollan software en c/c++, 29% usan ms Java,
24% dijo Python, 5% utiliza C# y el otro 5% usa Fortran. Podemos ver que el lenguaje mas utilizado
segun los resultados es C/C++, Java y Python.
COMPUTADORAS CUNTICAS

Universidad Autnoma del Estado de Mxico

Facultad de Ingeniera (ICO)

Unidad de Aprendizaje: Programacin Paralela y Distribuida

Profesor: Ing. Elfego Gutierrez Ocampo

Alumno: Gustavo Adolfo Mercado Gonzlez

INTRODUCCIN

Las computadoras se han vuelto parte de nuestra vida cotidiana. Estn presentes no slo en
las universidades, oficinas y escuelas, sino en las casas de muchas personas. Las
computadoras modernas almacenan nuestros datos, nos comunican con los amigos, sacan
fotos y sirven para escuchar msica. Sin embargo, no hay que olvidar su propsito original:
hacer clculos. Ha habido recientemente un enorme avance en la computacin numrica.
Cada ao aparecen procesadores ms rpidos y debemos tirar a la basura las computadoras
que orgullosamente compramos hace poco tiempo. Qu nos depara el futuro?

DESARROLLO

Una computadora cuntica es un dispositivo informtico que hace uso directo del fenmeno de la
mecnica cuntica, como la superposicin y el entrelazamiento cuntico, para realizar operaciones
sobre datos.

Las computadoras cunticas son diferentes de las computadoras tradicionales basadas


en transistores. El principio bsico detrs de la computacin cuntica es que las propiedades
cunticas pueden ser usadas para representar datos y realizar operaciones sobre los mismos.
La computacin cuntica se basa en el uso de qubits en lugar de bits, y da lugar a nuevas puertas
lgicas que hacen posibles nuevos algoritmos. Una misma tarea puede tener diferente complejidad
en computacin clsica y en computacin cuntica, lo que ha dado lugar a una gran expectacin,
ya que algunos problemas intratables pasan a ser tratables. Un modelo terico es la mquina
cuntica de Turing, tambin conocida como computadora cuntica universal.

La creacin de una computadora cuntica promete revolucionar la ciencia y la tecnologa. Sin


embargo, hay muchos obstculos que vencer para realizar este sueo.

El aumento en la velocidad y la potencia de las computadoras en los ltimos aos y los efectos
de esta tecnologa son tan espectaculares, que uno podra pensar que no tienen lmites. Y ni
siquiera hace falta tomar en cuenta los cambios que las computadoras han producido en el
comercio y la economa. Basta considerar el efecto de las computadoras en la ciencia para
darse cuenta de que han cambiado nuestra manera de estudiar la naturaleza. Hoy en da las
computadoras nos permiten simular, por ejemplo, colisiones de galaxias y la formacin de las
primeras estrellas. As podemos estudiar y entender estos sucesos sin necesidad de que
ocurran ante nuestros ojos. Podemos decir que los cientficos cuentan con una nueva
herramienta, adems de las tradicionales (la teora y la experimentacin): la ciencia
computacional.

El lenguaje natural de las computadoras


Bsicamente, no hay diferencia entre las primeras computadoras y las modernas. Todas usan
el sistema de numeracin binario para codificar y manipular informacin. En la escuela
aprendemos a contar con el sistema decimal. En este sistema, los nmeros se construyen con
10 smbolos fundamentales (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) que, ubicados en distintas posiciones en
el nmero, cuantifican las unidades, decenas, centenas que contenga la cantidad en
cuestin. Seguramente es el ms comn porque tenemos diez dedos. El sistema binario, en
cambio, tiene slo dos smbolos, el 0 y el 1, y es el ms sencillo posible. En el sistema binario
las posiciones no indican unidades, decenas, centenas, etectera (que son las potencias de
10: 10 0 , 10 1 , 10 2 ), sino potencias de 2: 2 0 , 2 1 , 2 2, 2 3 . Por ejemplo, en notacin
binaria los nmeros 0, 1, 2, 3, 4 se escriben as: 0,1,10,11,100. Para hacer operaciones
aritmticas en binario basta recordar que en esa notacin 1 ms 1 es igual a 10 y que 1
multiplicado por 1 es 1. En el sistema decimal, en cambio, tenemos que memorizar muchas
sumas y multiplicaciones.
El elemento fundamental de todas las computadoras es una celda de memoria
llamada bit(contraccin de binary digit, o dgito binario en ingls), que puede existir en dos
estados, normalmente denotados por 0 y 1. Tcnicamente estos bits se relacionan con unos
dispositivos electrnicos (transistores) que representan los estados 0 y 1 interrumpiendo o
dejando pasar una corriente elctrica. La notacin binaria es el lenguaje natural de las
computadoras. Pero tiene un problema: que los nmeros, salvo los ms pequeos, son muy
largos (por ejemplo, el nmero 40 en binario se escribe 101000). Para manipular la
informacin con ms facilidad se define el byte, un grupo de ocho bits.

El proceso de computacin en general consiste en aplicar una secuencia de operaciones a


ciertos bits. La regla que dice qu bits intervienen y en qu orden se llama algoritmo. Cada
clculo particular tiene un algoritmo, definido por el programador usando un lenguaje
computacional. Las computadoras que funcionan aplicando algoritmos a informacin
codificada en bits se llaman computadoras clsicas. Las computadoras clsicas (todas las que
existen hoy, por rpidas o complejas que sean) son equivalentes a una mquina de Turing,
modelo terico de computadora descrito por Alan Turing en 1936 y perfeccionado por John
von Neumann en 1940.

Lmites de las computadoras clsicas


La mquina de Turing, y por lo tanto todas las computadoras de hoy, funcionan de acuerdo
con las leyes de la llamada fsica clsica. 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 ambigedades. Pero la mecnica
cuntica, teora que describe el comportamiento de la materia en la escala de los tomos y las
partculas subatmicas como el electrn, ha demostrado que nuestro mundo es ms
complicado.

Richard Feynman, uno de los fsicos tericos ms brillantes del siglo pasado, reflexion en
1982 acerca de las limitaciones de las computadoras clsicas. Le interesaba, en particular, el
problema de hacer simulaciones del mundo real, que es cuntico a fin de cuentas, por medio
de computadoras clsicas. Se puede? Simular un fenmeno por medio de una computadora
exige que le proporcionemos a sta las ecuaciones matemticas que describen el fenmeno.
La descripcin matemtica de los fenmenos cunticos es la ecuacin de Schrdinger. Se
trata de una ecuacin diferencial que una computadora clsica puede manipular. En otras
palabras, nada impide resolver ecuaciones de movimiento cuntico con una computadora
clsica. Pero la dificultad, como indic Feynman, es que slo podramos resolver problemas
muy simples y de poco inters, en los que intervienen slo unas cuantas partculas (en un
sistema cuntico de inters hay miles de millones de partculas). Si el nmero de partculas
aumenta, la capacidad de la mquina debe aumentar exponencialmente. Para simular
procesos cunticos no triviales la computadora clsica tendra que ser gigantesca, porque su
capacidad aumenta en forma lineal. Adems de plantear esta crtica de la fsica computacional
clsica, Richard Feynman Propuso la utilizacin de sistemas cunticos sencillos,
llamados qubits (de quantum bits), como elementos estructurales bsicos de una nueva
computadora. As nace el sueo de una computadora cuntica.

CONCLUSIONES

La computadora ha ido evolucionando segn las necesidades del usuario, cada vez se hace
mas rigidos los requerimientos y caracteristicas de un equipo de computo.
El usuario ya exige mayor velocidad del procesamiento de datos, mayor espacio de
almacenamiento y es por eso que la computadora va evolucionando o sufriendo cambios que
nos permiten avanzar en el mundo de la tecnologa.
La tecnologa nos ha alcanzado y nos ha rebasado, estamos en un tiempo donde la
computadora se ha convertido en una necesidad y como no nos conformamos siempre tendra
avances que nos facilitara el trabajo y problemas que se presentan en la vida diaria. Asi nace
la computacin Cuntica.

FUENTES

http://www.comoves.unam.mx/numeros/articulo/67/computacion-cuantica

http://www.alegsa.com.ar/Dic/computadora%20cuantica.php

You might also like