Vous êtes sur la page 1sur 12

3 Fundamental Los conceptos de paralelo

Los discutidos en los captulos anteriores, la programacin paralela utiliza hilos para
permitir que mltiples operaciones de proceder simultneamente. El toda
concepto de centros de programacin en paralelo en el diseo, desarrollo, y el despliegue de
hilos dentro de una aplicacin y la coordinacin entre los temas y sus respectivas
operaciones. En este captulo se examina cmo dividir las tareas de programacin en trozos
que son adecuados para enhebrar. A continuacin, aplica estas tcnicas al parecer serial
problema de la difusin de errores.

Disear para Temas
Los desarrolladores que estn familiarizadas con la programacin paralela en general
sentirse cmodo con los modelos tradicionales de programacin, tales como objetos
programacin orientada a objetos (POO). En este caso, un programa comienza en un
definido punto, tales como el main () funcin, y funciona a travs de una serie de tareas en
la sucesin. Si el programa se basa en la interaccin con el usuario, el principal instrumento
de procesamiento es un bucle en el que se manejan los eventos de usuario. De permitido
cada caso-un clic de botn, por ejemplo, el programa realiza una secuencia establecida de
acciones que finalmente termina con una espera de la siguiente accin del usuario.
En el diseo de este tipo de programas, los desarrolladores disfrutar de una relativamente
simple programar mundo porque slo una cosa que est sucediendo en un momento dado
momento. Si las tareas del programa deben ser programadas de un modo especfico, es
porque el desarrollador impone un cierto orden en las actividades. En cualquier punto en el
proceso, un paso generalmente fluye hacia la siguiente, que conduce a una conclusin
previsible, sobre la base de parmetros predeterminados.
Para pasar de este modelo lineal a un modelo de programacin paralela, diseadores deben
repensar la idea de flujo del proceso. En lugar de ser limitada por una secuencia de
ejecucin secuencial, los programadores deben identificar las actividades que se pueden
ejecutar en paralelo. Para ello, se hay que ver sus programas como un conjunto de tareas
con dependencias entre ellos. Rompiendo programas hacia abajo en estas tareas
individuales y la identificacin de dependencias se conoce como descomposicin. Un
problema puede ser descompuesto en varias maneras: por tarea, por los datos, o por el flujo
de datos. Tabla 3.1 resumen estas formas de descomposicin. Como veris en breve, estas
diferentes formas de descomposicin reflejan diferentes tipos de actividades de
programacin.

Tabla 3.1
Resumen de las principales formas de descomposicin














La descomposicin de tareas
La descomposicin de un programa por las funciones que realiza la tarea se llama
descomposicin. Es una de las maneras ms sencillas de lograr paralelo ejecucin. Con este
enfoque, las tareas individuales estn catalogadas. Si dos de los que pueden ejecutarse
simultneamente, est previsto que se lo indique el desarrollador. Ejecucin de tareas en
paralelo de esta manera por lo general requiere una ligera modificaciones a las funciones
individuales para evitar conflictos y para indican que estas tareas ya no son secuenciales.
Si estuviramos hablando de jardinera, la descomposicin de tareas sugerira que los
jardineros pueden asignar las tareas basadas en la naturaleza de la actividad: si dos
jardineros se dieron cita en la casa de un cliente, se podra cortar el csped, mientras que
Por otro desmalezado. Siega y el deshierbe son funciones separadas rotos a cabo como
tal. Para su cumplimiento, los jardineros se aseguraran de tener algn tipo de coordinacin
entre ellos, de modo que el herbicida no est sentado en el medio de un csped que necesita
ser cortado.
En trminos de programacin, un buen ejemplo de la descomposicin de tareas es software
de procesamiento de textos, como Microsoft Word. Cuando el usuario abre un documento
de gran extensin, l o ella puede empezar a introducir texto a la derecha de
distancia. Mientras que el usuario introduce texto, documento de paginacin se produce en
el fondo, como se puede ver fcilmente por el rpido aumento de recuento de pginas que
aparece en la barra de estado. Introduccin de texto y la paginacin son dos separados
tareas que sus programadores estallaron por la funcin para ejecutarse en paralelo. Tena
los programadores no estn diseados de esta forma, el usuario se ver obligado a esperar
para todo el documento que se paginado antes de poder entrar en cualquier texto. Muchos
de ustedes probablemente recuerdan que esta espera fue comn en los principios
Procesadores de texto de PC.

