class ServerScripts::BatchJob
Attributes
additional_commands[RW]
enable_intel_itac[RW]
env[R]
err_file[RW]
executable[RW]
executor[RW]
intel_vtune_fname[RW]
job_fname[R]
job_name[RW]
modules[RW]
node_type[RW]
nodes[RW]
npernode[RW]
nprocs[RW]
options[RW]
out_file[RW]
reservation_id[RW]
run_cmd[RW]
source_bashrc[RW]
system[R]
wall_time[RW]
Public Class Methods
new(job_fname="sample_job.sh") { |self| ... }
click to toggle source
# File lib/server_scripts/batch_job.rb, line 24 def initialize job_fname="sample_job.sh" @job_fname = job_fname @job_name = "sample" @out_file = "sample_out.log" @err_file = "sample_err.log" @wall_time = "1:00:00" @node_type = NodeType::FULL @nodes = 1 @npernode = 1 @nprocs = nil @run_cmd = nil @executor = :vanilla @env = {} @executable = "./a.out" @job_script = nil @enable_intel_itac = false @additional_commands = [] @modules = [] @source_bashrc = true @reservation_id = nil yield self end
Public Instance Methods
set_env(var, value)
click to toggle source
# File lib/server_scripts/batch_job.rb, line 48 def set_env var, value raise ArgumentError, "Env #{var} is already set to #{value}." if @env[var] @env[var] = value end
submit!()
click to toggle source
# File lib/server_scripts/batch_job.rb, line 58 def submit! write_job_script! Kernel.system(@system.job_submit_cmd( batch_script: @job_fname, res_id: @reservation_id)) end
write_job_script!()
click to toggle source
# File lib/server_scripts/batch_job.rb, line 53 def write_job_script! generate_job_script! unless @job_script File.write(@job_fname, @job_script) end
Private Instance Methods
check_process_counts()
click to toggle source
# File lib/server_scripts/batch_job.rb, line 101 def check_process_counts if @nprocs && @nprocs != @npernode * @nodes raise ArgumentError, "Number of processes should be #{@npernode * @nodes} not #{@nprocs}" end end
configure_executor!()
click to toggle source
# File lib/server_scripts/batch_job.rb, line 84 def configure_executor! check_process_counts @nprocs = @npernode * @nodes if @executor == :openmpi @executor = Executor::OpenMPI.new(npernode: @npernode, nprocs: @nprocs, env: @env) elsif @executor == :intel @executor = Executor::IntelMPI.new(npernode: @npernode, nprocs: @nprocs, env: @env) @executor.enable_itac = !!@enable_intel_itac @executor.vtune_fname = @intel_vtune_fname elsif @executor == :vanilla @executor = Executor::Vanilla.new else raise ArgumentError, "Cannot find MPI implementation #{@executor}." end end
generate_job_script!()
click to toggle source
# File lib/server_scripts/batch_job.rb, line 67 def generate_job_script! @system = ServerScripts.system.new(@node_type, @nodes, @job_name, @wall_time, @out_file, @err_file, @env, @modules) configure_executor! @job_script = "" @job_script += @system.header @job_script += "\nsource ~/.bashrc\n" if @source_bashrc @job_script += @system.module_load_cmd @job_script += @system.env_setter @additional_commands.each do |c| @job_script += c + "\n" end @job_script += "#{@executor.run_cmd} #{@executable} #{@options}\n" end