SubmissaoTradicional » History » Version 5

Gabriel Winckler, 10 Jun 2015 14:48

1 1 Gabriel Winckler
h1. Submissão Tradicional
2 1 Gabriel Winckler
3 1 Gabriel Winckler
*Atualmente recomendamos a submissão via GO para todos os usuários, inclusive os que compilam a própria apliação: [[SubmissaoSimplificada]]*
4 1 Gabriel Winckler
5 1 Gabriel Winckler
{{>toc}}
6 1 Gabriel Winckler
7 1 Gabriel Winckler
h2. Compilar
8 1 Gabriel Winckler
9 1 Gabriel Winckler
Você pode compilar seu códigos nessa máquina. Estão disponíveis:
10 1 Gabriel Winckler
11 1 Gabriel Winckler
* GCC (C, C++ e Fortran)
12 1 Gabriel Winckler
* Intel (C, C++ e Fortran)
13 1 Gabriel Winckler
14 1 Gabriel Winckler
Também está disponível o Intel MPI para compilações de programas paralelos utilizando MPI. Para isso utilize mpicc e suas variantes (mpigcc, mpiicc, mpif90...)
15 1 Gabriel Winckler
16 1 Gabriel Winckler
*ATENÇÃO: NÃO EXECUTE AS SIMULAÇÕES NESSA MÁQUINA. NÃO RODE PROGRAMAS MPI NESSA MÁQUINA. APENAS COMPILE.*
17 1 Gabriel Winckler
18 1 Gabriel Winckler
Sempre que possível use compilação estática ou ainda use a ferramenta condor_compile. 
19 1 Gabriel Winckler
20 1 Gabriel Winckler
h2. Submeter para o grid
21 1 Gabriel Winckler
22 1 Gabriel Winckler
Para submeter jobs para o grid será necessário criar um arquivo de submissão informando qual programa executar, quais arquivos copiar na entrada e saída...
23 1 Gabriel Winckler
24 1 Gabriel Winckler
Abaixo estão dois exemplos, um para programas simples e outro para programas MPI.
25 1 Gabriel Winckler
26 1 Gabriel Winckler
Em qualquer caso é necessário autenticar o seu certificado antes de iniciar a submissão:
27 1 Gabriel Winckler
28 1 Gabriel Winckler
<pre>
29 1 Gabriel Winckler
myproxy-logon
30 1 Gabriel Winckler
</pre>
31 1 Gabriel Winckler
32 1 Gabriel Winckler
a chave valid permite especificar a duração da proxy, é importante definir esta variável 
33 1 Gabriel Winckler
por um tempo *superior a duas vezes a duração dos processos submetidos*.
34 1 Gabriel Winckler
35 1 Gabriel Winckler
O padrão desse comando (sem a chave -t) é 12 horas. Para requisitar 72 horas:
36 1 Gabriel Winckler
37 1 Gabriel Winckler
<pre>
38 1 Gabriel Winckler
myproxy-logon -t 72
39 1 Gabriel Winckler
</pre>
40 1 Gabriel Winckler
41 1 Gabriel Winckler
Para submeter:
42 1 Gabriel Winckler
<pre>
43 1 Gabriel Winckler
condor_submit arquivo.submit
44 1 Gabriel Winckler
</pre>
45 1 Gabriel Winckler
46 1 Gabriel Winckler
47 1 Gabriel Winckler
h3. Exemplo de arquivo de submissão para programas simples:
48 1 Gabriel Winckler
49 1 Gabriel Winckler
<pre>
50 1 Gabriel Winckler
universe=grid
51 1 Gabriel Winckler
grid_resource=gt2 ce.grid.unesp.br/jobmanager-pbs
52 1 Gabriel Winckler
53 1 Gabriel Winckler
54 1 Gabriel Winckler
executable = executavel
55 1 Gabriel Winckler
arguments = argumentos 
56 1 Gabriel Winckler
57 1 Gabriel Winckler
transfer_input_files = arquivo_de_entrada
58 1 Gabriel Winckler
transfer_output_files = arquivo_de_saida
59 1 Gabriel Winckler
WhenToTransferOutput = ON_EXIT
60 1 Gabriel Winckler
61 1 Gabriel Winckler
62 1 Gabriel Winckler
log        = test.log
63 1 Gabriel Winckler
output     = test.out
64 1 Gabriel Winckler
error      = test.error
65 1 Gabriel Winckler
66 1 Gabriel Winckler
queue
67 1 Gabriel Winckler
68 1 Gabriel Winckler
</pre>
69 1 Gabriel Winckler
70 1 Gabriel Winckler
h3. Exemplo de arquivo de submissão para programas MPI:
71 1 Gabriel Winckler
72 1 Gabriel Winckler
<pre>
73 1 Gabriel Winckler
universe=grid
74 1 Gabriel Winckler
grid_resource=gt2 ce.grid.unesp.br/jobmanager-pbs
75 1 Gabriel Winckler
76 1 Gabriel Winckler
# 16 é o número de processos MPI
77 1 Gabriel Winckler
globusrsl = (host_xcount=16)(jobType=mpi)
78 1 Gabriel Winckler
79 1 Gabriel Winckler
executable = programa_mpi
80 1 Gabriel Winckler
arguments = argumentos
81 1 Gabriel Winckler
82 1 Gabriel Winckler
log        = test.log
83 1 Gabriel Winckler
output     = test.out
84 1 Gabriel Winckler
error      = test.error
85 1 Gabriel Winckler
86 1 Gabriel Winckler
87 1 Gabriel Winckler
transfer_input_files = arquivo_de_entrada
88 1 Gabriel Winckler
transfer_output_files = arquivo_de_saida
89 1 Gabriel Winckler
90 1 Gabriel Winckler
WhenToTransferOutput = ON_EXIT
91 1 Gabriel Winckler
92 1 Gabriel Winckler
queue
93 1 Gabriel Winckler
94 1 Gabriel Winckler
</pre>
95 1 Gabriel Winckler
96 1 Gabriel Winckler
h2. Verificar o status
97 1 Gabriel Winckler
98 1 Gabriel Winckler
Para verificar a fila de processos:
99 1 Gabriel Winckler
100 1 Gabriel Winckler
<pre>
101 1 Gabriel Winckler
condor_q
102 1 Gabriel Winckler
</pre>
103 1 Gabriel Winckler
104 1 Gabriel Winckler
Ou para listar apenas os seus processo:
105 1 Gabriel Winckler
106 1 Gabriel Winckler
<pre>
107 1 Gabriel Winckler
condor_q username
108 1 Gabriel Winckler
</pre>
109 1 Gabriel Winckler
110 1 Gabriel Winckler
111 1 Gabriel Winckler
h2. Cancelar job
112 1 Gabriel Winckler
113 1 Gabriel Winckler
Para remover um job, é necessário saber o seu número (verifique no item anterior):
114 1 Gabriel Winckler
115 1 Gabriel Winckler
<pre>
116 1 Gabriel Winckler
condor_rm numero_do_processo
117 1 Gabriel Winckler
</pre>
118 1 Gabriel Winckler
119 1 Gabriel Winckler
Para remover todos os seus processos:
120 1 Gabriel Winckler
121 1 Gabriel Winckler
<pre>
122 1 Gabriel Winckler
condor_rm username
123 1 Gabriel Winckler
</pre>
124 1 Gabriel Winckler
125 1 Gabriel Winckler
h1. Parâmetros para a submissão
126 1 Gabriel Winckler
127 1 Gabriel Winckler
Aqui estão descritos os parâmetros que devem ser especificados no arquivo de submissão dos jobs.
128 1 Gabriel Winckler
129 1 Gabriel Winckler
h2. Como utilizar
130 1 Gabriel Winckler
131 1 Gabriel Winckler
Adicionar o parâmetro "globusrsl" no arquivo de submissão.
132 1 Gabriel Winckler
133 1 Gabriel Winckler
Exemplo:
134 1 Gabriel Winckler
<pre>
135 1 Gabriel Winckler
globusrsl = (queue=long)
136 1 Gabriel Winckler
</pre>
137 1 Gabriel Winckler
138 1 Gabriel Winckler
Exemplo utilizando MPI com multiplas opções:
139 1 Gabriel Winckler
<pre>
140 1 Gabriel Winckler
globusrsl = (host_xcount=20)(jobType=mpi)(queue=long)
141 1 Gabriel Winckler
</pre>
142 1 Gabriel Winckler
143 1 Gabriel Winckler
h2. Opções
144 1 Gabriel Winckler
145 1 Gabriel Winckler
h3. Tempo de execução
146 1 Gabriel Winckler
147 1 Gabriel Winckler
A opção *queue* limita o tempo máximo de execução de um processo.
148 1 Gabriel Winckler
149 1 Gabriel Winckler
Caso não seja especificado, será adotado o tempo padrão (24 horas).
150 1 Gabriel Winckler
151 1 Gabriel Winckler
Escolhendo a categoria de menor duração garante um início mais rápido dos jobs.
152 1 Gabriel Winckler
153 5 Gabriel Winckler
* *short*: execução limitada a 24 horas
154 4 Gabriel Winckler
* *long*: execução limitada a 30 dias
155 5 Gabriel Winckler
* *medium*: execução limitada a 7 dias
156 1 Gabriel Winckler
157 1 Gabriel Winckler
<pre>
158 1 Gabriel Winckler
globusrsl = (queue=long)
159 1 Gabriel Winckler
</pre>
160 1 Gabriel Winckler
161 1 Gabriel Winckler
h3. Programas multi-thread (SMP)
162 1 Gabriel Winckler
163 1 Gabriel Winckler
Essa opção requisita mais de um core em um mesmo servidor.
164 1 Gabriel Winckler
165 1 Gabriel Winckler
Ideal para programas paralelizados com memória compartilhada (SMP).
166 1 Gabriel Winckler
167 1 Gabriel Winckler
<pre>
168 1 Gabriel Winckler
globusrsl = (xcount=4)(jobType=single)
169 1 Gabriel Winckler
</pre>
170 1 Gabriel Winckler
171 1 Gabriel Winckler
h3. MPI
172 1 Gabriel Winckler
173 1 Gabriel Winckler
Permite a execução de programas paralelos que sejam MPI.
174 1 Gabriel Winckler
175 1 Gabriel Winckler
<pre>
176 1 Gabriel Winckler
globusrsl = (host_xcount=20)(jobType=mpi)
177 1 Gabriel Winckler
</pre>
178 1 Gabriel Winckler
179 1 Gabriel Winckler
h3. Paralelo, não MPI
180 1 Gabriel Winckler
181 1 Gabriel Winckler
Essa opção só deve ser utilizada por usuários avançados. Ela permite a execução de programas paralelos que não sejam MPI.
182 1 Gabriel Winckler
183 1 Gabriel Winckler
Cabe ao usuário fornecer um script para configurar o ambiente paralelo.
184 1 Gabriel Winckler
185 1 Gabriel Winckler
<pre>
186 1 Gabriel Winckler
globusrsl = (host_xcount=30)(jobType=single)
187 1 Gabriel Winckler
</pre>
188 1 Gabriel Winckler
189 1 Gabriel Winckler
h1. Ajustes de performance
190 1 Gabriel Winckler
191 1 Gabriel Winckler
h2. Escrita de arquivos no /tmp
192 1 Gabriel Winckler
193 1 Gabriel Winckler
Por padrão, os jobs enviados são executados de um diretório compartilhado por NFS. Esse diretório tem uma performance menor que o disco local dos nós (/tmp).
194 1 Gabriel Winckler
Configure o seu programa para escrever os arquivos temporários (scratch) no /tmp. Essa medida simples pode melhorar a execução do seu programa em algumas vezes, dependendo do padrão de escrita.
195 1 Gabriel Winckler
196 1 Gabriel Winckler
Observe o exemplo abaixo, em que o mesmo job foi disparado duas vezes e medidos os respectivos tempos de execução. Na primeira execução o job foi configurado para escrever no diretório /tmp, enquanto que na segunda o job não foi modificado, sendo disparado através das configurações padrões.
197 1 Gabriel Winckler
198 1 Gabriel Winckler
<pre>
199 1 Gabriel Winckler
carlosm@treinamento01:~/jobs/produtor_consumidor/pthread$ cat error.tmp 
200 1 Gabriel Winckler
201 1 Gabriel Winckler
real	0m38.973s
202 1 Gabriel Winckler
user	0m22.610s
203 1 Gabriel Winckler
sys	2m1.604s
204 1 Gabriel Winckler
</pre>
205 1 Gabriel Winckler
206 1 Gabriel Winckler
<pre>
207 1 Gabriel Winckler
carlosm@treinamento01:~/jobs/produtor_consumidor/pthread$ cat error.sem_tmp 
208 1 Gabriel Winckler
209 1 Gabriel Winckler
real	1m8.418s
210 1 Gabriel Winckler
user	0m22.579s
211 1 Gabriel Winckler
sys	2m21.039s
212 1 Gabriel Winckler
</pre>
213 1 Gabriel Winckler
214 1 Gabriel Winckler
Repare que o ganho, em tempo de execução, do job configurado para escrever no diretório /tmp, sobre o job com as configurações padrão, foi de aproximadamente 50%.
215 1 Gabriel Winckler
216 1 Gabriel Winckler
Caso o seu programa não aceite como parâmetro um diretório de execução temporário, pode-se utilizar um script que mova os dados para o local correto e traga de volta.
217 1 Gabriel Winckler
Segue um exemplo:
218 1 Gabriel Winckler
219 1 Gabriel Winckler
script *wrapper.sh*
220 1 Gabriel Winckler
<pre>
221 1 Gabriel Winckler
#!/bin/bash
222 1 Gabriel Winckler
223 1 Gabriel Winckler
OLD_PWD=`pwd`
224 1 Gabriel Winckler
TMP_DIR="/tmp/$USER-$$"
225 1 Gabriel Winckler
mkdir $TMP_DIR
226 1 Gabriel Winckler
cp * $TMP_DIR
227 1 Gabriel Winckler
cd $TMP_DIR
228 1 Gabriel Winckler
229 1 Gabriel Winckler
chmod +x $1
230 1 Gabriel Winckler
 