Descomposicin de datos
Descomposicin de datos, tambin conocida como paralelismo de datos de nivel, se
descompone tareas de los datos en los que trabajan en lugar de por la naturaleza de la tarea.
Los programas que se descomponen a travs de la descomposicin de datos generalmente
tienen muchos hilos que realizan el mismo trabajo, slo en los diferentes elementos de
datos. Para ejemplo, considere la posibilidad de volver a calcular los valores en una hoja de
clculo grande. Ms bien que tiene un hilo de realizar todos los clculos, la descomposicin
de datos sugerira que tiene dos hilos, cada uno realizando los clculos de media, o
n subprocesos que realizan 1 / n el trabajo.
Si los jardineros utilizan el principio de la descomposicin de datos para dividir su trabajo,
sera tanto cortar la mitad de la propiedad y luego los dos malezas la mitad de las camas de
flores. Al igual que en la informtica, la determinacin de qu tipo de descomposicin es
ms eficaz depende mucho de las limitaciones de la sistema. Por ejemplo, si el rea a cortar
es tan pequeo que no necesita dos cortadoras, esa tarea se realiza mejor por un solo
jardinero que es decir, la descomposicin de tareas es la mejor opcin, y la descomposicin
de datos podra aplicarse a otras secuencias de tareas, como por ejemplo cuando se hace el
corte y los dos jardineros comienzan escarda en paralelo.
A medida que el nmero de ncleos de procesador de descomposicin aumenta, los datos
permite que el tamao del problema a ser aumentada. Esto permite ms trabajo a hacerse en
la misma cantidad de tiempo. Para ilustrar, considere el ejemplo la jardinera. Dos
jardineros ms se aaden al equipo de trabajo.
En lugar de asignar los cuatro jardineros para una yarda, podemos podemos asignar los dos
nuevos jardineros a otro patio, el aumento efectivo de nuestra tamao total del
problema. Suponiendo que los dos nuevos jardineros pueden realizar la misma cantidad de
trabajo como los dos originales, y que los dos yardas tamaos son los mismos, hemos
duplicado la cantidad de trabajo realizado en el mismo cantidad de tiempo

Datos de descomposicin de flujo
Muchas veces, cuando se descompone un problema, el problema fundamental no es lo
tareas deben hacer el trabajo, pero la forma como fluye la informacin entre las diferentes
tareas. En estos casos, la descomposicin de flujo de datos se rompe por un problema cmo
fluyen los datos entre las tareas.
El problema del productor / consumidor es un ejemplo bien conocido de cmo los datos
flujo afecta a una capacidad para ejecutar los programas en paralelo. Aqu, la salida de una
tarea, el productor, se convierte en la entrada a otro, el consumidor. La dos tareas son
realizadas por diferentes hilos, y la segunda, la de los consumidores, no se puede iniciar
hasta que el productor termina una parte de su trabajo.
Usando el ejemplo de la jardinera, un jardinero prepara las herramientas-que
Es decir, se pone gas en la cortadora de csped, limpia las tijeras, y otras tareas similares
tanto para los jardineros a utilizar. No jardinera puede ocurrir hasta que este paso es sobre
todo terminado, momento en el cual puede comenzar el verdadero trabajo de jardinera. La
retraso causado por la primera tarea crea una pausa para la segunda tarea, despus de que
ambas tareas se puede seguir de forma paralela. En trminos informticos, esta modelo en
particular se produce con frecuencia.
En las tareas de programacin comunes, el problema del productor / consumidor ocurre en
varios escenarios tpicos. Por ejemplo, los programas que deben confiar en la lectura de un
archivo de adaptarse a este escenario: los resultados del archivo se convierten de E / S la
entrada a la siguiente etapa, que puede ser roscado. Sin embargo, ese paso no puede
comenzar hasta que la lectura sea completa o ha progresado lo suficiente para que otro
proceso para poner en marcha. Otro comn ejemplo de programacin est analizando: un
archivo de entrada debe ser analizada o analizada semnticamente, antes de las actividades
de back-end, como el cdigo generacin en un compilador, puede comenzar.
El problema del productor / consumidor tiene varias dimensiones interesantes:
La dependencia creada entre el consumidor y el productor puede causar retrasos
significativos si este modelo no se ha implementado correctamente. Un diseo sensible al
rendimiento busca entender la la naturaleza exacta de la dependencia y disminuir el retraso
se impone. Tambin tiene como objetivo evitar las situaciones en las que los consumidores
hilos estn al ralent a la espera de las discusiones de productores.
En el caso ideal, el hand-off entre el productor y consumidor est completamente limpia,
como en el ejemplo del archivo parser. La salida es independiente del contexto y el
consumidor tiene sin necesidad de saber nada sobre el productor. Muchas veces,

