2011-03-31 7 views
5

El libro ha sido puesto en libertad:Biblioteca de patrones paralelos de Microsoft: ¿alguien miró para ver qué tan difícil sería hacer un puerto a POSIX/Linux?

http://blogs.msdn.com/b/vcblog/archive/2011/03/15/10139453.aspx

Me pregunto, ¿alguien ha ido a través de la implementación y visto lo fácil que sería para robar/puerto a POSIX? ¿Utiliza extensiones Managed C++, por ejemplo? ¿Alguna idea sobre esto en general, o su biblioteca Agentes síncronos? Sería bueno que hubiera un std ::, o boost :: equivalente.

+0

Cuál es el punto? Ya hay varios soportes para programación paralela en Unix, ¿cuál cree que sería la ventaja de esas bibliotecas de MS que no están disponibles, por ejemplo, en Boost? – DarkDust

+2

TBB de Intel implementa un subconjunto de PPL (sin Agentes Asynchrounous) y está disponible en plataformas POSIX. Por supuesto, utiliza su propio motor paralelo e implementa interfaces PPL encima. –

+2

relacionado con extensiones administradas. PPL no usa extensiones administradas. Hasta donde yo sé, es la base de código estándar C++ 11. El código fuente está disponible ya que está basado en una plantilla – Ghita

Respuesta

2

DarkDust - Boost soporta paralelismo a nivel de hilo, mientras que PPL y TBB proporcionan una abstracción basada en tareas en la parte superior de un grupo de subprocesos y toman algoritmos y contenedores de la biblioteca estándar de enfoque. Esto elimina muchos de los dolores de cabeza asociados con la programación y la administración de recursos. Algunas características de paralelismo basadas en tareas ahora también están comenzando a admitirse en C++ 11, notablemente std :: future y otras características relacionadas con async.

Ghita - El PPL no utiliza extensiones administradas, es un código puramente nativo pero no está basado en todas las plantillas. La implementación de Windows se ejecuta en la parte superior del tiempo de ejecución de Concurrency, ConcRT. Vea http://msdn.microsoft.com/en-us/library/gg663535.aspx para más detalles. La implementación de Intel proporciona una API compatible con el código fuente para un subconjunto del PPL. Ver http://threadingbuildingblocks.org/docs/help/reference/appendices/ppl_compatibility.htm para una discusión sobre la compatibilidad TBB/PPL.

Alexey - La versión Intel en Unix se ejecuta en la parte superior de su tiempo de ejecución. En Windows, el TBB 3.0 también puede ejecutarse sobre ConcRT, dependiendo de cómo lo vincule. Vea aquí, http://software.intel.com/en-us/blogs/2010/05/04/tbb-30-new-today-version-of-intel-threading-building-blocks

El libro está disponible en Amazon, etc y el contenido también está disponible en MSDN http://msdn.microsoft.com/en-us/library/gg675934.aspx

1

Parece que los patrones paralelos de Microsoft Biblioteca (PPL) ahora es verdaderamente multiplataforma!

Parece que con el reciente cambio radical en Microsoft, la última versión de su C++ REST SDK (Casablanca) ahora admiten todas las plataformas (Windows/Mac/Linux/Android e iOS).

Lo que es de interés, es que este SDK de REST también incluye una versión de la Biblioteca de patrones paralelos (PPL), sin embargo, está en el espacio de nombres de pplx (observe la x).

Así que en lugar de:

#include <ppltasks.h> 

..its ...

#include <pplx/pplxtasks.h> 

Como se puede ver en la página de Microsoft MSDN aquí: http://msdn.microsoft.com/en-us/library/jj950081.aspx que están utilizando tareas PPLX y encadenar con .then() sintaxis

ejemplo de código de arriba página:

// Creates an HTTP request and prints the length of the response stream. 
pplx::task<void> HTTPStreamingAsync() 
{ 
    http_client client(L"http://www.fourthcoffee.com"); 

    // Make the request and asynchronously process the response. 
    return client.request(methods::GET).then([](http_response response) 
    { 
     // Print the status code. 
     std::wostringstream ss; 
     ss << L"Server returned returned status code " << response.status_code() << L'.' << std::endl; 
     std::wcout << ss.str(); 

     // TODO: Perform actions here reading from the response stream. 
     auto bodyStream = response.body(); 

     // In this example, we print the length of the response to the console. 
     ss.str(std::wstring()); 
     ss << L"Content length is " << response.headers().content_length() << L" bytes." << std::endl; 
     std::wcout << ss.str(); 
    }); 

    /* Sample output: 
    Server returned returned status code 200. 
    Content length is 63803 bytes. 
    */ 
} 

también desde este año 2014 CPPCon una charla titulada "Uso de C++ para conectarse a servicios Web" muestra el uso de Casablanca y el PPLX de Eclipse que se ejecuta en Android.

Ese video está aquí: https://www.youtube.com/watch?v=WvaxcicwIss#t=1638

Por último, el RESTO SDK Casablanca se puede encontrar aquí: https://casablanca.codeplex.com/

+1

Esta respuesta es engañosa, PPL no es * realmente * multiplataforma ya que pplx implementa solo la parte de personas necesitadas para Casablanca, solo las tareas. No hay algoritmos o contenedores paralelos. – Rado

Cuestiones relacionadas