231 1 Gabriel Winckler
$*
232 1 Gabriel Winckler
233 1 Gabriel Winckler
rsync -r . $OLD_PWD/
234 1 Gabriel Winckler
cd $OLD_PWD
235 1 Gabriel Winckler
rm -rf $TMP_DIR
236 1 Gabriel Winckler
</pre>
237 1 Gabriel Winckler
238 1 Gabriel Winckler
Trecho do arquivo de submissão
239 1 Gabriel Winckler
<pre>
240 1 Gabriel Winckler
(..)
241 1 Gabriel Winckler
242 1 Gabriel Winckler
executable = wrapper.sh
243 1 Gabriel Winckler
arguments = ./programa arg1 arg2
244 1 Gabriel Winckler
245 1 Gabriel Winckler
transfer_input_files = programa, outros_arquivos_de_entrada
246 1 Gabriel Winckler
247 1 Gabriel Winckler
(...)
248 1 Gabriel Winckler
</pre>
249 1 Gabriel Winckler
250 1 Gabriel Winckler
251 1 Gabriel Winckler
Lembre de apagar qualquer arquivo temporário no fim da execução. 
252 1 Gabriel Winckler
253 1 Gabriel Winckler
h2. Submissão de múltiplos jobs
254 1 Gabriel Winckler
255 1 Gabriel Winckler
Quando submeter diversos jobs ou jobs com várias tarefas, inclua sempre no arquivo de submissão:
256 1 Gabriel Winckler
257 1 Gabriel Winckler
<pre>
258 1 Gabriel Winckler
stream_output = False
259 1 Gabriel Winckler
stream_error = False
260 1 Gabriel Winckler
</pre>
261 1 Gabriel Winckler
262 1 Gabriel Winckler
Isso evita sobrecarregar o cluster.
263 1 Gabriel Winckler
264 1 Gabriel Winckler
h1. Depuração
265 1 Gabriel Winckler
266 1 Gabriel Winckler
Antes de começar é importante ressaltar que o ambiente de grid adiciona uma camada de complexidade ao seu problema. Apenas submeta programas que tenham sido testados em um ambiente padrão de desenvolvimento. 
267 1 Gabriel Winckler
268 1 Gabriel Winckler
A ferramenta Condor:http://www.cs.wisc.edu/condor/ é uma ferramenta poderosa que  usa de forma oportunística recursos computacionais, da mesma forma que a ave sobrevoa os altiplanos andinos a procura de algum animal morto para se alimentar. Ela é versátil e pode ser utilizada em ambientes, heterogêneos, e sujeitos a falhas. Mas uma vez disparado um job, o usuário não tem controle sobre ele com exceção da possibilidade de interromper a execução. 
269 1 Gabriel Winckler
270 1 Gabriel Winckler
Para iniciar o processo de depuração descubra o número do seu job:
271 1 Gabriel Winckler
272 1 Gabriel Winckler
<pre>
273 1 Gabriel Winckler
condor_q username
274 1 Gabriel Winckler
</pre>
275 1 Gabriel Winckler
276 1 Gabriel Winckler
<pre>
277 1 Gabriel Winckler
-- Submitter: access.grid.unesp.br : <200.145.46.37:59072> : access.grid.unesp.br
278 1 Gabriel Winckler
 ID      OWNER            SUBMITTED     RUN_TIME ST PRI SIZE CMD               
