Biblioteca de programación paralela? (+ algunas características)

8

Nota : esta es una nueva publicación, ya que la pregunta se ha considerado no adecuada para el foro Stack Overflow y debería haberse publicado aquí. El tema original está ahí .

Me gustaría hablar de subprocesos múltiples, paralelismo y las bibliotecas disponibles hoy para lograr ese trabajo. Me pregunto especialmente si ya existe una biblioteca fácil de usar para lograr este concepto (que figura a continuación), o si tendría que estar escrita y qué tan difícil sería.

Los propósitos de la biblioteca que estoy buscando:

  • accesible para la mayoría de los desarrolladores, no solo para ingenieros o personas altamente graduadas (esto debería significar que los desarrolladores QUIEREN usarlo, sin tenerle miedo)
  • disponible para desarrolladores de C ++
  • portátil (comience con Windows, Mac OS X y Linux, luego extienda a dispositivos móviles)
  • ligero
  • fácil de usar (relacionado con la accesibilidad)

Las características más importantes que estoy buscando:

  • paralelismo de tareas
  • cancelación de tareas (de manera suave y abrupta)
  • dependencias de tareas

Las bibliotecas relacionadas existentes :

  • Thread Building Blocks : realmente complicado de usar, y licencia bastante restrictiva (GPL / comercial), es la única biblioteca que he encontrado y que incluye todas las características que estoy buscando
  • Grand Central Dispatch : actualmente no portátil, no demasiado complicado, sin cancelación de tareas (una vez iniciado), sin dependencias de tareas, sin soporte de dependencia automático (solo manual)
  • PFunc : solo Unix, todavía un poco complicado, sin dependencia de tareas, sin cancelación de tareas
  • Biblioteca paralela de tareas de Microsoft : plataforma MS y .NET únicamente, sin cancelaciones de hardware, dependencias de tareas restringidas y manuales (una tarea no puede activar más de otra tarea)
  • OpenCL : actualmente no está disponible en todas las plataformas, no mucho más que una biblioteca de tareas paralelas de GPU (no tan alto nivel como desearía)
  • OpenMP : ampliamente compatible, excepto versiones gratuitas de Visual Studio, sin cancelación de tareas ni dependencias de tareas automáticas

Entonces, ¿qué piensas sobre todo esto? ¿Por qué crees que hay tan pocas bibliotecas que corresponden a estas necesidades? ¿O extrañé alguna gran biblioteca? ¿Y crees que significaría demasiado trabajo lograr uno? O no lo suficientemente interesante? Tenga en cuenta que las carencias que escribí son las que descubrí con algunas búsquedas, no soy un experto en ninguna de estas bibliotecas.

El objetivo final de esta biblioteca, incluso si es más bien un sueño, sería programar de forma paralela tan fácilmente como normalmente lo hace con la programación secuencial.

Ceilo

Ceilo
fuente
Este no es un foro.
DeadMG
aunque no es pertinente para usted pregunta - ¿Has mirado en Erlang
treecoder
@DeadMG: curioso, ¿cuál es la diferencia entre esto y un foro?
Zeke Hansell
La diferencia es que esto es solo preguntas y respuestas. Los foros son para discusión. Este lugar no es para discusión.
DeadMG
@DeadMG: supongo que eso responde a mi pregunta. Y supongo que al decirlo, solo te hago saber que respondiste mi pregunta. No me gustaría ser acusado de tener una discusión en un sitio de preguntas y respuestas. ;-)
Zeke Hansell

Respuestas:

6

TBB es prácticamente todo lo que hay que se acerca. boost::threadEs demasiado bajo nivel. Por cierto, está buscando el TPL en el lugar equivocado: Microsoft envía una biblioteca separada llamada PPL para el código nativo. Por supuesto, solo es compatible con Windows.

Sin embargo, si encuentra que TBB es complicado de usar, me preguntaría si los desarrolladores en los que está pensando son realmente capaces de crear aplicaciones paralelas. TBB tiene una de las interfaces más amigables con cosas simples como parallel_for_each. Si no puede lidiar con un par de lambdas, me resulta difícil ver cómo lidiará con la concurrencia.

DeadMG
fuente
Ok, he echado un vistazo más de cerca a TBB y, de hecho, no parece tan difícil de usar. Me intrigó especialmente la cancelación de tareas y la dependencia, pero la primera se puede lograr cancelando el grupo de tareas y la segunda creando un gráfico de dependencia. Gracias. La licencia de TBB sigue siendo un problema, pero supongo que cuando uno necesita esa calidad de paralelización, comprar una licencia comercial está bien. Los únicos desarrolladores que quedan son aquellos que desarrollan software de código abierto Y comercialmente utilizable.
Ceylo
Tengo que admitir que la licencia podría ser una molestia. Como estudiante recibo Visual Studio gratis, así que nunca tuve que comparar precios.
DeadMG
¿Qué quieres decir? ¿Utiliza TPL o se envía TBB con su edición de Visual Studio?
Ceylo
@Ceylo: Como dije en mi respuesta, Microsoft envió una biblioteca llamada PPL para código nativo. Es muy similar a TBB, pero no idéntico, muy agradable, pero no cumple con sus requisitos de portabilidad.
DeadMG