2011-06-30 15 views
13

En my previous question He preguntado, he tocado el tema parallel_for de ppl.h provisto por Microsoft.
Pero poco después me he dado cuenta de que al usarlo uno hace que su aplicación sea poco comercial (si estoy en lo cierto, es específica de Microsoft (el encabezado ppl.h)).
En mi opinión, esto rompe aspectos muy importantes de la programación en C++ - la portabilidad, y simplemente no estoy preparado para hacerlo.
Así que mis preguntas son:
1. Estoy en lo cierto al decir que el uso de parallel_for de PPL hace que su código no portables (por no portables quiero decir que no puede ser compilada por otro compilador que el de MS)
2. ¿Soy justo al decir que si en la etapa posterior quiero proporcionar UI (hecho en Qt) para la aplicación en la que estoy trabajando en el momento, el uso de parallel_for en mi código será una obstrucción que significa que o bien reemplazaré parallel_for con alguna otra alternativa (portátil) o no podré hacer UI en Qt y core en VS?
3. ¿Cuáles son las alternativas (portátiles) para personas?Alternativas a ppl

Respuesta

14

Es posible que desee considerar el Thread Building Blocks de Intel. A diferencia de OpenMP, TBB en realidad usa C++, en lugar de simplemente compilar bajo un compilador C++ (es decir, ser una biblioteca C que puede compilar como C++). Tiene muchas de las cosas que ves en PPL, pero es multiplataforma.

También hay Boost.Thread, que es C++ (aunque no tan directo como TBB), y es multiplataforma.

+0

muchas gracias por su respuesta. Nicol, ¿hay algo "realmente especial" sobre las personas que haga que uno lo use en lugar de TBB, sacrificando la portabilidad? – smallB

+0

OpenMP no es una biblioteca, es ante todo una extensión de compilación. Agrega paralelismo * en el idioma *. –

+0

@smallB, en VC10 sí, ayuda en la depuración. VC10 muestra tareas paralelas y pilas paralelas, que están bien integradas con ConcRT. – Ajay

0

Estoy en lo cierto al decir que el uso de parallel_for de PPL hace que su código no portables (por no portables quiero decir que no puede ser compilado por otra compilador que el de MS)

no portables si cambias la plataforma en sí. Puede ser portátil en Windows, si desea usar otros compiladores. Pero sepa que PPL es parte de Concurrency Runtime, que se coloca en MSVCRT100.DLL, y necesita vincularlo (o enlazar estáticamente, sin necesidad de DLL en tiempo de ejecución). No estoy seguro de cómo se puede hacer esto con otros compiladores/vinculadores, pero sí creo que es factible.

Estoy en lo cierto al decir que si en adelante etapa quiero proveer la interfaz de usuario (hecho en Qt) para la aplicación que estoy trabajando en el momment, utilizando parallel_for en mi código será una obstrucción de los cuales significaría que, o bien voy a reemplazar parallel_for con alguna otra alternativa (portátil) o no voy a ser capaz de hacer interfaz de usuario en Qt y muñón VS

Usted puede escribir su núcleo- marco en el uso de PPL/VC++, y o la contraparte GUI en QT/other-compiler. Para esto solo cree una DLL que usaría PPL, y su aplicación GUI usaría la DLL. Creo que entiendes lo que quiero decir aquí. Esto también reduce la carga de su cabeza sobre la portabilidad (en Windows).

  1. ¿Cuáles son las alternativas (portátiles) a ppl?

Muchos, pero prefiero usar PPL en Windows/VC++. Puede considerar usar TBB de Intel.OpenMP es problemático y no ofrece ventajas en comparación con TBB/ConcRT

5

Las personas que trabajan en el proyecto Casablanca han estado haciendo una versión portátil de PPL, llamada PPLX. Está licenciado bajo una licencia Apache 2.0.

Anteriormente han dicho que están trabajando en estrecha colaboración con el equipo de PPL para mantener ambas versiones en la función de sincronización y solución de errores (ver la última publicación en this thread).

+0

PPLX se centra en el soporte de tareas. No tiene soporte para parallel_for ni nada que coincida con parallel_ * para el caso. –