Pregunta

¿Alguien puede ayudarme? Estoy trabajando en una presentación y me gustaría incluir un poco sobre "La diferencia entre programación multinúcleo y concurrente". Busqué en Google un poco pero no encontré muchas buenas descripciones, ¡se agradece cualquier ayuda!:)

Gracias,

Eamonn

¿Fue útil?

Solución

Concurrente (que ocurre o existe simultáneamente) implica que un código diferente MAYO ejecutar en el mismo ciclo exacto. Significa que las cosas pueden posiblemente ocurre en paralelo si múltiples procesadores o un procesador con múltiples núcleos están disponibles y el programa se elabora correctamente. Solo agregar hilos no implica una ejecución concurrente.

La razón por la que digo MAYO y posiblemente es que cada vez que los programas separan los hilos necesitan compartir un estado volátil/mutable, otros hilos que necesitan acceso a ese estado no pueden continuar ejecutándose y tendrán que esperar su turno para acceder a ese estado, y las cosas comienzan a suceder en serie nuevamente.

Por lo general, esto se implementa en un solo programa como más de un hilo que ejecuta código simultáneamente en el mismo ciclo exacto que otro hilo, dado que no hay contenciones de recursos como se mencionó anteriormente. Esto requiere múltiples procesadores o núcleos físicos. Otros modelos ejecutan múltiples procesos de OS de peso pesado que pueden ejecutarse simultáneamente.

La programación concurrente es muy difícil de hacer correctamente con el estado compartido mutable.

Puedes escribir un concurrente programa que se ejecuta en serie En un solo procesador de un solo núcleo, pero escala para ejecutar más cosas al mismo tiempo cuando hay más procesadores o núcleos, o incluso procesadores múltiples con múltiples núcleos.

También puede hacer que los programas de un solo roscado parecer concurrente en un sistema de múltiples núcleos / multiprocesador si pueden operar en rangos independientes de datos de entrada al mismo tiempo. Ejemplo: un solo programa de renderizado 3D enhebrado puede en una máquina de doble núcleo puede ejecutar 2 instancias separadas, la primera representación de todos los cuadros impares y el segundo renderizado todos los marcos pares. Mientras no intenten compartir recursos mutables.

Multicore significa que una sola CPU tiene múltiples núcleos de procesador que pueden ejecutar hilos o procesos simultáneamente y típicamente aparece como múltiples procesadores para los sistemas operativos convencionales.

Lo hace NO implica que los programas que son un solo enhebrado obtienen comportamientos o beneficios de concurrencia de los núcleos de procesadores adicionales disponibles.

Otros consejos

La programación concurrente es más amplia, solo se refiere a escribir un software que se ejecutará "simultáneamente", es decir: más de una cosa sucederá a la vez.

La programación de "núcleo múltiple" realmente se refiere a un subconjunto específico de programación concurrente, en la que está arrastrando múltiples núcleos de CPU disponibles en una máquina específica. Esta es la forma más común de programación concurrente (generalmente un solo proceso que se ejecuta en una sola computadora), pero aún solo una forma de programación concurrente.

Puede realizar una programación concurrente en una máquina que solo tiene un núcleo de CPU. El sistema operativo proporciona la ilusión de que más de un hilo se ejecuta al mismo tiempo, cambia rápidamente de ida y vuelta entre ellos.

Una máquina con múltiples núcleos simplemente necesita que este contexto cambie con menos frecuencia ya que dos hilos pueden ejecutarse al mismo tiempo en dos núcleos. Es solo un poco especial porque los errores de enhebramiento pueden hacer que su vida sea difícil mucho más rápido. Las probabilidades de que dos hilos intenten acceder a una ubicación de memoria compartida al mismo tiempo son mucho más altas.

En un alto nivel, el núcleo múltiple es un atributo del chip de procesador en su computadora. Multi Core significa que tiene múltiples núcleos de procesamiento. Existen varios tipos de computadoras multiprocesador: las súper computadoras de estilo antiguo con miles de computadoras conectadas a través de Ethernet, sistemas con más que procesadores (como 2 Pentium 4S) y sistemas contemporáneos de múltiples núcleos donde cada paquete de procesadores tiene múltiples núcleos de procesamiento como 9 como Intel i7). El tercer tipo a menudo se llama multicore de multiprocesador de chip (CMP).

La programación concurrente es un atributo de software. La programación concurrente se trata de escribir código que se ha dividido en múltiples tareas que pueden ejecutarse simultáneamente si los procesadores están disponibles. Mientras que los programas concurrentes aprovechan el núcleo múltiple, la programación concurrente es más amplia en dos dimensiones:

  1. Los programas concurrentes pueden ejecutarse en un solo núcleo o múltiples núcleos.
  2. Los programas concurrentes se pueden usar en cualquier tipo de procesadores múltiples que mencioné anteriormente.

Así, para resumir:

La programación concurrente se trata de software que puede usar múltiples procesadores si están disponibles. Esos procesadores pueden estar en el mismo chip (multi-núcleo o multiprocesador de chip) o en diferentes chips (a menudo conocidos como SMP). Puede tener sistemas en los que puede colocar dos chips de múltiples núcleos en el mismo sistema, lo que lo convierte en un CMP y un SMP al mismo tiempo. La programación concurrente también funcionará para eso.

Programación concurrente Saludos operaciones que parecen superponerse y se preocupa principalmente por la complejidad que surge debido al flujo de control no determinista. Los costos cuantitativos asociados con los programas concurrentes suelen ser tanto rendimiento como latencia. Los programas concurrentes a menudo están encuadernados, pero no siempre, por ejemplo, los recolectores de basura concurrentes están completamente en la CPU. El ejemplo pedagógico de un programa concurrente es un rastreador web. Este programa inicia solicitudes de páginas web y acepta las respuestas simultáneamente a medida que los resultados de las descargas están disponibles, acumulando un conjunto de páginas que ya se han visitado. El flujo de control no es determinista porque las respuestas no se reciben necesariamente en el mismo orden cada vez que se ejecuta el programa. Esta característica puede hacer que sea muy difícil depurar programas concurrentes. Algunas aplicaciones son fundamentalmente concurrentes, por ejemplo, los servidores web deben manejar las conexiones del cliente simultáneamente. Erlang, F# flujos de trabajo asincrónicos y Scala's Akka La biblioteca son quizás los enfoques más prometedores para la programación altamente concurrente.

Programación multinúcleo es un caso especial de programación paralela. La programación paralela se refiere a las operaciones que se superponen para el objetivo específico de mejorar el rendimiento. Las dificultades de la programación concurrente se evaden haciendo que el flujo de control sea determinista. Por lo general, los programas generan conjuntos de tareas infantiles que se ejecutan en paralelo y la tarea principal solo continúa una vez que cada subtarea ha terminado. Esto hace que los programas paralelos sean mucho más fáciles de depurar que los programas concurrentes. La parte difícil de la programación paralela es la optimización del rendimiento con respecto a problemas como la granularidad y la comunicación. Este último sigue siendo un problema en el contexto de los múltiples porque hay un costo considerable asociado con la transferencia de datos de un caché a otro. Dense Matrix-Matrix Multiply es un ejemplo pedagógico de programación paralela y se puede resolver de manera eficiente utilizando el algoritmo dividido y conquista de Straasen y atacando los subproblemas en paralelo. Cilcho es quizás el enfoque más prometedor para la programación paralela de alto rendimiento en los múltiples y se ha adoptado en ambos Intel's Bloques de construcción roscados y Microsoft's Biblioteca paralela de tareas (en .NET 4).

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