Nosso grupo de trabalho produz um aplicativo de desktop que simula o desempenho energético da construção. É um aplicativo .NET e, quando o usuário está executando muitas simulações, pode consumir bastante tempo. As simulações são totalmente paralelizáveis, e temos alguns recursos de computação HPC muito significativos no "escritório".
Uma idéia que tivemos é permitir que os usuários descarregem simulações que sabemos que serão muito demoradas (enquanto cada simulação individual executa cerca de 30 a 120 segundos, a execução de um grande número de simulações pode levar vários dias). Alguém já fez isso antes? Em caso afirmativo, você usou alguma biblioteca para facilitar o trabalho? Valeu a pena o esforço?
editado para adicionar:
Tarefas individuais para descarregar a simulação seriam
- empacotar um arquivo (cerca de 5 Mb),
- enviá-lo para nossos servidores,
- decompondo a embalagem em simulações individuais (cada uma leva cerca de 30 a 120 segundos e é totalmente paralelizável), o número de simulações é uma função do número de opções selecionadas pelo usuário (isolamento, orientação do edifício etc.) e o pior caso de seleção todas as opções possíveis resultariam em simulações de 1E50. A execução de simulações de 100 a ~ 1E5 não é desconhecida, mas a maioria dos usuários executa menos de 10.
- remontando as simulações concluídas e baixando o arquivo agora muito maior.
Não temos certeza de qual interface usar, pois nosso grupo é novo e, com cortes no orçamento, pode ser concluído a tempo, mas precisa ser fácil para as próximas pessoas (se houver) manterem.
Este aplicativo já usa o .NET 4 e pode ser expandido para usar todos os núcleos que o usuário possui (nossas máquinas de desenvolvimento têm 8 núcleos).
fonte
Respostas:
Você pode considerar usar o Condor: http://research.cs.wisc.edu/condor/ . Pode ser um exagero, dependendo de que tipo de recursos de HPC você está falando e de quanto eles mudarão. No entanto, é bastante fácil começar e ele cuida do lançamento de trabalhos independentes, tolerância a falhas, equilíbrio de carga, etc.
Seria mais útil se você fosse mais específico sobre as tarefas individuais (quanto tempo, quão assíncrono) e qual interface você usaria para interação (processo de inicialização, biblioteca, etc.)
Matt
fonte
Se você está no mundo .NET, já olhou para o suporte de multiencadeamento no .NET 4; e os recursos assíncronos que estão sendo adicionados ao .NET 4.5?
O multithreading não ajuda a transferir o processamento para outras máquinas, mas permite que você utilize melhor os PCs com vários núcleos que estamos usando atualmente. 4.0 possui alguns recursos interessantes a esse respeito.
Atualmente, 4.5 está em pré-visualização de tecnologia - portanto, vale a pena ver se isso ajudará. Havia um artigo no MSDN apresentando os novos recursos assíncronos nos últimos meses (outubro ou novembro e, definitivamente, não antes de setembro). Parecia que esses recursos estavam sendo implementados como uma maneira de paralelizar tradicionalmente menos códigos paralelos, mas no IIRC eles também incluíam algum suporte para vários servidores.
fonte
A resposta depende do que você possui como back-end HPC. A pergunta se refere aos recursos existentes disponíveis para usuários do NREL. Existem clusters Linux e um cluster Windows com base no Windows Compute Cluster Server.
Para usar o cluster linux, o autor precisa garantir que a rotina de simulação seja executada no Mono (a implementação da plataforma .NET para linux) e garantir que o Mono esteja instalado nos nós.
A próxima pergunta é se os usuários têm contas nos clusters de computação e podem obter os dados nos nós. O caso mais simples é com um único sistema de arquivos acessível a partir de PCs locais e dos nós.
Não tenho certeza se esse sistema de arquivos está disponível para usuários do NREL; portanto, algumas cópias estarão envolvidas. Isso já torna as coisas complicadas.
Em seguida, o aplicativo deve ser capaz de compilar um script de descrição do trabalho, enviá-lo ao respectivo cluster e consultar o sistema de enfileiramento quanto ao estado das simulações até que o trabalho saia da fila.
Finalmente, o aplicativo deve conseguir recuperar os resultados.
Tudo isso é possível, embora não trivial, e seria altamente específico para a configuração deste laboratório em particular.
Os aplicativos comerciais da Ansys ou MSC permitem que o usuário salve uma descrição do trabalho de simulação que pode ser executada posteriormente no modo de lote em um cluster remoto.
Uma solução mais geral seria usar a infraestrutura da grade, se disponível.
Em seguida, pode-se optar pela arquitetura orientada a serviços, na qual um serviço da Web é configurado em algum lugar para aguardar solicitações de simulação e enviá-las para o cluster, dissociando o aplicativo do conhecimento das especificidades dos recursos disponíveis.
Isso é amplamente usado, por exemplo, em biologia computacional, onde ferramentas são usadas para compor fluxos de trabalho de simulação que consistem inteiramente em solicitações de processamento de serviços da Web.
Apenas para observar que o descarregamento de cálculos para recursos de computação remota é comumente usado em aplicativos como o reconhecimento de voz do Google para Android.
fonte