ManyCore » History » Version 12

Gabriel Winckler, 04 Jul 2013 18:28

1 1 Beraldo Leal
h1. ManyCore
2 1 Beraldo Leal
3 2 Beraldo Leal
h2. Acessando o XeonPhi
4 1 Beraldo Leal
5 1 Beraldo Leal
A XeonPhi está instalada na máquina (phi01.ncc.unesp.br), para acessar você deve ter uma conta na base LDAP do NCC.
6 1 Beraldo Leal
7 1 Beraldo Leal
<pre>
8 1 Beraldo Leal
$ ssh phi01.ncc.unesp.br
9 1 Beraldo Leal
</pre>
10 1 Beraldo Leal
11 4 Gabriel Winckler
Para garantir que um usuário/grupo utilize a XeonPhi por vez, nesta máquina encontra-se instalado o gerenciador de recursos, "SLURM":https://computing.llnl.gov/linux/slurm/slurm.html. Então toda vez que quiser utilizar o XeonPhi, você deve entrar na fila de espera para utilização. Utilize o comando abaixo para obter uma shell interativa:
12 1 Beraldo Leal
13 1 Beraldo Leal
<pre>
14 4 Gabriel Winckler
$ srun --pty --gres=mic bash -i
15 1 Beraldo Leal
</pre>
16 1 Beraldo Leal
17 1 Beraldo Leal
Ao sair da shell automaticamente você liberará o recurso para outros utilizarem. Sua shell será finalizada após *1 hora*, você pode alterar esse valor com o parametro walltime para o tempo máximo de utilização de 24 horas.
18 1 Beraldo Leal
19 6 Gabriel Winckler
Para executar um script não interativo, e com tempo máximo de execução de *2 horas*, execute:
20 1 Beraldo Leal
21 1 Beraldo Leal
<pre>
22 1 Beraldo Leal
$ srun --gres=mic -t 2:00:00 /home/user/script.sh
23 6 Gabriel Winckler
</pre>
24 6 Gabriel Winckler
25 8 Gabriel Winckler
Para alocar *2 placas*, use:
26 6 Gabriel Winckler
<pre>
27 7 Gabriel Winckler
$ srun --gres=mic:2 /home/user/script.sh
28 1 Beraldo Leal
</pre>
29 1 Beraldo Leal
30 1 Beraldo Leal
Para ver a fila atual, execute:
31 1 Beraldo Leal
32 1 Beraldo Leal
<pre>
33 4 Gabriel Winckler
$ squeue
34 1 Beraldo Leal
</pre>
35 1 Beraldo Leal
36 1 Beraldo Leal
Desta forma você estará na máquina que possui o XeonPhi instalado, para fazer ssh para a própria XeonPhi, execute:
37 1 Beraldo Leal
38 1 Beraldo Leal
<pre>
39 4 Gabriel Winckler
$ ssh root@$(get_mics -1)
40 1 Beraldo Leal
</pre>
41 3 Beraldo Leal
42 3 Beraldo Leal
h2. Compilação
43 3 Beraldo Leal
44 3 Beraldo Leal
No diretório _/opt/ncc_demo/_ existe o arquivo _hello-openmp.c_. Copie para o seu diretório.
45 3 Beraldo Leal
46 3 Beraldo Leal
h3. Compilação OpenMP
47 3 Beraldo Leal
48 3 Beraldo Leal
<pre>
49 3 Beraldo Leal
# compilacao
50 3 Beraldo Leal
icc -mmic -openmp hello-openmp.c -o hello-openmp
51 3 Beraldo Leal
52 3 Beraldo Leal
# copie o ambiente para o xeon phi
53 1 Beraldo Leal
/opt/ncc-demo/copy-openmp-env.sh
54 3 Beraldo Leal
</pre>
55 3 Beraldo Leal
56 3 Beraldo Leal
h3. Execução interativa
57 3 Beraldo Leal
58 1 Beraldo Leal
<pre>
59 3 Beraldo Leal
# aloque o recurso
60 4 Gabriel Winckler
srun --pty --gres=mic bash -i
61 3 Beraldo Leal
62 9 Beraldo Leal
MIC=$(get_mics -1)
63 9 Beraldo Leal
64 1 Beraldo Leal
# copie o seu executável
65 9 Beraldo Leal
scp hello-openmp root@$MIC:
66 1 Beraldo Leal
67 3 Beraldo Leal
# acesse o xeon phi
68 9 Beraldo Leal
ssh root@$MIC
69 3 Beraldo Leal
70 1 Beraldo Leal
# execute sua aplicação
71 1 Beraldo Leal
./hello-openmp
72 3 Beraldo Leal
73 1 Beraldo Leal
# termine a sessão (2x)
74 9 Beraldo Leal
exit # ssh da MIC
75 9 Beraldo Leal
exit # srun iterativo
76 1 Beraldo Leal
</pre>
77 1 Beraldo Leal
78 1 Beraldo Leal
h3. Execução em fila
79 1 Beraldo Leal
80 9 Beraldo Leal
Alternativamente, para enviar o processo como job batch, prepare um arquivo (hello-openmp.sh):
81 3 Beraldo Leal
<pre>
82 3 Beraldo Leal
#!/bin/bash
83 1 Beraldo Leal
MIC=$(get_mics -1)
84 1 Beraldo Leal
scp hello-openmp root@$MIC:
85 4 Gabriel Winckler
ssh root@$MIC /root/hello-openmp
86 4 Gabriel Winckler
</pre>
87 4 Gabriel Winckler
88 4 Gabriel Winckler
e envie para a fila
89 4 Gabriel Winckler
<pre>
90 9 Beraldo Leal
chmod +x hello-openmp.sh
91 9 Beraldo Leal
srun --gres=mic hello-openmp.sh
92 4 Gabriel Winckler
</pre>
93 10 Gabriel Winckler
94 10 Gabriel Winckler
h2. MPI
95 10 Gabriel Winckler
96 10 Gabriel Winckler
Exemplo de compilação e execução MPI:
97 10 Gabriel Winckler
98 10 Gabriel Winckler
<pre>
99 10 Gabriel Winckler
. /opt/intel/impi/4.1.0/bin64/mpivars.sh
100 10 Gabriel Winckler
101 10 Gabriel Winckler
cp /opt/ncc-demo/hello-mpi.c
102 10 Gabriel Winckler
mpiicc -mmic hello-mpi.c -o hello-mpi
103 10 Gabriel Winckler
104 10 Gabriel Winckler
/opt/ncc-demo/copy-impi-env.sh
105 10 Gabriel Winckler
106 10 Gabriel Winckler
srun --pty --gres=mic bash -i
107 10 Gabriel Winckler
MIC=$(get_mics -1)
108 10 Gabriel Winckler
scp hello-mpi root@$MIC:
109 10 Gabriel Winckler
ssh root@$MIC
110 10 Gabriel Winckler
mpiexec -n 240 ./hello-openmp
111 10 Gabriel Winckler
exit # ssh da MIC
112 10 Gabriel Winckler
exit # srun iterativo
113 10 Gabriel Winckler
</pre>
114 11 Gabriel Winckler
115 12 Gabriel Winckler
h3. Modo hybrid
116 12 Gabriel Winckler
117 12 Gabriel Winckler
Esse tutorial apresenta a utilização de uma forma mais sofisticada, usando o modo hybrid, com o processador e mais de uma mic rodando a mesma simulação.
118 12 Gabriel Winckler
119 12 Gabriel Winckler
http://software.intel.com/en-us/articles/using-the-intel-mpi-library-on-intel-xeon-phi-coprocessor-systems
120 12 Gabriel Winckler
121 12 Gabriel Winckler
Nesse caso é muito importante observar a assimetria de processamento e evitar barreiras de sincronização.
122 12 Gabriel Winckler
123 11 Gabriel Winckler
124 11 Gabriel Winckler
h3. HPL
125 11 Gabriel Winckler
126 11 Gabriel Winckler
Para a realização de benchmark foi usado o binário fornecido no pacote da Intel, disponível em
127 11 Gabriel Winckler
<pre>
128 11 Gabriel Winckler
/opt/intel/composerxe/mkl/benchmarks/mp_linpack/bin_intel/mic/
129 11 Gabriel Winckler
</pre>