coderunner 0.13.6 → 0.13.7
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/coderunner.gemspec +4 -3
- data/lib/coderunner/system_modules/dirac.rb +35 -0
- data/lib/coderunner/system_modules/hector.rb +2 -0
- data/lib/coderunner/system_modules/moab.rb +31 -30
- metadata +74 -23
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.13.
|
1
|
+
0.13.7
|
data/coderunner.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "coderunner"
|
8
|
-
s.version = "0.13.
|
8
|
+
s.version = "0.13.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Edmund Highcock"]
|
12
|
-
s.date = "2013-08-
|
12
|
+
s.date = "2013-08-23"
|
13
13
|
s.description = "CodeRunner is a framework for the automated running and analysis of simulations. It automatically generates any necessary input files, organises the output data and analyses it. Because it is a modular system, it can easily be customised to work with any system and any simulation code. One of its greatest strengths is that it is independent of any one simulation code; thus it can easily plot and compare the data from different codes."
|
14
14
|
s.email = "edmundhighcock@sourceforge.net"
|
15
15
|
s.executables = ["coderunner"]
|
@@ -49,6 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
"lib/coderunner/remote_code_runner.rb",
|
50
50
|
"lib/coderunner/run.rb",
|
51
51
|
"lib/coderunner/system_modules/blue_joule.rb",
|
52
|
+
"lib/coderunner/system_modules/dirac.rb",
|
52
53
|
"lib/coderunner/system_modules/edison.rb",
|
53
54
|
"lib/coderunner/system_modules/franklin.rb",
|
54
55
|
"lib/coderunner/system_modules/generic_linux.rb",
|
@@ -89,7 +90,7 @@ Gem::Specification.new do |s|
|
|
89
90
|
s.require_paths = ["lib"]
|
90
91
|
s.required_ruby_version = Gem::Requirement.new(">= 1.9.1")
|
91
92
|
s.rubyforge_project = "coderunner"
|
92
|
-
s.rubygems_version = "1.8.
|
93
|
+
s.rubygems_version = "1.8.23"
|
93
94
|
s.summary = "A framework for the automated running and analysis of simulations."
|
94
95
|
|
95
96
|
if s.respond_to? :specification_version then
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class CodeRunner
|
2
|
+
module Dirac
|
3
|
+
include Moab
|
4
|
+
def mpi_prog
|
5
|
+
"mpiexec -np #{nprocstot} "
|
6
|
+
end
|
7
|
+
def gpu_name
|
8
|
+
@nprocs.split(/:/)[1]
|
9
|
+
end
|
10
|
+
|
11
|
+
def batch_script
|
12
|
+
ppn_checks
|
13
|
+
hours, minutes, seconds = hours_minutes_seconds
|
14
|
+
<<EOF
|
15
|
+
#!/bin/bash --login
|
16
|
+
#PBS -N #{executable_name}.#{job_identifier}
|
17
|
+
#PBS -l nodes=#{nodes}:ppn=#{ppn}:#{gpu_name}
|
18
|
+
#PBS -l walltime=#{sprintf("%02d:%02d:%02d", hours, mins, secs)}
|
19
|
+
#{@project ? "#PBS -A #@project" : ""}
|
20
|
+
#PBS -e #{executable_name}.#{job_identifier}.e$PBS_JOBID
|
21
|
+
#PBS -o #{executable_name}.#{job_identifier}.o$PBS_JOBID
|
22
|
+
#PBS -V
|
23
|
+
#PBS -q dirac_reg
|
24
|
+
|
25
|
+
|
26
|
+
### start of jobscript
|
27
|
+
cd $PBS_O_WORKDIR
|
28
|
+
echo "workdir: $PBS_O_WORKDIR"
|
29
|
+
#{code_run_environment}
|
30
|
+
|
31
|
+
echo "Submitting #{nodes}x#{ppn}:#{gpu_name} job on #{CodeRunner::SYS} for project #@project..."
|
32
|
+
EOF
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -4,6 +4,8 @@ class CodeRunner
|
|
4
4
|
include Moab
|
5
5
|
def batch_script
|
6
6
|
raise "Please specify project" unless @project
|
7
|
+
(eputs "Warning: number of nodes is not recommended (8, 16, 32, 64, 128, 256, 512, 1024, 2048 or 4096 recommended)"; sleep 0.2) unless [8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096].include? nodes.to_i
|
8
|
+
(eputs "Warning: number of wall mins is not recommended (20, 60, 180, 360, 720 recomended)"; sleep 0.2) unless [20, 60, 180, 360, 720].include? @wall_mins.to_i
|
7
9
|
super
|
8
10
|
end
|
9
11
|
def max_ppn
|
@@ -1,16 +1,16 @@
|
|
1
1
|
class CodeRunner
|
2
2
|
module Moab
|
3
3
|
|
4
|
-
def self.configure_environment
|
5
|
-
eputs "Configuring Hector"
|
6
|
-
conf = <<EOF
|
7
|
-
eval `modulecmd bash swap PrgEnv-pgi PrgEnv-gnu`
|
8
|
-
eval `modulecmd bash load fftw/3.2.2`
|
9
|
-
export XTPE_LINK_TYPE=dynamic
|
10
|
-
export LD_LIBRARY_PATH=/opt/xt-libsci/10.4.1/gnu/lib/44:$LD_LIBRARY_PATH
|
11
|
-
EOF
|
12
|
-
Kernel.change_environment_with_shell_script(conf)
|
13
|
-
end
|
4
|
+
#def self.configure_environment
|
5
|
+
#eputs "Configuring Hector"
|
6
|
+
#conf = <<EOF
|
7
|
+
#eval `modulecmd bash swap PrgEnv-pgi PrgEnv-gnu`
|
8
|
+
#eval `modulecmd bash load fftw/3.2.2`
|
9
|
+
#export XTPE_LINK_TYPE=dynamic
|
10
|
+
#export LD_LIBRARY_PATH=/opt/xt-libsci/10.4.1/gnu/lib/44:$LD_LIBRARY_PATH
|
11
|
+
#EOF
|
12
|
+
#Kernel.change_environment_with_shell_script(conf)
|
13
|
+
#end
|
14
14
|
|
15
15
|
def queue_status
|
16
16
|
if ((prefix = ENV['CODE_RUNNER_LAUNCHER']).size > 0 rescue false)
|
@@ -25,13 +25,17 @@ EOF
|
|
25
25
|
"aprun -n #{nprocstot} -N #{ppn}"
|
26
26
|
end
|
27
27
|
|
28
|
+
def nodes
|
29
|
+
nodes, ppn = @nprocs.split(/:/)[0].split(/x/)
|
30
|
+
nodes.to_i
|
31
|
+
end
|
28
32
|
def ppn
|
29
|
-
nodes, ppn = @nprocs.split(/x/)
|
30
|
-
ppn
|
33
|
+
nodes, ppn = @nprocs.split(/:/)[0].split(/x/)
|
34
|
+
ppn.to_i
|
31
35
|
end
|
32
36
|
def nprocstot
|
33
37
|
|
34
|
-
nodes, ppn = @nprocs.split(/x/)
|
38
|
+
#nodes, ppn = @nprocs.split(/x/)
|
35
39
|
nprocstot = nodes.to_i * ppn.to_i
|
36
40
|
end
|
37
41
|
def run_command
|
@@ -39,8 +43,6 @@ EOF
|
|
39
43
|
if (ENV['CODE_RUNNER_LAUNCHER'].size > 0 rescue false)
|
40
44
|
return %[#{mpi_prog} #{executable_location}/#{executable_name} #{parameter_string} > #{output_file} 2> #{error_file}]
|
41
45
|
else
|
42
|
-
nodes, ppn = @nprocs.split(/x/)
|
43
|
-
nprocstot = nodes.to_i * ppn.to_i
|
44
46
|
"#{mpi_prog} #{executable_location}/#{executable_name} #{parameter_string}"
|
45
47
|
end
|
46
48
|
end
|
@@ -61,36 +63,38 @@ EOF
|
|
61
63
|
end
|
62
64
|
|
63
65
|
def batch_script_file
|
64
|
-
"#{executable_name}
|
66
|
+
"#{executable_name}.#{job_identifier}.sh"
|
65
67
|
end
|
66
68
|
|
67
69
|
def max_ppn
|
68
70
|
raise "Please define max_ppn for your system"
|
69
71
|
end
|
70
72
|
|
71
|
-
def
|
72
|
-
|
73
|
-
nodes, ppn = @nprocs.split(/x/)
|
74
|
-
(eputs "Warning: number of nodes is not recommended (8, 16, 32, 64, 128, 256, 512, 1024, 2048 or 4096 recommended)"; sleep 0.2) unless [8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096].include? nodes.to_i
|
75
|
-
(eputs "Warning: number of wall mins is not recommended (20, 60, 180, 360, 720 recomended)"; sleep 0.2) unless [20, 60, 180, 360, 720].include? @wall_mins.to_i
|
76
|
-
eputs "Warning: Underuse of nodes (#{ppn} cores per node instead of #{max_ppn})" if ppn.to_i < max_ppn
|
77
|
-
raise "Error: cores per node cannot excede #{max_ppn}" if ppn.to_i > max_ppn
|
78
|
-
# raise "Error: project (i.e. budget) not specified" unless @project
|
79
|
-
ppn ||= max_ppn
|
73
|
+
def hours_minutes_seconds
|
80
74
|
if @wall_mins
|
81
75
|
ep @wall_mins
|
82
76
|
hours = (@wall_mins / 60).floor
|
83
77
|
mins = @wall_mins.to_i % 60
|
84
78
|
secs = ((@wall_mins - @wall_mins.to_i) * 60).to_i
|
79
|
+
else
|
80
|
+
raise "Please specify wall mins using the W flag"
|
85
81
|
end
|
86
82
|
eputs "Allotted wall time is " + sprintf("%02d:%02d:%02d", hours, mins, secs)
|
87
|
-
|
83
|
+
return [hours, minutes, seconds]
|
84
|
+
end
|
85
|
+
def ppn_checks
|
86
|
+
eputs "Warning: Underuse of nodes (#{ppn} cores per node instead of #{max_ppn})" if ppn.to_i < max_ppn
|
87
|
+
raise "Error: cores per node cannot excede #{max_ppn}" if ppn.to_i > max_ppn
|
88
|
+
end
|
89
|
+
def batch_script
|
90
|
+
ppn_checks
|
91
|
+
hours, minutes, seconds = hours_minutes_seconds
|
88
92
|
<<EOF
|
89
93
|
#!/bin/bash --login
|
90
94
|
#PBS -N #{executable_name}.#{job_identifier}
|
91
95
|
#PBS -l mppwidth=#{nprocstot}
|
92
96
|
#PBS -l mppnppn=#{ppn}
|
93
|
-
#
|
97
|
+
#PBS -l walltime=#{sprintf("%02d:%02d:%02d", hours, mins, secs)}
|
94
98
|
#{@project ? "#PBS -A #@project" : ""}
|
95
99
|
|
96
100
|
### start of jobscript
|
@@ -99,10 +103,7 @@ EOF
|
|
99
103
|
#{code_run_environment}
|
100
104
|
|
101
105
|
echo "Submitting #{nodes}x#{ppn} job on #{CodeRunner::SYS} for project #@project..."
|
102
|
-
|
103
|
-
|
104
106
|
EOF
|
105
|
-
|
106
107
|
end
|
107
108
|
|
108
109
|
def cancel_job
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coderunner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: graphkit
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 0.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.2.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: parallelpipes
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 1.0.0
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.0
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rubyhacks
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: 0.1.1
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.1.1
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: gsl
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: 1.12.0
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.12.0
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: gsl_extras
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: 0.3.0
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.3.0
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: hostmanager
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>'
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: 0.1.0
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>'
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.1.0
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: shoulda
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: rdoc
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ~>
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '3.12'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '3.12'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: bundler
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>'
|
@@ -109,10 +149,15 @@ dependencies:
|
|
109
149
|
version: 1.0.0
|
110
150
|
type: :development
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>'
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 1.0.0
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: jeweler
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
163
|
- - ~>
|
@@ -120,7 +165,12 @@ dependencies:
|
|
120
165
|
version: 1.8.4
|
121
166
|
type: :development
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 1.8.4
|
124
174
|
description: CodeRunner is a framework for the automated running and analysis of simulations.
|
125
175
|
It automatically generates any necessary input files, organises the output data
|
126
176
|
and analyses it. Because it is a modular system, it can easily be customised to
|
@@ -166,6 +216,7 @@ files:
|
|
166
216
|
- lib/coderunner/remote_code_runner.rb
|
167
217
|
- lib/coderunner/run.rb
|
168
218
|
- lib/coderunner/system_modules/blue_joule.rb
|
219
|
+
- lib/coderunner/system_modules/dirac.rb
|
169
220
|
- lib/coderunner/system_modules/edison.rb
|
170
221
|
- lib/coderunner/system_modules/franklin.rb
|
171
222
|
- lib/coderunner/system_modules/generic_linux.rb
|
@@ -221,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
272
|
version: '0'
|
222
273
|
requirements: []
|
223
274
|
rubyforge_project: coderunner
|
224
|
-
rubygems_version: 1.8.
|
275
|
+
rubygems_version: 1.8.23
|
225
276
|
signing_key:
|
226
277
|
specification_version: 3
|
227
278
|
summary: A framework for the automated running and analysis of simulations.
|