Biblioteca de programação paralela? (+ alguns recursos)

8

Nota : esta é uma publicação, pois a questão foi considerada inadequada para o fórum Stack Overflow e deveria ter sido postada aqui. O tópico original está .

Eu gostaria de falar sobre multithreading, paralelismo e as bibliotecas disponíveis hoje para realizar esse trabalho. Estou me perguntando especialmente se já existe uma biblioteca fácil de usar para atingir esse conceito (dado abaixo), ou se precisaria ser escrita e quão difícil seria.

Os propósitos da biblioteca que estou procurando:

  • acessível para a maioria dos desenvolvedores, não apenas para engenheiros ou pessoas altamente graduadas (isso deve significar que os desenvolvedores QUEREM usá-lo, sem medo)
  • disponível para desenvolvedores de C ++
  • portátil (comece com Windows, Mac OS X e Linux e depois estenda para dispositivos móveis)
  • leve
  • fácil de usar (relacionado à acessibilidade)

Os recursos mais importantes que estou procurando:

  • paralelismo de tarefas
  • cancelamento de tarefas (de maneira branda e abrupta)
  • dependências de tarefas

As bibliotecas relacionadas existentes :

  • Blocos de construção de threads : muito complicado de usar e licença bastante restritiva (GPL / comercial), é a única biblioteca que encontrei e inclui todos os recursos que estou procurando
  • Despacho Grand Central : atualmente não é portátil, não é muito complicado, sem cancelamento de tarefas (uma vez iniciado), sem dependências de tarefas, sem suporte automático a dependências (apenas manual)
  • PFunc : Somente Unix, ainda um pouco complicado, sem dependência de tarefas, sem cancelamento de tarefas
  • Biblioteca Paralela de Tarefas da Microsoft : plataforma MS e .NET apenas, sem cancelamento total, dependências restritas e manuais de tarefas (uma tarefa não pode ativar mais de uma outra tarefa)
  • OpenCL : atualmente não está disponível em todas as plataformas, não muito mais do que uma biblioteca de tarefas paralelas da GPU (não tão alto quanto eu gostaria)
  • OpenMP : amplamente suportado, exceto versões gratuitas do Visual Studio, sem cancelamento de tarefas nem dependências automáticas de tarefas

Então, quais são seus pensamentos sobre tudo isso? Por que você acha que existem tão poucas bibliotecas correspondentes a essas necessidades? Ou eu perdi uma ótima biblioteca? E você acha que isso significaria muito trabalho para conseguir um? Ou não é interessante o suficiente? Observe que as carências que escrevi são as que descobri com algumas pesquisas. Não sou especialista em nenhuma dessas bibliotecas.

O objetivo final desta biblioteca, mesmo que seja um sonho, seria programar de maneira paralela tão facilmente quanto você costuma fazer com programação sequencial.

Ceylo

Ceylo
fonte
Este não é um fórum.
DeadMG
embora não seja pertinente a você pergunta - você olhou Erlang
treecoder
@DeadMG - curioso, qual é a diferença entre este e um fórum?
Zeke Hansell
A diferença é que isso é apenas perguntas e respostas. Os fóruns são para discussão. Este local não é para discussão.
DeadMG
@DeadMG - Acho que isso responde à minha pergunta. E acho que, ao dizer isso, estou apenas informando que você respondeu minha pergunta. Eu não gostaria de ser acusado de ter uma discussão em um site de perguntas e respostas. ;-)
Zeke Hansell

Respostas:

6

O TBB é praticamente tudo o que se aproxima. boost::threadé um nível muito baixo. Você está procurando o lugar errado na TPL, a propósito - a Microsoft envia uma biblioteca separada chamada PPL para código nativo. Obviamente, ele suporta apenas o Windows.

No entanto, se você achar que o TBB é complicado de usar, eu questionaria se os desenvolvedores em que você está pensando são realmente capazes de criar aplicativos paralelos. O TBB tem uma das interfaces mais amigáveis, com coisas simples como parallel_for_each. Se você não consegue lidar com algumas lambdas, acho difícil ver como você lida com a simultaneidade.

DeadMG
fonte
Ok, eu olhei mais de perto o TBB e, de fato, não parece tão complicado de usar. Fiquei especialmente intrigado com o cancelamento e a dependência de tarefas, mas a primeira pode ser alcançada, mas é possível cancelar o grupo de tarefas e a segunda, criando um gráfico de dependência. Obrigado. A licença da TBB ainda é um problema, mas suponho que, quando se precisa dessa qualidade de paralelização, a compra de uma licença comercial é aceitável. Os únicos desenvolvedores que restam são aqueles que desenvolvem software de código aberto E utilizável comercialmente.
Ceylo
Tenho que admitir, a licença pode ser uma dor. Como estudante, recebo o Visual Studio gratuitamente, então nunca precisei fazer compras.
DeadMG
O que você quer dizer? Você usa o TPL ou o TBB é enviado com sua edição do Visual Studio?
Ceylo
@ Celo: Como eu disse na minha resposta, a Microsoft envia uma biblioteca chamada PPL para código nativo. É muito semelhante ao TBB, mas não é idêntico, muito bom, mas não atende aos seus requisitos de portabilidade.
DeadMG