Sin embargo, los componentes de productores y consumidores no disfrutan una divisin tan
limpio del trabajo, y la programacin de su interaccin requiere una planificacin
cuidadosa.
Si el consumidor est terminando, mientras que el productor es totalmente hecho, un hilo
permanece inactivo mientras otros subprocesos estn ocupados trabajar lejos. Esta cuestin
viola un objetivo importante de el procesamiento en paralelo, que es el de equilibrar las
cargas de manera que todos disponibles temas se mantienen ocupados. Debido a la relacin
lgica entre estos hilos, que puede ser muy difcil de mantener hilos igualmente ocupado.
En la siguiente seccin, vamos a echar un vistazo a este patrn se permite que
desarrolladores para resolver el problema del productor / consumidor en un escalable la
moda.

Implicaciones de diferentes descomposiciones
Diferentes descomposiciones ofrecen diferentes beneficios. Si el objetivo, por ejemplo, est
la facilidad de programacin y tareas pueden ser claramente dividida por funcionalidad, a
continuacin, la descomposicin de tareas es ms a menudo que no es el ganador.
Descomposicin de datos aade algo de complejidad adicional a nivel de cdigo para las
tareas, por lo que se reserva para los casos en que los datos se divide con facilidad y el
rendimiento es importante.
La razn ms comn para enhebrar una aplicacin es rendimiento. Y en este caso, la
eleccin de descomposiciones es ms difcil. En muchos casos, la eleccin est dictada por
el problema
Dominio: algunas tareas son mucho ms adecuado para un tipo de descomposicin.
Pero algunas de las tareas no tienen claro sesgo. Consideremos, por ejemplo, el
procesamiento imgenes en una secuencia de vdeo. En formatos con ninguna dependencia
entre marcos, tendr la opcin de descomposicin. En caso de que elija la tarea
descomposicin, en el que un hilo hace decodificacin, otro color equilibrio, y as
sucesivamente, o la descomposicin de datos, en la que cada hilo hace todo el trabajo en un
fotograma y luego se mueve a la siguiente? Para volver a la la analoga de los jardineros, la
decisin tomara esta forma: Si dos jardineros tienen que cortar dos zonas de csped y
malezas dos parterres, cmo en caso de que proceda? Si una jardinera slo pode-es decir,
que seleccione la tarea basada en la descomposicin o deben cortar los dos jardineros juntos
entonces malezas juntos?

En algunos casos, la respuesta surge rpidamente-por ejemplo, cuando un existe restriccin
de recursos, como un solo corte. En otros, donde cada jardinero tiene una cortadora, la
respuesta viene slo a travs de una cuidadosa anlisis de las actividades que lo
componen. En el caso de los jardineros, tarea descomposicin se ve mejor porque el
tiempo de puesta en marcha para la siega es salvado si slo una segadora est en uso. En
ltima instancia, determina el derecho responder por el uso de la aplicacin de la
programacin paralela de cuidado planificacin y ensayo. El momento y la evaluacin
emprica juega un ms papel importante en las decisiones de diseo que realice en la
programacin paralela que lo hace en la programacin de un solo subproceso estndar.


