O problema é que preciso que sejam múltiplos processos e não múltiplas threads.
É para rodar em um cluster com vários nós, cada nó com dois processadores. Se forem múltiplos processos o programa que gerencia o cluster pode alocar cada processo em um processador, mas múltiplas threads não (acho que elas ainda seria alocadas entre dois cores de um processador dual core, mas não mais que isso).
Atualmente simplesmente quebramos o programa em vários e submetemos cada um individualmente para o cluster, mas se pudesse ser um programa só que criasse múltiplos processos deixaria as coisas mais organizadas e facilitaria reunir todos os dados depois reduzindo o trabalho.
A minha idéia, se não fosse complicado demais, seria criar um processo para cada repetição do loop externo (que são independentes) e possivelmente um processo central com o qual cada um dos outros se comunicaria para passar os dados depois de terminarem. Como os loops são independentes achei que seria o caso mais simples de um "programa com múltiplos processos" e isso pudesse ser feito sem grandes complicações.
Mas pelo que encontrei a coisa não é tão simples assim. Parece que é necessário usar até pragmas do compilador para fazer isso e me pergunto se isso traria mais prejuízo (chance de bugs esquisitos) do que benefícios. É, múltiplas threads é mais fácil mesmo (menos complicado).
Se alguém já tiver mexido com isso eu gostaria de saber se vale a pena e qual a maneira "mais padrão" de se fazer isso (já que no meu entendimento pragmas são específicos de cada compilador).