279 1 Gabriel Winckler
14762.0   lemke           4/9  13:51   0+00:25:11 R  0   2.4  mdrun_mpi -v -s fu
280 1 Gabriel Winckler
14764.3   lemke           4/9  13:57   0+00:00:00 I  0   0.0  geraforcas -l 30 -
281 1 Gabriel Winckler
282 1 Gabriel Winckler
2 jobs; 1 idle, 1 running, 0 held
283 1 Gabriel Winckler
284 1 Gabriel Winckler
</pre>
285 1 Gabriel Winckler
O número do job é o ID de seu job. Nesse caso o usuário lemke possui dois jobs 14762.0 e 14764.3. 
286 1 Gabriel Winckler
287 1 Gabriel Winckler
Observe o status (ST) de seu job:
288 1 Gabriel Winckler
289 1 Gabriel Winckler
* R significa que o seu job está em execução (RUNNING)
290 1 Gabriel Winckler
* I significa que o seu job está Idle (em espera)
291 1 Gabriel Winckler
* H significa que seu job não foi executado até o final (HALTED)
292 1 Gabriel Winckler
293 1 Gabriel Winckler
294 1 Gabriel Winckler
Outra possibilidade é usar a chave -globus
295 1 Gabriel Winckler
296 1 Gabriel Winckler
<pre>
297 1 Gabriel Winckler
298 1 Gabriel Winckler
condor_q -globus lemke
299 1 Gabriel Winckler
</pre>
300 1 Gabriel Winckler
301 1 Gabriel Winckler
<pre>
302 1 Gabriel Winckler
-- Submitter: access.grid.unesp.br : <200.145.46.37:59072> : access.grid.unesp.br
303 1 Gabriel Winckler
 ID      OWNER          STATUS  MANAGER  HOST                EXECUTABLE        