Desafos que enfrentar
El uso de hilos que permite mejorar notablemente el rendimiento permitir que dos o ms de
las actividades se produzcan simultneamente. Sin embargo, los desarrolladores no pueden
dejar de reconocer que los hilos aaden una medida de complejidad que requiere una
consideracin cuidadosa para navegar correctamente.
Esta complejidad se debe al hecho inherente de que ms de una actividad que est
ocurriendo en el programa. Gestin de actividades y sus simultneas posible interaccin
que conduce a enfrentar cuatro tipos de problemas:
La sincronizacin es el proceso por el cual dos o ms hilos coordinar sus actividades. Por
ejemplo, un hilo espera otra para terminar una tarea antes de continuar.
La comunicacin se refiere a los problemas de ancho de banda y la latencia asociado con el
intercambio de datos entre los hilos.
El equilibrio de carga se refiere a la distribucin del trabajo a travs de mltiples hilos de
manera que todos ellos realizan ms o menos la misma cantidad de trabajar.
La escalabilidad es el reto de hacer un uso eficiente de un mayor nmero de hilos cuando el
software se ejecuta en ms apto sistemas. Por ejemplo, si un programa est escrito para
hacer un buen uso de cuatro ncleos de procesador, que se escala correctamente cuando se
ejecuta en un sistema con ocho ncleos de procesador?
Cada uno de estos temas se deben manejar con cuidado para maximizar la aplicacin
rendimiento. Los captulos siguientes describen muchos aspectos de estos problemas y la
mejor manera de hacerles frente para sistemas multi-core.


Paralelo Programacin de patrones
Durante aos, los programadores orientados a objetos han estado utilizando patrones de
diseo para disear lgicamente sus aplicaciones. Programacin paralela no es diferente de
los problemas de programacin de programacin paralelos orientados a objetos
generalmente se dividen en uno de varios patrones bien conocidos. Algunos de los ms
patrones comunes de programacin en paralelo y su relacin con la descomposiciones antes
mencionados se muestran en la Tabla 3.2.

Tabla 3.2
Patrones comunes de programacin paralela
Patrn
Descomposicin
Paralelismo de tareas a nivel de
Tarea
Divide y vencers
Tarea / Datos
Geometric Data descomposicin
Tubera
Flujo de datos
Wavefront
Flujo de datos


En esta seccin, vamos a dar una breve descripcin de cada patrn y el tipos de problemas
que cada patrn se puede aplicar a. Patrn Paralelismo de tareas de nivel superior. En
muchos casos, la mejor manera de ejecucin paralela lograr es centrarse directamente en las
tareas a s mismos. En este caso, el patrn de paralelismo a nivel de tarea hace tiene ms
sentido. En este patrn, el problema se descompone en un conjunto de tareas que operan de
forma independiente. A menudo es necesario eliminar las dependencias entre las tareas o
dependencias separadas mediante la replicacin. Problemas que se ajustan a este patrn
incluyen la los llamados problemas embarazosamente paralelos, aquellos donde no hay
dependencias entre temas y datos replicados problemas, aquellos en los que las
dependencias entre los hilos puede ser eliminado de los hilos individuales.
Divide y vencers Patrn. En el patrn de divisin y conquista, el problema se divide en un
nmero de sub-paralelo problemas.
Cada sub-problema se resuelve de forma independiente. Una vez que cada sub-
problema se resuelve, los resultados se agregan en la final solucin. Dado que cada sub-
problema puede ser resuelto de forma independiente, estos sub-problemas se pueden
ejecutar de forma paralela. El divide y vencers es ampliamente utilizado en la secuencia
algoritmos como una especie de combinacin. Estos algoritmos son muy fciles de
paralelizar. Este patrn general hace un buen trabajo de la carga equilibrar y presenta una
buena localidad; que es importante para los uso de la cach eficaz.
Patrn de descomposicin geomtrica. La descomposicin geomtrica patrn cin se basa
en la paralelizacin de las estructuras de datos utilizado en el problema a resolver. En la
descomposicin geomtrica, cada hilo es responsable de operar en "trozos" de datos. Este
patrn puede aplicarse a problemas tales como el flujo de calor y de las olas propagacin.
Patrn Pipeline. La idea detrs de este patrn se es idntico a la de una lnea de
montaje. La manera de encontrar la concurrencia aqu es para romper el clculo en una
serie de etapas y tienen cada obra rosca en un escenario diferente al mismo tiempo.
Wavefront Patrn. El patrn de frente de onda es til cuando el procesamiento de
elementos de datos a lo largo de una diagonal en una de dos dimensiones rejilla. Esto se
muestra en la Figura 3.1

Los nmeros en la Figura 3.1 ilustran el orden en que los datos elementos se procesan. Por
ejemplo, los elementos en la diagonal que contiene el nmero "3" son dependientes de
elementos de datos "1" y "2" en trmite con anterioridad. Los datos sombreadas elementos
en la figura 3.1 indican los datos que ya ha sido procesada. En este patrn, es crtico para
reducir al mnimo el tiempo de inactividad dedicado por cada hilo. El balanceo de carga es
la clave del xito de este patrn.
Para una mirada ms amplia y profunda en el diseo de la programacin paralela patrones,
consulte el libro de Patrones de Programacin Paralela (Mattson
2004).


