¿El advenimiento de las arquitecturas multi-núcleo afecta a mí como un desarrollador de software?

StackOverflow https://stackoverflow.com/questions/567528

  •  05-09-2019
  •  | 
  •  

Pregunta

Como un desarrollador de software que se ocupa sobre todo con los lenguajes de programación de alto nivel que no estoy seguro de lo que puedo hacer para pagar adecuada atención a la próxima omnipresencia de los ordenadores multinúcleo. Escribo sobre todo aplicaciones ordinarias y sin exigir, sin embargo, creo que es importante saber si necesito cambiar cualquier paradigmas de programación o incluso el lenguaje para dominar el futuro.

Mi pregunta, por lo tanto:
How to deal with increasing multicore presence in day-by-day hacking?

¿Fue útil?

Otros consejos

La mayoría de los problemas no requieren una gran cantidad de tiempo de CPU. En realidad, los núcleos individuales son bastante lo suficientemente rápido para muchos propósitos. Cuando usted encuentra que su programa es demasiado lento, de perfil Primera y mirar a su elección de algoritmos, la arquitectura y el almacenamiento en caché. Si eso no te lleva suficiente, tratar de dividir el problema arriba en procesos separados. A menudo vale la pena hacerlo simplemente por aislamiento de fallos y para que pueda entender el uso de la CPU y la memoria de cada proceso. Además, normalmente cada proceso se ejecutará en un núcleo específico y hacer un buen uso de las memorias caché del procesador, por lo que no tendrá que sufrir la sobrecarga de rendimiento sustancial de mantener las líneas de caché coherente. Si usted va para un diseño de múltiples procesos y todavía encuentra un problema necesita más tiempo de CPU que se obtiene con la máquina que tiene, está bien situado para extenderlo atropellado un clúster.

Hay situaciones en las que necesita múltiples hilos dentro del mismo espacio de direcciones, pero ten en cuenta que las discusiones son muy difíciles de conseguir la derecha. Las condiciones de carrera, especialmente en idiomas que no son seguras, a veces tomar semanas para depurar; A menudo, la simple adición de rastreo o correr bajo un depurador va a cambiar los tiempos suficientes para ocultar el problema. Basta con poner cerraduras en todas partes a menudo significa que usted obtiene una gran cantidad de gastos generales de bloqueo y, a veces tanto la contención de bloqueo que realmente no consigue la ventaja de concurrencia que usted esperaba. Incluso cuando se tiene el derecho de bloqueo, este caso es necesario para sintonizar perfil de coherencia de caché. En última instancia, si se quiere realmente sintonizar un código altamente concurrente, que probablemente va a terminar mirando construcciones sin bloqueo y combinaciones de bloqueo más complejos que los de las bibliotecas multi-threading actuales.

Conozca los beneficios de la concurrencia, y los límites (por ejemplo, la ley de Amdahl).

Así se puede, cuando sea posible, explotar la única vía para un mayor rendimiento que va a estar abierto. Hay una gran cantidad de trabajo innovador que sucede en los enfoques más fácil (futuros y bibliotecas de tareas), y el trabajo de edad siendo redescubierta (lenguajes funcionales y los datos inmutables).

El almuerzo gratuito ha terminado, pero eso no quiere decir que no hay nada que explotar.

En general, se vuelven muy amigable con el roscado. Es un mecanismo terrible para la paralelización, pero es lo que tenemos.

Si usted trabaja con .NET, mira las extensiones paralelas. Ellos le permiten realizar con facilidad muchas tareas de programación paralela.

Para beneficiarse de más que un solo núcleo debe tener en cuenta la paralelización de su código. Múltiples hilos, tipos inmutables, y un mínimo de sincronización son nuevos amigos.

Creo que dependerá de qué tipo de aplicaciones se está escribiendo.

Una cierta clase de aplicaciones se benefician más del hecho de que están ejecutan en una CPU mutli-core que otros. Si su aplicación puede beneficiarse del hecho de núcleos múltiples, entonces usted debe estar listo para ir en paralelo. El almuerzo gratuito ha terminado; es decir: en el pasado, su aplicación se hizo más rápido cuando una nueva CPU fue puesto en libertad y que no tenía que poner ningún esfuerzo en su aplicación para conseguir que la velocidad extra. Ahora, para tomar ventaja de las capacidades de una CPU multi-core ofrece, usted tiene que asegurarse de que su aplicación puede tomar ventaja de ella. Es decir: usted tiene que ver qué tareas se puede ejecutar multiproceso / al mismo tiempo, y esto trae algunos problemas a la mesa ...

Más Erlang / F # (dependiendo de la plataforma)

  • Prefiero estructuras de datos inmutables, su uso hace que el software más fácil de entender no sólo en programas concurrentes.

  • Saber las herramientas para la concurrencia en su idioma (por ejemplo java.util.concurrent, JCIP ).

  • Aprender un lenguaje funcional (por ejemplo Haskell ).

Me han preguntado la misma pregunta, y la respuesta es "depende". Si su Winforms Joe, tal vez no tanto. Si el código de escritura que deben ser performante, sí. Uno de los problemas más grandes que puedo ver con la programación paralela es la siguiente: si algo no se puede parallized, y se miente y dice el tiempo de ejecución de hacerlo en paralelo de todos modos, que no va a chocar, que sólo va a hacer las cosas mal , y obtendrá resultados muy mala y culpar al marco.

Más OpenMP y MPI de código C y C ++.

OpenMP también se aplica a otros idiomas, así como Fortran supongo.

Escribir programas más pequeños.

Otros lenguajes de código / estilos le permitirá hacer multithreading mejor (aunque multihilo sigue siendo muy difícil en cualquier idioma), pero la gran ventaja para los desarrolladores regulares, en mi humilde opinión, es la capacidad de ejecutar una gran cantidad de programas más pequeños al mismo tiempo para llevar a cabo algunos mucho más grande tarea.

Por lo tanto, entrar en el hábito de romper sus problemas en componentes independientes que se pueden ejecutar en cualquier momento.

Se va a construir el software más fácil de mantener también.

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