304 1 Gabriel Winckler
12131.0   ipgtt         STAGE_OUT condor   ce.grid.unesp.br    /opt/condor-7.2.4/
305 1 Gabriel Winckler
12145.0   ipgtt         STAGE_OUT condor   ce.grid.unesp.br    /opt/condor-7.2.4/
306 1 Gabriel Winckler
12717.0   morgon        UNKNOWN condor   ce.grid.unesp.br    /home/morgon/bin/R
307 1 Gabriel Winckler
12718.0   morgon        UNKNOWN condor   ce.grid.unesp.br    /home/morgon/bin/R
308 1 Gabriel Winckler
12720.0   morgon        UNKNOWN condor   ce.grid.unesp.br    /home/morgon/bin/R
309 1 Gabriel Winckler
13948.0   jdreis        STAGE_OUT condor   ce.grid.unesp.br    /home/jdreis/sempi
310 1 Gabriel Winckler
14486.0   trtomei       STAGE_OUT condor   ce.grid.unesp.br    /home/trtomei/CMSS
311 1 Gabriel Winckler
14772.0   fabiofima     STAGE_OUT condor   ce.grid.unesp.br    /opt/gromacs/bin/m
312 1 Gabriel Winckler
14773.0   grilo         ACTIVE condor   ce.grid.unesp.br    /home/grilo/teste/
313 1 Gabriel Winckler
14774.0   lemke         UNSUBMITTED condor   ce.grid.unesp.br    /home/lemke/surf/.
314 1 Gabriel Winckler
14774.1   lemke         PENDING condor   ce.grid.unesp.br    /home/lemke/surf/.
315 1 Gabriel Winckler
14774.2   lemke         PENDING condor   ce.grid.unesp.br    /home/lemke/surf/.
316 1 Gabriel Winckler
14774.3   lemke         PENDING condor   ce.grid.unesp.br    /home/lemke/surf/.
317 1 Gabriel Winckler
14774.4   lemke         STAGE_IN condor   ce.grid.unesp.br    /home/lemke/surf/.
318 1 Gabriel Winckler
</pre>
319 1 Gabriel Winckler
320 1 Gabriel Winckler
O comando mais importante para depurar um programa é 
321 1 Gabriel Winckler
322 1 Gabriel Winckler
<pre>
323 1 Gabriel Winckler
condor_q -l numjob
324 1 Gabriel Winckler
</pre>
325 1 Gabriel Winckler
326 1 Gabriel Winckler
Este comando indica uma série de variáveis que podem ser úteis para checar se o job submetido é adequado. Em particular verifique:
327 1 Gabriel Winckler
328 1 Gabriel Winckler
* os arquivos de entrada estão corretos?
329 1 Gabriel Winckler
* os arquivos de saída estão corretos?
330 1 Gabriel Winckler
* o executável existe?
331 1 Gabriel Winckler
* os parâmetros estão corretos?
332 1 Gabriel Winckler
333 1 Gabriel Winckler
334 1 Gabriel Winckler
Para simplificar o processo é conveniente utilizar um script para submeter um job. Isto facilita o processo de depuração. No script de submissão você pode realizar testes preliminares, compilar o programa se este for o caso, ou ainda realizar varias etapas do seu processo computacional em um único job.
335 1 Gabriel Winckler
336 1 Gabriel Winckler
<pre>
337 1 Gabriel Winckler
#!/bin/bash
338 1 Gabriel Winckler
./configura
339 1 Gabriel Winckler
echo configurou
340 1 Gabriel Winckler
condor_compile g++ -o prog prog.cc -lm 
341 1 Gabriel Winckler
echo compilou
342 1 Gabriel Winckler
./prog
343 1 Gabriel Winckler
echo rodou
344 1 Gabriel Winckler
</pre>
345 1 Gabriel Winckler
346 1 Gabriel Winckler
Neste exemplo executamos um script de configuração, compilamos nosso programa e executamos. 
347 1 Gabriel Winckler
348 1 Gabriel Winckler
O condor_compile é uma boa alternativa para compilar programas pois garante que o seu job esteja adequado ao ambiente Grid. A sintaxe é simples: anteceda o comando de compilação com o condor_compile. Além disso compilar o programa na máquina em que o programa irá rodar aumenta sua portabilidade e facilita a depuração de erros como falta de bibliotecas. 
349 1 Gabriel Winckler
350 1 Gabriel Winckler
Você pode escrever mensagens usando o comando echo, o que pode facilitar a depuração em muitos casos. 
351 1 Gabriel Winckler
352 1 Gabriel Winckler
Para ler as messagens de erro  e de saída do seu job, acesse os arquivos de erro, log e saída indicados em seu arquivo de submissão. Nos casos em que for solicitar ajuda para outros usuários ou para a equipe de suporte do NCC, inclua estes arquivos em seu e-mail.
353 1 Gabriel Winckler
354 1 Gabriel Winckler
O ambiente de grid está sujeito  a problemas que ocorrem em estações de trabalho, como quedas de energia, máquinas com problema de hardware, etc. Em alguns casos esta pode ser a explicação para o problema observado com seu job.
355 1 Gabriel Winckler
356 1 Gabriel Winckler
Além disso a complexidade e os recursos utilizados por um job ou pelo usuário, podem também ser responsáveis por problemas de execução. Uso excessivo de disco e memória podem causar problemas. Algumas considerações sobre stes limites:
357 1 Gabriel Winckler
358 1 Gabriel Winckler
* um único usuário só pode rodar simultaneamente 100 jobs, mas pode submeter um número muito maior de jobs,
359 1 Gabriel Winckler
* jobs com mais de 2 Gb de memória podem ocasionar problemas de execução e
360 1 Gabriel Winckler
* jobs mpi que usem muitos slots podem demorar para iniciar sua execução.
361 1 Gabriel Winckler
362 1 Gabriel Winckler
Uma importante diferença entre o Condor:http://www.cs.wisc.edu/condor/ e o Condor-G:http://www.cs.wisc.edu/condor/condorg/ utilizado no NCC, é que no segundo ambiente os arquivos de saída devem ser explicitados no arquivo de submissão. 
363 1 Gabriel Winckler
364 1 Gabriel Winckler
A principal saída de erro é:
365 1 Gabriel Winckler
<pre>
366 1 Gabriel Winckler
HoldReason = "Globus error 155: the job manager could not stage out a file"
367 1 Gabriel Winckler
</pre>
368 1 Gabriel Winckler
369 1 Gabriel Winckler
Ela ocorre sempre que o arquivo de saída não for gerado. Isto pode ocorrer por diversos motivos:
370 1 Gabriel Winckler
371 1 Gabriel Winckler
* seu executável não conseguiu iniciar (neste caso a execução durou muito pouco tempo)
372 1 Gabriel Winckler
* seu executável iniciou mas não concluiu (a execução custou algum) e o arquivo de saída não foi gerado
373 1 Gabriel Winckler
* o nome do arquivo de saída está errado
374 1 Gabriel Winckler
375 1 Gabriel Winckler
Um exemplo de script para testar estas possbilidades 
376 1 Gabriel Winckler
<pre>
377 1 Gabriel Winckler
#!/bin/bash
378 1 Gabriel Winckler
ls -l 
379 1 Gabriel Winckler
# testa se os arquivos foram transferidos
380 1 Gabriel Winckler
./configura
381 1 Gabriel Winckler
date
382 1 Gabriel Winckler
echo configurou
383 1 Gabriel Winckler
condor_compile g++ -o prog prog.cc -lm 
384 1 Gabriel Winckler
date
385 1 Gabriel Winckler
echo compilou
386 1 Gabriel Winckler
./prog
387 1 Gabriel Winckler
date 
388 1 Gabriel Winckler
ls -l 
389 1 Gabriel Winckler
echo rodou
390 1 Gabriel Winckler
</pre>