Un problema Motivar: Difusin de error
Para ver cmo se puede aplicar los mtodos antes mencionados a una prctica problema de
computacin, considerar el algoritmo de difusin de error que se utiliza en muchos grficos
por ordenador y los programas de procesamiento de imgenes. Originalmente propuesto por
Floyd y Steinberg (Floyd 1975), difusin de errores es una tcnica para la visualizacin de
imgenes digitales de tono continuo en los dispositivos que tienen limitada gama de colores
(tonos). Impresin de 8 bits en escala de grises en la imagen para una impresora negro y
blanco es problemtico. La impresora, que es un nivel de bi dispositivo, no se puede
imprimir la imagen de 8 bits de forma nativa. Se debe simular mltiples tonos de gris
mediante el uso de una tcnica de aproximacin. Un ejemplo de un imagen antes y despus
del proceso de difusin de error se muestra en la Figura 3.2.
La imagen original, compuesto por 8 bits en escala de grises pxeles, se muestra en la a la
izquierda, y el resultado de la imagen que ha sido procesado utilizando el error algoritmo de
difusin se muestra a la derecha. La imagen de salida se compone de pxeles de slo dos
colores: blanco y negro.









Imagen de 8 bits original en la imagen de 2 bits a la izquierda, resultante a la derecha. En la
resolucin de esta publicacin, se ven similares.







Las mismas imgenes que el anterior, pero ampliada al 400 por ciento y recortar un 25 por
ciento para mostrar los detalles de pxeles. Ahora se puede ver claramente la prestacin
negro-blanco de 2 bits en el derecho y de 8 bits en escala de grises a la izquierda.
Figura 3.2 Difusin de error de salida Algoritmo







El algoritmo bsico de difusin de error hace su trabajo de una forma sencilla de tres paso
del proceso:
1. Determinar el valor de salida dado el valor de entrada de la corriente pxel. Este paso a
menudo utiliza cuantificacin, o en el caso binario,
umbralizacin. Para un nio de 8 bits en escala de grises que se muestra en un 1 bit
dispositivo de salida, todos los valores de entrada en el rango [0, 127] son para ser se
muestra como un 0 y todos los valores de entrada entre [128, 255] estn a se mostrar como
1 en el dispositivo de salida.
2. Una vez que se determina el valor de salida, el cdigo calcula la error entre lo que se
debe mostrar en el dispositivo de salida y lo que realmente se muestra. Como ejemplo,
suponer que el valor de pxel de entrada actual es 168. Dado que es ms grande que nuestro
valor de umbral (128), que determina que el valor de salida ser un 1. Este valor se
almacena en la matriz de salida. Para calcular el error, el programa debe normalizar la
primera salida, por lo que es en el misma escala que el valor de entrada. Es decir, para los
fines de calcular el error de la exhibicin, el pxel de salida debe ser 0 si el pxel de salida
es 0 o 255 si el pxel de salida es 1. En este caso, la Indicador de error es la diferencia entre
el valor real que debera haber sido visualizado (168) y el valor de salida (255), que es -87.
3. Por ltimo, el valor de error se distribuye sobre una base fraccional a la pxeles vecinos
de la regin, como se muestra en la Figura 3.3.




Figura 3.3
Distribucin de valores de error de pxeles vecinos
Este ejemplo utiliza las ponderaciones de error Floyd-Steinberg se propaguen
errores a los pxeles vecinos. 7/16ths del error se calcula y se aaden al pxel a la
derecha del pxel actual que se est procesando.
5/16ths del error se aade al pxel en la fila siguiente, directamente debajo el
pxel actual. Los errores restantes se propagan de una manera similar.
Aunque se pueden utilizar otros sistemas de ponderacin de error, todo error de
difusin algoritmos siguen este mtodo general.
El proceso de tres pasos se aplica a todos los pxeles de la imagen. Ficha 3.1
muestra una implementacin sencilla C del algoritmo de difusin de error,
utilizando
Floyd-Steinberg error pesos.


