Pregunta

¿Hay algún paradigma que le dará una forma de pensar diferente o tener una opinión diferente a la escritura de aplicaciones multi-hilo? Tal vez algo que se siente muy diferente, como la programación de procedimiento para la programación de funciones.

¿Fue útil?

Solución

La concurrencia tiene muchos modelos diferentes para diferentes problemas. La página de Wikipedia para la concurrencia noreferrer"> que tiene un buen punto de partida para diferentes tipos de formas de acercarse a la concurrencia.

El enfoque que toma es muy dependiente del problema en cuestión. Diferentes modelos resuelven varios problemas diferentes que pueden surgir en aplicaciones simultáneas, y algunos se basan en otros.

En la clase I enseñaron que la concurrencia utiliza exclusión mutua y sincronización de juntos para resolver los problemas de concurrencia. Algunas soluciones requieren solamente una, pero con tanto usted debe ser capaz de resolver cualquier problema de concurrencia.

En un concepto muy diferente usted podría mirar a la inmutabilidad y concurrencia. Si todos los datos son inmutables entonces ni siquiera se requiere que los enfoques convencionales para la concurrencia. Este artículo explora ese tema.

Otros consejos

Realmente no entiendo la pregunta, pero si empezar a hacer algo de código usando CUDA dar que de alguna manera diferente de pensar acerca de las aplicaciones multi-threading.

Se diferencia de la técnica de multi-threading generales, como semáforos, monitores, etc., ya que tiene miles de hilos simultáneamente. Así que el problema de paralelismo en CUDA reside más en particionar sus datos y la mezcla de los fragmentos de datos más tarde.

Sólo un pequeño ejemplo de un replanteamiento completo de un problema en serie común es el Barrido algoritmo. Es tan simple como:

  • Dado un conjunto {a, b, c, d, e}

Quiero que el siguiente conjunto:

{a, a + b, a + b + c, a + b + c + d, a + b + c + d + e}

Cuando el símbolo '+' en este caso es cualquier operador Commutattive (no sólo positivo, que puede hacer la multiplicación también).

La forma de hacerlo en paralelo? Es un replanteamiento completa del problema, se describe en este papel .

Muchos más implementaciones de diferentes algoritmos en CUDA se pueden encontrar en la NVIDIA página web

Bueno, un cambio de paradigma muy conservadora es de concurrencia hilo-céntrica (compartir todo) hacia centrado en el proceso de concurrencia (separación del espacio de direcciones). De esta manera se puede evitar el intercambio de datos no deseados y es más fácil de hacer cumplir una política de comunicación entre los diferentes subsistemas.

Esta idea es vieja y se propagó (entre otros) por la comunidad micro-kernel del sistema operativo para construir sistemas operativos más fiables. Curiosamente, el Singularidad OS prototipo por Microsoft Research muestra que los espacios de direcciones son tradicionales ni siquiera es necesario cuando se trabaja con este modelo.

La idea relativamente nueva que más me gusta es transaccional memoria : evitar problemas de concurrencia asegurándose actualizaciones son siempre atómica.

Tener un looksee en OpenMP para una variación interesante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top