MPI – Linux MPI – Linux
Alternativas Práticas Alternativas Práticas
Downloads Downloads
Portable Ubuntu Portable Ubuntu
http://sourceforge.net/projects/portableubuntu/http://sourceforge.net/projects/portableubuntu/
files/portableubuntu/UNO/Portable_Ubuntu.ex files/portableubuntu/UNO/Portable_Ubuntu.ex
e/download e/download
WubiWubi
http://www.ubuntu.com/GetUbuntu/downloadhttp://www.ubuntu.com/GetUbuntu/download
Linux pen-drive Linux pen-drive
http://www.pendrivelinux.com/http://www.pendrivelinux.com/
Portable Ubuntu Portable Ubuntu
Kernel do Linux modificado para usar o Kernel do Linux modificado para usar o
Windows como dispositivos de hardware!
Windows como dispositivos de hardware!
O núcleo roda como um processo do Windows, O núcleo roda como um processo do Windows,
outros programas auxiliares necessários;
outros programas auxiliares necessários;
Tudo automático, não necessita instalação;
Tudo automático, não necessita instalação;
Troca de dados muito fácil com windows, Troca de dados muito fácil com windows,
acessa o hardware (suportado) acessa o hardware (suportado)
automaticamente;
automaticamente;
Exemplo ->
Exemplo ->
Wubi Wubi
Maneira relativamente simples de instalar Maneira relativamente simples de instalar
e executar o Linux a partir do windows;
e executar o Linux a partir do windows;
Alternativa normal de instalação do Alternativa normal de instalação do
Ubuntu, basta inserir o CD no drive (e Ubuntu, basta inserir o CD no drive (e
“clicar” em wubi.exe!)
“clicar” em wubi.exe!)
Não roda simultaneamente com windows;
Não roda simultaneamente com windows;
Suporte a hardware depende de sorte Suporte a hardware depende de sorte
Exemplo ->
Exemplo ->
Pendrive linux Pendrive linux
Linux normal, instalado no pendrive;
Linux normal, instalado no pendrive;
Não altera absolutamente nada no Não altera absolutamente nada no
computador original!
computador original!
Suporte a hardware depende de sorte Suporte a hardware depende de sorte
http://www.pendrivelinux.com/downloads/u90http://www.pendrivelinux.com/downloads/u90 4/U904p.exe
4/U904p.exe
http://www.pendrivelinux.com/downloads/casphttp://www.pendrivelinux.com/downloads/casp er-rw/4GB-casper-rw.zip
er-rw/4GB-casper-rw.zip
Exemplo ->
Exemplo ->
Observações Observações
Outras opções possíveis:
Outras opções possíveis:
MPI Windows nativo;MPI Windows nativo;
Cygwin?;Cygwin?;
Máquinas virtuais:Máquinas virtuais:
VMWare;
VMWare;
VirtualBox;
VirtualBox;
etc.;
etc.;
PU – Aumentar Disco do Sistema!
PU – Aumentar Disco do Sistema!
NoNo WindowsWindows::
Criar arquivo vazio:Criar arquivo vazio:
fsutil file createnew more_space.img 2147483648 fsutil file createnew more_space.img 2147483648
Concatenar com arquivo atual:Concatenar com arquivo atual:
copy /b rootfs.img+more_space.img rootfs_.img copy /b rootfs.img+more_space.img rootfs_.img
Renomear:Renomear:
ren rootfs.img rootfs_orig.img ren rootfs.img rootfs_orig.img
ren rootfs_.img rootfs.img ren rootfs_.img rootfs.img
No PU:
No PU:
sudo resize2fs –f /dev/cobd0sudo resize2fs –f /dev/cobd0
PU – Preparação do Sistema PU – Preparação do Sistema
Adicionar a lingua portuguesa (System – Adicionar a lingua portuguesa (System –
Administration – Language Support);
Administration – Language Support);
Remover aplicativos desnecessários (synaptic – Remover aplicativos desnecessários (synaptic –
Installed);
Installed);
Atualizar o sistema (synaptic – Atualizar o sistema (synaptic –
Installed[upgradable]);
Installed[upgradable]);
Instalar aplicativos necessários (synaptic – Not Instalar aplicativos necessários (synaptic – Not
Installed):
Installed):
openmpi-dev, openmpi-bin, openmpi-doc;openmpi-dev, openmpi-bin, openmpi-doc;
g++, g++-4.2;g++, g++-4.2;
etc, etc, etc;etc, etc, etc;
Uso do Linux Uso do Linux
Inúmeras fontes: on-line, livros, etc.;
Inúmeras fontes: on-line, livros, etc.;
Em particular, recomendo:
Em particular, recomendo:
http://focalinux.cipsga.org.br/http://focalinux.cipsga.org.br/
Iniciante;
Iniciante;
Intermediário;
Intermediário;
Avançado;
Avançado;
Compilação de Programa C++
Compilação de Programa C++
Criar código fonte com editor de texto;
Criar código fonte com editor de texto;
g++ -o nome_executavel nome_fonte.C g++ -o nome_executavel nome_fonte.C
No terminal:
No terminal:
g++ -o 00_first 00_first.Cg++ -o 00_first 00_first.C
./00_first./00_first
Infinitos outros detalhes que veremos (ou Infinitos outros detalhes que veremos (ou
não) mais para a frente…
não) mais para a frente…
MPI – Primeiro Programa MPI – Primeiro Programa
01_first.C 01_first.C
Inicialização e finalização do MPI;
Inicialização e finalização do MPI;
Compilação:
Compilação:
mpicxx -o 01_first 01_first.Cmpicxx -o 01_first 01_first.C
./01_first (um processo apenas!)./01_first (um processo apenas!)
Para executar 8 processos em paralelo:
Para executar 8 processos em paralelo:
mpiexec -n 8 ./01_firstmpiexec -n 8 ./01_first
mpiexec mpiexec
Executa “N” cópias de um programa em Executa “N” cópias de um programa em
paralelo;
paralelo;
Há maneiras de executar códigos Há maneiras de executar códigos
diferentes (incomun);
diferentes (incomun);
Cria variáveis do ambiente que indicam Cria variáveis do ambiente que indicam
que o processo está sendo executado em que o processo está sendo executado em
um ambiente paralelo;
um ambiente paralelo;
““Padronizado” junto com o mpi;Padronizado” junto com o mpi;
““mpirun” é uma alternativa;mpirun” é uma alternativa;
MPI_INIT() MPI_INIT()
Deve ser chamada antes de qualquer Deve ser chamada antes de qualquer
função MPI;
função MPI;
Exceto: MPI_GET_VERSION, Exceto: MPI_GET_VERSION,
MPI_INITIALIZED, MPI_FINALIZED;
MPI_INITIALIZED, MPI_FINALIZED;
Chamada por todos os processos, apenas Chamada por todos os processos, apenas
uma vez (em cada processo);
uma vez (em cada processo);
Em C e C++ é possível passar Em C e C++ é possível passar
argumentos da linha de comando;
argumentos da linha de comando;
MPI_INIT() MPI_INIT()
C:
int MPI_Init(int *argc, char ***argv) Fortran:
MPI_INIT(IERROR) INTEGER IERROR C++:
void MPI::Init(int& argc, char**& argv) void MPI::Init()
MPI_FINALIZE() MPI_FINALIZE()
Desliga o ambiente paralelo;
Desliga o ambiente paralelo;
Todas as comunicações devem ter sido Todas as comunicações devem ter sido
completadas antes da chamada desta completadas antes da chamada desta
função!
função!
Não deve ser usada para “limpeza!”
Não deve ser usada para “limpeza!”
MPI_FINALIZE() MPI_FINALIZE()
C:
int MPI_FInalize(void) Fortran:
MPI_FINALIZE(IERROR) INTEGER IERROR
C++:
void MPI::Finalize()
Detecção de Erros Detecção de Erros
C: valores de retorno da função;
C: valores de retorno da função;
Fortran: último argumento da subrotina;
Fortran: último argumento da subrotina;
C++: exception C++: exception
try { try { x x xx x x
catch (e) { catch (e) { x x xx x x
}}
Em não se fazendo nada, comportamento padrão chama Em não se fazendo nada, comportamento padrão chama
MPI_ABORT();
MPI_ABORT();
Comunicadores Comunicadores
Subconjunto dos processos que formam o Subconjunto dos processos que formam o programa paralelo (iniciado com mpiexec);
programa paralelo (iniciado com mpiexec);
0,3
1,4
8,6 9,5,
2,1,4
4,2,3 10,7 11,0
3,1
5,2
6,5
7,0
13 12
comm_row
comm_column
MPI::COMM_WORLD
Comunicadores Comunicadores
Podem ser criados tantos quantos Podem ser criados tantos quantos
necessários;
necessários;
Padrão:
Padrão:
MPI::COMM_WORLD – Todos os processos;MPI::COMM_WORLD – Todos os processos;
MPI::COMM_SELF – O próprio processo;MPI::COMM_SELF – O próprio processo;
MPI::COMM_NULL – Nenhum processo;MPI::COMM_NULL – Nenhum processo;
No C++, são objetos, com métodos, No C++, são objetos, com métodos,
herança, etc!
herança, etc!
MPI_COMM_RANK() MPI_COMM_RANK()
Processos sempre numerados de 0 a Processos sempre numerados de 0 a
size-1 em cada comunicador;
size-1 em cada comunicador;
Processo pode pertencer a mais de um Processo pode pertencer a mais de um
comunicador! Terá ranks (possivelmente) comunicador! Terá ranks (possivelmente)
diferentes em cada;
diferentes em cada;
O rank do processador é usado como O rank do processador é usado como identificador para origens e destino de identificador para origens e destino de
mensagens;
mensagens;
MPI_COMM_RANK() MPI_COMM_RANK()
C:
int MPI_Comm_rank(MPI_Comm comm, int *rank)
Fortran:
MPI_COMM_RANK(COMM, RANK, IERROR) INTEGER COMM, RANK, IERROR
C++:
int MPI::Comm::Get_rank() const
MPI_COMM_SIZE() MPI_COMM_SIZE()
Número total de processos no Número total de processos no
comunicador;
comunicador;
C:
int MPI_Comm_size(MPI_Comm comm, int
*size)
Fortran:
MPI_COMM_SIZE(COMM, SIZE, IERROR) INTEGER COMM, SIZE, IERROR
C++:
int MPI::Comm::Get_size() const