/ **************************************
* La implementacin inicial del algoritmo de difusin de error.
*************************************** /
void error_diffusion (ancho entero sin signo,
Altura int sin firmar,
unsigned short ** InputImage,
unsigned short ** OutputImage)
{
por (unsigned int i = 0; i <altura, i + +)
{
por (unsigned int j = 0; j <ancho; j + +)
{
/ * 1. Calcular el valor del pxel de salida * /
if (InputImage [i] [j] <128)
OutputImage [i] [j] = 0;
ms
OutputImage [i] [j] = 1;
/ * 2. Calcular el valor de error * /
int err = InputImage [i] [j] - 255 * OutputImage [i] [j];
/ * 3. Distribuya el error * /
InputImage [i] [j +1] + = err * 7/16;
InputImage [i +1] [j-1] + = err * 3/16;
InputImage [i +1] [j] + = err * 5/16;
InputImage [i +1] [j +1] + = err * 1/16;
}
}
}
Ficha 3.1
Implementacin en lenguaje C del algoritmo de difusin de error

Anlisis de la difusin de error Algoritmo
A primera vista, se podra pensar que el algoritmo de difusin de error es un
inherentemente proceso en serie. El enfoque convencional distribuye a errores los pxeles
ya que se calculan. Como resultado, el pxel anterior es error debe ser conocido con el fin
de calcular el valor de la siguiente pxel.
Esta interdependencia implica que el cdigo slo puede procesar un pxel la vez. No es tan
difcil, sin embargo, para abordar este problema de una manera que es ms adecuado para
un enfoque multiproceso.
Un enfoque alternativo: Parallel Difusin de errores
Para transformar el algoritmo convencional de difusin de error en un enfoque que es ms
propicio a una solucin paralela, considere las diferentes descomposicin que
anteriormente estaban cubiertas en este captulo. Que sera apropiado en este caso? Como
sugerencia, considere la Figura 3.4, que revisita la distribucin de error se ilustra en la
Figura 3.3, a partir de un poco diferentes perspectivas.

Figura 3.4
Error-Difusin de errores Clculo del pixel recepcin de
Perspectiva
Teniendo en cuenta que un pxel no se puede procesar hasta que sus predecesores
espaciales han sido procesados, el problema parece prestarse a un enfoque donde tenemos
un productor-o en este caso, varios productores- produccin de datos (valores de error) que
un consumidor (el pxel actual) utilizar para calcular el pxel de salida adecuada. El flujo de
datos de error a la pxel actual es crtica. Por lo tanto, el problema parece romper en una
descomposicin de flujo de datos.

Ahora que hemos identificado el enfoque, el siguiente paso es determinar la mejor patrn
que se puede aplicar a este problema en particular. Cada hilo de ejecucin independiente
debe procesar una cantidad igual de trabajo
(Equilibrio de carga). Cmo debe dividirse el trabajo? Una forma, sobre la base de el
algoritmo presentado en la seccin anterior, sera tener un hilo que procesan los pxeles
incluso en una fila determinada, y otro hilo que procesar los pxeles impares en la misma
fila. Este enfoque es ineficaz
Sin embargo, cada hilo se bloquea esperando que el otro para completar, y el rendimiento
podra ser peor que en el caso secuencial.
Para subdividir eficaz la labor de los temas, necesitamos una manera de reducir (o,
idealmente, eliminar) la dependencia entre pxeles. Figura 3.4 ilustra un punto importante
que no es obvio en la Figura 3.3-que en
Para que un pxel sea capaz de ser procesado, debe tener error de tres valores (con la
etiqueta eA, eB, y la CE 1
En la Figura 3.3) de la fila anterior, y un valor de error desde el pxel que est
inmediatamente a la izquierda en la actual fila. Por lo tanto, una vez que estos pxeles se
procesan, el pxel actual pueden completar su procesamiento. Este orden sugiere una
implementacin donde cada hilo procesa una fila de datos. Una vez que una fila ha
completado procesamiento de los primeros pocos pxeles, el hilo responsables de la
siguiente fila puede comenzar su tratamiento. La figura 3.5 muestra esta secuencia.



Mltiples hilos son capaces de procesar mltiples filas simultneamente.
Figura 3.5
Difusin de errores en paralelo para Multi-thread, Situacin Multi-fila






1
Suponemos eA = eD = 0 en el borde izquierdo de la pgina (para los pxeles en la columna
0), y que eC = 0 en el borde derecho de la pgina (para los pxeles en la columna W-1,
donde W = el nmero de pxeles en la imagen).


Observe que una pequea latencia se produce al comienzo de cada fila. Este latencia se
debe al hecho de que los datos de error de la fila anterior deben ser calculado antes de la
fila actual se puede procesar. Estos tipos de latencia es generalmente inevitable en las
implementaciones de productores y consumidores;
Sin embargo, se puede minimizar el impacto de la latencia como se muestra aqu.
El truco consiste en derivar la carga de trabajo de particionado apropiado para que cada hilo
de ejecucin funciona tan eficientemente como sea posible. En este caso, incurrir en una
latencia de dos pxeles antes de que pueda comenzar el proceso de la siguiente
conversacin.
Una pgina 8.5 "X 11", suponiendo 1.200 puntos por pulgada (dpi), tendra
10.200 pxeles por fila. La latencia de dos pxeles es insignificante aqu.
La secuencia en la Figura 3.5 ilustra el flujo de datos comn a la patrn de frente de onda.
Otras alternativas
En la seccin anterior, hemos propuesto un mtodo de difusin de errores que cada hilo
procesa una fila de datos a la vez. Sin embargo, se podra considerar la subdivisin del
trabajo a un nivel ms alto de granularidad.
Instintivamente, al particionar trabajo entre hilos, uno tiende a mirar para tareas
independientes. La forma ms sencilla de paralelizacin de este problema sera para
procesar cada pgina por separado. En trminos generales, cada pgina sera un conjunto de
datos independientes, y por lo tanto, no se tiene ningn interdependencias. Entonces, por
qu nos proponemos en lugar de una solucin basada en filas de procesamiento de pginas
individuales? Las tres razones principales son:
Una imagen puede ocupar varias pginas. Esta aplicacin sera imponer una restriccin de
una imagen por pgina, lo que podra o no ser adecuado para la aplicacin dada.
El aumento de uso de memoria. Un 8,5 x Pgina 11 pulgadas a 1.200 dpi consume 131 MB
de RAM. Los resultados intermedios deben estar guarda, por lo tanto, este enfoque sera
menos eficiente de la memoria.
Una aplicacin puede, en un caso de uso comn, imprimir slo una de una sola pgina a la
vez. subdividir el problema en el nivel de pgina ofrecera ninguna mejora en el
rendimiento de la secuencia caso.
Un enfoque hbrido sera la de subdividir las pginas y regiones de procesos de una pgina
en un hilo, como se ilustra en la Figura 3.6.


Varios subprocesos de procesamiento de mltiples secciones de pgina
Figura 3.6
Difusin de errores en paralelo para Multi-thread, Situacin Multi-pgina
Tenga en cuenta que cada hilo tiene que trabajar en las secciones de pgina diferente.
Esto aumenta la latencia de inicio implicados antes de que puedan comenzar las discusiones
trabajar. En la Figura 3.6, Tema 2 incurre en un 1/3 de la pgina de inicio de latencia antes
de que puede empezar a procesar los datos, mientras que el hilo 3 incurre un inicio 2/3
pgina latencia. Aunque algo mejorado, el enfoque hbrido sufre limitaciones similares a las
del esquema de particin basado en pginas describen anteriormente. Para evitar estas
limitaciones, usted debe centrarse en la base de la fila aplicacin de difusin de error se
ilustra en la Figura 3.5.
Puntos clave
Este captulo explora los diferentes tipos de arquitecturas de computadora y cmo que
permiten el desarrollo de software paralelo. Los puntos clave a tener en
mente al desarrollo de soluciones para las arquitecturas de computacin en paralelo son:
Descomposiciones caen en una de tres categoras: tareas, datos y flujo de datos.
Particiones paralelismo de tareas a nivel de los trabajos entre los hilos base en las tareas.
Datos rompe descomposicin las tareas basadas en los datos que el Temas trabajar.

Descomposicin de flujo de datos se desglosa el problema en trminos de cmo fluyen los
datos entre las tareas.
La mayora de los problemas de programacin paralelos caen en uno de varios bien
patrones conocidos.
Las restricciones de sincronizacin, comunicacin, equilibrio de carga, escalabilidad y debe
ser tratado de obtener el mayor beneficio de un programa paralelo.
Muchos de los problemas que parecen ser de mayo de serie, a travs de un sencillo
transformacin, se adaptar a una aplicacin paralela.

Vous aimerez peut-être aussi