删除example代码
This commit is contained in:
parent
934ed8663f
commit
775da2a902
|
@ -1,20 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm/extra"
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "strconv"
|
||||
func main(){
|
||||
|
||||
if len(os.Args)<2 {
|
||||
fmt.Printf("Please specify Job ID\n")
|
||||
return
|
||||
}
|
||||
id,_ := strconv.Atoi(os.Args[1])
|
||||
fmt.Printf("try to cancel %d\n", id)
|
||||
err:= extra.Cancel_job(uint32( id))
|
||||
if(err!= nil){
|
||||
fmt.Printf(err.Error())
|
||||
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm/extra"
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "strconv"
|
||||
func main(){
|
||||
|
||||
if len(os.Args)<2 {
|
||||
fmt.Printf("Please specify Job ID\n")
|
||||
return
|
||||
}
|
||||
id,_ := strconv.Atoi(os.Args[1])
|
||||
|
||||
jobs, err := extra. Get_job_info_accounting(uint32( id))
|
||||
if err!= nil {
|
||||
fmt.Printf(err.Error())
|
||||
return
|
||||
}
|
||||
fmt.Printf("JobId\tuser\taccount\tstate\t\tJobName\n")
|
||||
for i := range(jobs) {
|
||||
fmt.Printf("%d\t%s\t%s\t%s\t%s\n", jobs[i].JobId, jobs[i].User, jobs[i].Account, jobs[i].State, jobs[i].JobName)
|
||||
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm/jobinfo"
|
||||
import "fmt"
|
||||
|
||||
func main(){
|
||||
job_list := job_info.Get_all_jobs()
|
||||
fmt.Printf("Found %d jobs \n", job_list.Record_count)
|
||||
/* a little bit nicer */
|
||||
fmt.Printf("Id\tName\t\tPartion\tUser\tRuntime\tStatus\t\t(Reason)\tNodes\tPriority\n")
|
||||
fmt.Printf("________________________________________________________________________________________________\n")
|
||||
for i := range job_list.Job_list {
|
||||
job := job_list.Job_list[i]
|
||||
fmt.Printf("%d\t%s\t%s\t%s %s\t%s\t%s\t%s\t%d\n" ,
|
||||
job.Job_id, job.Name, job.Partition, job.User_name,job_info.Get_job_runtime(job).String(), job.Job_stateS ,
|
||||
job_info.Reason_to_string(job.State_reason), job.Nodes,job.Priority)
|
||||
}
|
||||
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm/nodeinfo"
|
||||
import "fmt"
|
||||
|
||||
func main(){
|
||||
node_list := node_info.Get_all_nodes()
|
||||
fmt.Printf("Found %d nodes \n", node_list.Record_count)
|
||||
|
||||
|
||||
/* a little bit nicer*/
|
||||
fmt.Printf("name\t State\t\t\t Reason\t\t Tres\n")
|
||||
fmt.Printf("________________________________________\n")
|
||||
for i := range node_list.Node_list {
|
||||
node := node_list.Node_list[i]
|
||||
fmt.Printf("%s\t %s\t %s\t %s\n", node.Node_hostname, node_info.State_to_string(node.Node_state), node.Reason, node.Tres_fmt_str)
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm"
|
||||
import "fmt"
|
||||
func main(){
|
||||
|
||||
version := int(0)
|
||||
var config slurm.Ctl_conf
|
||||
version = slurm.Version()
|
||||
fmt.Printf("Version is %s\n", slurm.VersionString(version));
|
||||
config = slurm.GetConfig()
|
||||
slurm.Print_Ctl_conf(config)
|
||||
|
||||
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm/jobinfo"
|
||||
import "slurm"
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "strconv"
|
||||
|
||||
func main(){
|
||||
|
||||
if len(os.Args)<2 {
|
||||
fmt.Printf("Please specify Job ID\n")
|
||||
return
|
||||
}
|
||||
id,_ := strconv.Atoi(os.Args[1])
|
||||
job_list := job_info.Get_job(uint32(id))
|
||||
if job_list.Error_code != 0 {
|
||||
msg := slurm.GetErrorString(job_list.Error_code)
|
||||
fmt.Printf("Error: %s\n" ,msg)
|
||||
return
|
||||
|
||||
|
||||
|
||||
}
|
||||
for i := range job_list.Job_list {
|
||||
job_info.Print_Job_info(job_list.Job_list[i])
|
||||
}
|
||||
fmt.Printf("Id\tName\t\tPartion\tUser\tRuntime\tStatus\t\t(Reason)\tNodes\tPriority\n")
|
||||
fmt.Printf("________________________________________________________________________________________________\n")
|
||||
for i := range job_list.Job_list {
|
||||
job := job_list.Job_list[i]
|
||||
fmt.Printf("%d\t%s\t%s\t%s %s\t%s\t%s\t%s\t%d\n" ,
|
||||
job.Job_id, job.Name, job.Partition, job.User_name,job_info.Get_job_runtime(job).String(), job.Job_stateS,
|
||||
job_info.Reason_to_string(job.State_reason), job.Nodes,job.Priority)
|
||||
}
|
||||
|
||||
|
||||
end_time :=job_info.Get_job_endtime(uint32(id))
|
||||
fmt.Printf("End-Time: %s\n", end_time)
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm/nodeinfo"
|
||||
import "slurm"
|
||||
import "fmt"
|
||||
import "os"
|
||||
func main(){
|
||||
if len(os.Args)<2 {
|
||||
fmt.Printf("Please specify node name\n")
|
||||
return
|
||||
}
|
||||
name:= os.Args[1]
|
||||
|
||||
node_list := node_info.Get_node_info(name)
|
||||
if(node_list.Error_code !=0) {
|
||||
msg := slurm.GetErrorString(node_list.Error_code)
|
||||
fmt.Printf("Error: %s\n" ,msg)
|
||||
return
|
||||
}
|
||||
fmt.Printf("Found %d nodes \n", node_list.Record_count)
|
||||
|
||||
|
||||
/* a little bit nicer*/
|
||||
fmt.Printf("name\t State\t\t\t Reason\t\t Tres\n")
|
||||
fmt.Printf("________________________________________\n")
|
||||
for i := range node_list.Node_list {
|
||||
node := node_list.Node_list[i]
|
||||
fmt.Printf("%s\t %s\t %s\t %s\n", node.Node_hostname, node_info.State_to_string(node.Node_state), node.Reason, node.Tres_fmt_str)
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
partition_info "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_slurm/cgo_tianhe/src/slurm/partitioninfo"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
partition_list := partition_info.Get_partitions()
|
||||
fmt.Printf("Found %d partions \n", partition_list.Record_count)
|
||||
|
||||
/* a little bit nicer */
|
||||
fmt.Printf("Name\t Nodes\t\t\t Max_time(min)\t\t Tres\n")
|
||||
fmt.Printf("________________________________________\n")
|
||||
for i := range partition_list.Partition_list {
|
||||
partition := partition_list.Partition_list[i]
|
||||
fmt.Printf("%s\t %s\t %d\t %d\n", partition.Name, partition.Nodes, partition.Max_time, partition.Node_inx)
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package main
|
||||
|
||||
import "slurm/jobinfo"
|
||||
import "slurm"
|
||||
import "fmt"
|
||||
import "os"
|
||||
|
||||
func main(){
|
||||
|
||||
if len(os.Args)<2 {
|
||||
fmt.Printf("Please specify username\n")
|
||||
return
|
||||
}
|
||||
name := os.Args[1]
|
||||
job_list := job_info.Get_user_jobs(name)
|
||||
if job_list.Error_code != 0 {
|
||||
msg := slurm.GetErrorString(job_list.Error_code)
|
||||
fmt.Printf("Error: %s\n" ,msg)
|
||||
return
|
||||
|
||||
|
||||
|
||||
}
|
||||
fmt.Printf("Id\tName\t\tPartion\tUser\tRuntime\tStatus\t\t(Reason)\tNodes\tPriority\n")
|
||||
fmt.Printf("________________________________________________________________________________________________\n")
|
||||
for i := range job_list.Job_list {
|
||||
job := job_list.Job_list[i]
|
||||
fmt.Printf("%d\t%s\t%s\t%s %s\t%s\t%s\t%s\t%d\n" ,
|
||||
job.Job_id, job.Name, job.Partition, job.User_name,job_info.Get_job_runtime(job).String(), job.Job_stateS ,
|
||||
job_info.Reason_to_string(job.State_reason), job.Nodes,job.Priority)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,109 +0,0 @@
|
|||
# Submission of jobs
|
||||
This folder shows in a few more examples of how jobs can be submitted in Slurm. Some examples use containers.
|
||||
Attention: The parameters for job names and partitions probably have to be adjusted!
|
||||
|
||||
# Simple Jobs
|
||||
|
||||
## submit_job.go
|
||||
In this example, a simple bash-Jobs is submitted. The used partition is *long* (adapt probably).
|
||||
```
|
||||
job_desc.Partition="long"
|
||||
```
|
||||
|
||||
The job sets two environment variables and executes a
|
||||
```
|
||||
hostname
|
||||
env | grep SLUM
|
||||
```
|
||||
On a single node of the cluster (single task job).
|
||||
The application does not wait until the hob is completed, but dirctly returns.
|
||||
The (std) output is written to
|
||||
out-jobid.txt, the std- error to err-jobid.txt
|
||||
|
||||
```
|
||||
job_desc.Std_out = ("./out-%j.txt")
|
||||
job_desc.Std_err = ("./err-%j.txt")
|
||||
````
|
||||
|
||||
|
||||
## update_job.go
|
||||
This example allows to update the qos and the partition a job is running on. This can help to move the job to another queue with another partition.
|
||||
Note to users: In theory, the API allows the update of the number of nodes and the tasks per node. However, since this is only allowed by root or a slurm admin, we do not include an example here.
|
||||
Synthax
|
||||
```
|
||||
./update_job JobId qos partition
|
||||
```
|
||||
(Note: This requires that the Job with the Id JobID is already submitted and in a pending state)
|
||||
|
||||
|
||||
# Container jobs
|
||||
|
||||
The following examples all submit a job that starts singulrity containers.
|
||||
These containers, if they do not exist, are created. However, problems can arise if the user does not have sudo permissions..
|
||||
|
||||
## The containers
|
||||
|
||||
The first container is an MPI container. This is used by and `submit_mpi_containier.go` and `submit_mpi_and_update.go`. The definition is stored in `mpi_container.def`
|
||||
It can also be created with the command
|
||||
|
||||
```
|
||||
sudo singularity build mpi_container.img mpi_container.def
|
||||
```
|
||||
|
||||
The program mpi_pingppong (source code enclosed: `mpi_pingpong.c` ) is built into the container. It performs a ping-pong test between two processes.
|
||||
|
||||
This container uses the hybrid model, which assumes that MPI is installed on the cluter (to start the job) and installs it in the container itself. Works with OpenMPI.
|
||||
|
||||
The second container is an openmp container, including a sample OpenMP programm openmp_example (source code: ` openmp_example.c`).
|
||||
It can also be created with the command:
|
||||
|
||||
```
|
||||
sudo singularity build openmp_container.img openmp_container.def
|
||||
```
|
||||
|
||||
This container is used bei `submit_openmp_container.go`.
|
||||
|
||||
|
||||
## submit_mpi_containier.go
|
||||
Submits a mpi-container job to the cluster. It runs to Processes on two nodes
|
||||
```
|
||||
job_desc.Min_nodes =uint32(2)
|
||||
job_desc.Num_tasks = uint32(2)
|
||||
```
|
||||
The application blocks, until the job is completed. The (std) output is written to
|
||||
jobid-out.txt, the std- error to jobId-err.txt
|
||||
```
|
||||
job_desc.Std_out = ("./%j-out.txt")
|
||||
job_desc.Std_err = ("./%j-err.txt")
|
||||
```
|
||||
## submit_omp_container.go
|
||||
Submits two openMP jobs to the cluster and wait, until they are completed.
|
||||
Both jobs allocate *one process* for the job, but *two CPUs per task/process* (for multi-threading).
|
||||
```
|
||||
job_desc.Num_tasks = uint32(1)
|
||||
job_desc.Cpus_per_task = uint16(2)
|
||||
|
||||
```
|
||||
The first job reads the environment variable ` SLURM_JOB_CPUS_PER_NODE` and sets the number of openMP threads to exactly the number of cpus that are available per task/process.
|
||||
```
|
||||
job_desc.Script+= "export OMP_NUM_THREADS=$SLURM_JOB_CPUS_PER_NODE\n"
|
||||
```
|
||||
The second job sets the number of threads to 4 (which is oversuscribing because more threads are started than processes) and executes the same job.
|
||||
```
|
||||
job_desc.Script+= "export OMP_NUM_THREADS=4\n"
|
||||
```
|
||||
|
||||
The program waits until both jobs are completed. The results are written to the two outputs files, similiar to `submit_mpi_container.go`
|
||||
|
||||
### submit_mpi_and_update.go
|
||||
This application is dooing the same as `submit_mpi_container.go`
|
||||
```
|
||||
ops.Qos = "shortjobs"
|
||||
ops.Partition = "short"
|
||||
```
|
||||
|
||||
This situation, can, for example, be created my submitting longer, other jobs bevore in the background (depending on the partion size) and than start this application:
|
||||
|
||||
```
|
||||
./submit_mpi_containier & ./submit_mpi_containier & ./submit_mpi_and_update
|
||||
```
|
|
@ -1,37 +0,0 @@
|
|||
Bootstrap: docker
|
||||
From: ubuntu:latest
|
||||
|
||||
%files
|
||||
mpi_pingpong.c /opt
|
||||
|
||||
%environment
|
||||
export OMPI_DIR=/home0/opt/openmpi
|
||||
export SINGULARITY_OMPI_DIR=$OMPI_DIR
|
||||
export SINGULARITYENV_APPEND_PATH=$OMPI_DIR/bin
|
||||
export SINGULAIRTYENV_APPEND_LD_LIBRARY_PATH=$OMPI_DIR/lib
|
||||
|
||||
%post
|
||||
echo "Installing required packages..."
|
||||
apt-get update && apt-get install -y wget git bash gcc gfortran g++ make file
|
||||
|
||||
echo "Installing Open MPI"
|
||||
export OMPI_DIR=/home0/opt/openmpi
|
||||
export OMPI_VERSION=4.0.3
|
||||
export OMPI_URL="https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-$OMPI_VERSION.tar.bz2"
|
||||
mkdir -p /tmp/ompi
|
||||
mkdir -p /opt
|
||||
chmod a+w /opt/
|
||||
chmod a+r /opt/
|
||||
ls -la /tmp/ompi
|
||||
# Download
|
||||
cd /tmp/ompi && wget -O openmpi-$OMPI_VERSION.tar.bz2 $OMPI_URL && tar -xjf openmpi-$OMPI_VERSION.tar.bz2
|
||||
ls -la
|
||||
# Compile and install
|
||||
cd /tmp/ompi/openmpi-$OMPI_VERSION && ./configure --prefix=$OMPI_DIR && make install
|
||||
# Set env variables so we can compile our application
|
||||
export PATH=$OMPI_DIR/bin:$PATH
|
||||
export LD_LIBRARY_PATH=$OMPI_DIR/lib:$LD_LIBRARY_PATH
|
||||
export MANPATH=$OMPI_DIR/share/man:$MANPATH
|
||||
# rm -r tmp/mpi
|
||||
echo "Compiling the MPI application..."
|
||||
cd /opt && mpicc -o mpi_pingpong mpi_pingpong.c
|
|
@ -1,65 +0,0 @@
|
|||
#include <mpi.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#define MAX_ITER 1000
|
||||
int main (int argc, char **argv) {
|
||||
int rc;
|
||||
int size;
|
||||
int myrank;
|
||||
size_t max_send = 1<<22;
|
||||
char *send_buf = (char*)malloc(sizeof(char)*max_send);
|
||||
char *recv_buf = (char*)malloc(sizeof(char)*max_send);
|
||||
size_t send_size;
|
||||
clock_t start, end;
|
||||
rc = MPI_Init (&argc, &argv);
|
||||
if (rc != MPI_SUCCESS) {
|
||||
fprintf (stderr, "MPI_Init() failed");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
rc = MPI_Comm_size (MPI_COMM_WORLD, &size);
|
||||
if (rc != MPI_SUCCESS) {
|
||||
fprintf (stderr, "MPI_Comm_size() failed");
|
||||
goto exit_with_error;
|
||||
}
|
||||
|
||||
if(size!= 2) {
|
||||
|
||||
fprintf(stderr, "This process requieres exact two processes\n");
|
||||
}
|
||||
rc = MPI_Comm_rank (MPI_COMM_WORLD, &myrank);
|
||||
if (rc != MPI_SUCCESS) {
|
||||
fprintf (stderr, "MPI_Comm_rank() failed");
|
||||
goto exit_with_error;
|
||||
}
|
||||
if(myrank==0)
|
||||
fprintf (stdout, "Size\t Time(ms)\n");
|
||||
|
||||
for(send_size=1 ; send_size<= max_send; send_size*=2){
|
||||
for (int i = 0; i<MAX_ITER+2; i++) {
|
||||
if(i == 2)
|
||||
start = clock();
|
||||
if(myrank == 0){
|
||||
MPI_Send(send_buf, send_size, MPI_CHAR, 1, 0x4, MPI_COMM_WORLD);
|
||||
MPI_Recv(recv_buf, send_size, MPI_CHAR, 1, 0x5, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
|
||||
}
|
||||
else {
|
||||
MPI_Recv(recv_buf, send_size, MPI_CHAR, 0, 0x4, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
|
||||
MPI_Send(send_buf, send_size, MPI_CHAR, 0, 0x5, MPI_COMM_WORLD);
|
||||
}
|
||||
}
|
||||
end= clock();
|
||||
double time_taken = (double)(end-start)/CLOCKS_PER_SEC;
|
||||
if(myrank == 0 )
|
||||
fprintf(stdout, "%ld\t %f\n", send_size, time_taken);
|
||||
|
||||
}
|
||||
MPI_Finalize();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
exit_with_error:
|
||||
MPI_Finalize();
|
||||
return EXIT_FAILURE;
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
Bootstrap: docker
|
||||
From: ubuntu:latest
|
||||
|
||||
%files
|
||||
openmp_example.c /opt
|
||||
|
||||
%environment
|
||||
export OMPI_DIR=/home0/opt/openmpi
|
||||
export SINGULARITY_OMPI_DIR=$OMPI_DIR
|
||||
export SINGULARITYENV_APPEND_PATH=$OMPI_DIR/bin
|
||||
export SINGULAIRTYENV_APPEND_LD_LIBRARY_PATH=$OMPI_DIR/lib
|
||||
|
||||
%post
|
||||
echo "Installing required packages..."
|
||||
apt-get update && apt-get install -y wget git bash gcc gfortran g++ make file
|
||||
|
||||
echo "Compiling the MPI application..."
|
||||
cd /opt && gcc -o openmp_example -fopenmp openmp_example.c
|
|
@ -1,14 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <omp.h>
|
||||
|
||||
int main() {
|
||||
#pragma omp parallel
|
||||
{
|
||||
int id = omp_get_thread_num();
|
||||
int data = id;
|
||||
int total = omp_get_num_threads();
|
||||
printf("Greetings from thread %d out of %d with Data %d\n", id, total, data);
|
||||
}
|
||||
printf("parallel for ends.\n");
|
||||
return 0;
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_slurm/cgo_tianhe/src/slurm"
|
||||
"code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_slurm/cgo_tianhe/src/slurm/submitjob"
|
||||
)
|
||||
import "os/user"
|
||||
import "os"
|
||||
import "strconv"
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
job_desc := submit_job.Job_descriptor{}
|
||||
job_desc.Script = "#! /bin/bash\n hostname \n env | grep SLURM "
|
||||
dir, _ := os.Getwd()
|
||||
|
||||
user, _ := user.Current()
|
||||
userid, _ := strconv.Atoi(user.Uid)
|
||||
job_desc.User_id = uint32(userid)
|
||||
groupid, _ := strconv.Atoi(user.Gid)
|
||||
|
||||
job_desc.Group_id = uint32(groupid)
|
||||
job_desc.Name = "test_job"
|
||||
job_desc.Partition = "long"
|
||||
job_desc.Time_limit = uint32(2)
|
||||
job_desc.Min_nodes = uint32(1)
|
||||
job_desc.Std_out = ("./out-%j.txt")
|
||||
job_desc.Std_err = ("./err-%j.txt")
|
||||
job_desc.Work_dir = dir
|
||||
job_desc.Environment = []string{"SLURM_GO_JOB=TRUE", "SLURM_CONTAINER_JOB=FALSE"}
|
||||
answer := submit_job.Submit_job(&job_desc)
|
||||
if answer.Error_code != 0 {
|
||||
msg := slurm.GetErrorString(answer.Error_code)
|
||||
fmt.Printf("Error: %s\n", msg)
|
||||
return
|
||||
}
|
||||
fmt.Printf("Submitted Job %d\n", answer.Job_id)
|
||||
}
|
|
@ -1,128 +0,0 @@
|
|||
package main
|
||||
|
||||
//
|
||||
//
|
||||
//import "slurm/submitjob"
|
||||
//import "slurm"
|
||||
//import "os"
|
||||
//import "strconv"
|
||||
//import "fmt"
|
||||
//import "os/exec"
|
||||
//import "path/filepath"
|
||||
//import "slurm/jobinfo"
|
||||
//import "time"
|
||||
//import "os/user"
|
||||
//
|
||||
//
|
||||
//
|
||||
//func fileExists(filename string) bool {
|
||||
// info, err := os.Stat(filename)
|
||||
// if os.IsNotExist(err) {
|
||||
// return false
|
||||
// }
|
||||
// return !info.IsDir()
|
||||
//}
|
||||
//func build_container(file_name,container_name string){
|
||||
//
|
||||
// cmd := exec.Command("sudo", "/usr/local/bin/singularity", "build",container_name, file_name)
|
||||
// fmt.Print("Now build new container")
|
||||
// fmt.Printf("%s\n", cmd.String())
|
||||
// stdoutStderr, err := cmd.CombinedOutput()
|
||||
// if err != nil {
|
||||
// fmt.Printf("error in creating container %s \n", err);
|
||||
//// return
|
||||
// }
|
||||
// fmt.Printf("%s\n", stdoutStderr)
|
||||
//}
|
||||
//
|
||||
//func main(){
|
||||
// job_desc := submit_job.Job_descriptor{}
|
||||
//
|
||||
// dir, _ := os.Getwd()
|
||||
// container := filepath.Join(dir, "mpi_container.img")
|
||||
// definition := filepath.Join(dir, "mpi_container.def")
|
||||
// if !fileExists(container){
|
||||
// build_container(definition,container)
|
||||
// }
|
||||
//
|
||||
// if !fileExists(container){
|
||||
// return
|
||||
// }
|
||||
// /* use Cmd to create our script */
|
||||
//
|
||||
// job_desc.Script = "#!/bin/bash\n export PATH=$PATH:/usr/local/bin\n srun hostname \n"
|
||||
// cmd := exec.Command( "/home0/opt/openmpi/bin/mpirun", "-mca btl_tcp_if_include eth1", "/usr/local/bin/singularity", "exec",container, "/opt/mpi_pingpong" )
|
||||
// job_desc.Script+= cmd.String()
|
||||
// fmt.Printf("cmd %s\n", job_desc.Script)
|
||||
// user, _:= user.Current()
|
||||
// userid , _ := strconv.Atoi(user.Uid)
|
||||
// job_desc.User_id= uint32(userid)
|
||||
// groupid , _ := strconv.Atoi(user.Gid)
|
||||
//
|
||||
// job_desc.Group_id= uint32(groupid)
|
||||
// job_desc.Name = "flex_mpi_job"
|
||||
// job_desc.Partition="long"
|
||||
// job_desc.Time_limit = uint32(60)
|
||||
// job_desc.Ntasks_per_node = uint16(1)
|
||||
// job_desc.Num_tasks = uint32(2)
|
||||
// job_desc.Std_out = ("./%j-out.txt")
|
||||
// job_desc.Std_err = ("./%j-err.txt")
|
||||
// job_desc.Work_dir = dir
|
||||
//
|
||||
// time.Sleep(3 * time.Second)
|
||||
// answer := submit_job.Submit_job(&job_desc)
|
||||
// if(answer.Error_code != 0) {
|
||||
// msg := slurm.GetErrorString(answer.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
// }
|
||||
// fmt.Printf("Submitted Job %d\n", answer.Job_id)
|
||||
//
|
||||
// time.Sleep(5 * time.Second)
|
||||
//
|
||||
// job_list := job_info.Get_job(answer.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job := job_list.Job_list[0]
|
||||
//
|
||||
// fmt.Printf("job %d is %s\n", answer.Job_id, job.Job_stateS)
|
||||
// state := job.Job_stateS
|
||||
// if state == "Pending" {
|
||||
// fmt.Printf("Move job %d to another partition \n", answer.Job_id)
|
||||
// var ops submit_job.Update_job_options
|
||||
//
|
||||
// ops.Qos = "shortjobs"
|
||||
// ops.Partition = "short"
|
||||
// err2 := submit_job.Update_job(ops, uint32(answer.Job_id))
|
||||
// if err2!= uint32(0) {
|
||||
// fmt.Printf("error %s \n", slurm.GetErrorString(err2))
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// for state == "Pending" || state == "Running" {
|
||||
// time.Sleep(2 * time.Second)
|
||||
// job_list = job_info.Get_job(answer.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job = job_list.Job_list[0]
|
||||
//
|
||||
// state = job.Job_stateS
|
||||
//
|
||||
// fmt.Printf("job %d is %s\n",answer.Job_id, job.Job_stateS)
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
// fmt.Printf("Total runtime Job %d %s\n",job.Job_id, job_info.Get_job_runtime(job).String() )
|
||||
//}
|
||||
//
|
||||
//
|
||||
//
|
|
@ -1,112 +0,0 @@
|
|||
package main
|
||||
|
||||
//
|
||||
//import "slurm/submitjob"
|
||||
//import "slurm"
|
||||
//import "os/user"
|
||||
//import "os"
|
||||
//import "strconv"
|
||||
//import "fmt"
|
||||
//import "os/exec"
|
||||
//import "path/filepath"
|
||||
//import "slurm/jobinfo"
|
||||
//import "time"
|
||||
//
|
||||
//
|
||||
//func fileExists(filename string) bool {
|
||||
// info, err := os.Stat(filename)
|
||||
// if os.IsNotExist(err) {
|
||||
// return false
|
||||
// }
|
||||
// return !info.IsDir()
|
||||
//}
|
||||
//func build_container(file_name,container_name string){
|
||||
//
|
||||
// cmd := exec.Command("sudo","/usr/local/bin/singularity", "build",container_name, file_name)
|
||||
// fmt.Print("Now build new container")
|
||||
// fmt.Printf("%s\n", cmd.String())
|
||||
// stdoutStderr, err := cmd.CombinedOutput()
|
||||
// if err != nil {
|
||||
// fmt.Printf("error in creating container %s \n", err)
|
||||
//
|
||||
// fmt.Printf("%s\n", stdoutStderr)
|
||||
//// return
|
||||
// }
|
||||
// fmt.Printf("%s\n", stdoutStderr)
|
||||
//}
|
||||
//
|
||||
//func main(){
|
||||
// job_desc := submit_job.Job_descriptor{}
|
||||
//
|
||||
// dir, _ := os.Getwd()
|
||||
// container := filepath.Join(dir, "mpi_container.img")
|
||||
// definition := filepath.Join(dir, "mpi_container.def")
|
||||
// if !fileExists(container){
|
||||
// build_container(definition,container)
|
||||
// }
|
||||
//
|
||||
// if !fileExists(container){
|
||||
// return
|
||||
// }
|
||||
// /* use Cmd to create our script */
|
||||
//
|
||||
// job_desc.Script = "#!/bin/bash\n export PATH=$PATH:/usr/local/bin\n hostname \n"
|
||||
// cmd := exec.Command( "/home0/opt/openmpi/bin/mpirun", "-mca btl_tcp_if_include eth1", "/usr/local/bin/singularity", "exec",container, "/opt/mpi_pingpong" )
|
||||
// job_desc.Script+= cmd.String()
|
||||
// fmt.Printf("cmd %s\n", job_desc.Script)
|
||||
// user, _:= user.Current()
|
||||
// userid , _ := strconv.Atoi(user.Uid)
|
||||
// job_desc.User_id= uint32(userid)
|
||||
// groupid , _ := strconv.Atoi(user.Gid)
|
||||
//
|
||||
// job_desc.Group_id= uint32(groupid)
|
||||
// job_desc.Name = "mpi_job"
|
||||
// job_desc.Partition="long"
|
||||
// job_desc.Time_limit = uint32(60)
|
||||
// job_desc.Min_nodes =uint32(2)
|
||||
// job_desc.Num_tasks = uint32(2)
|
||||
// job_desc.Std_out = ("./%j-out.txt")
|
||||
// job_desc.Std_err = ("./%j-err.txt")
|
||||
// job_desc.Work_dir = dir
|
||||
//
|
||||
// answer := submit_job.Submit_job(&job_desc)
|
||||
// if(answer.Error_code != 0) {
|
||||
// msg := slurm.GetErrorString(answer.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
// }
|
||||
// fmt.Printf("Submitted Job %d\n", answer.Job_id)
|
||||
//
|
||||
//
|
||||
// job_list := job_info.Get_job(answer.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job := job_list.Job_list[0]
|
||||
//
|
||||
// fmt.Printf("job %d is %s\n",answer.Job_id, job.Job_stateS)
|
||||
// state := job.Job_stateS
|
||||
// for state == "Pending" || state == "Running" {
|
||||
// time.Sleep(2 * time.Second)
|
||||
// job_list = job_info.Get_job(answer.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job = job_list.Job_list[0]
|
||||
//
|
||||
// state = job.Job_stateS
|
||||
//
|
||||
// fmt.Printf("job %d is %s\n",answer.Job_id, job.Job_stateS)
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
// fmt.Printf("Total runtime Job %d: %s\n",job.Job_id, job_info.Get_job_runtime(job).String() )
|
||||
//
|
||||
//}
|
|
@ -1,162 +0,0 @@
|
|||
package main
|
||||
|
||||
//import "slurm/submitjob"
|
||||
//import "slurm"
|
||||
//import "os/user"
|
||||
//import "os"
|
||||
//import "strconv"
|
||||
//import "fmt"
|
||||
//import "os/exec"
|
||||
//import "path/filepath"
|
||||
//import "slurm/jobinfo"
|
||||
//import "time"
|
||||
//
|
||||
//
|
||||
//func fileExists(filename string) bool {
|
||||
// info, err := os.Stat(filename)
|
||||
// if os.IsNotExist(err) {
|
||||
// return false
|
||||
// }
|
||||
// return !info.IsDir()
|
||||
//}
|
||||
//func build_container(file_name,container_name string){
|
||||
//
|
||||
// cmd := exec.Command("sudo", "/usr/local/bin/singularity", "build",container_name, file_name)
|
||||
// fmt.Print("Now build new container")
|
||||
// fmt.Printf("%s\n", cmd.String())
|
||||
// stdoutStderr, err := cmd.CombinedOutput()
|
||||
// if err != nil {
|
||||
// fmt.Printf("error in creating container %s \n", err)
|
||||
//
|
||||
// fmt.Printf("%s\n", stdoutStderr)
|
||||
//// return
|
||||
// }
|
||||
// fmt.Printf("%s\n", stdoutStderr)
|
||||
//}
|
||||
//
|
||||
//func main(){
|
||||
// job_desc := submit_job.Job_descriptor{}
|
||||
//
|
||||
// dir, _ := os.Getwd()
|
||||
// container := filepath.Join(dir, "openmp_container.img")
|
||||
// definition := filepath.Join(dir, "openmp_container.def")
|
||||
// if !fileExists(container){
|
||||
// build_container(definition,container)
|
||||
// }
|
||||
//
|
||||
// if !fileExists(container){
|
||||
// return
|
||||
// }
|
||||
// /* use Cmd to create our script */
|
||||
//
|
||||
// job_desc.Script = "#!/bin/bash\n export PATH=$PATH:/usr/local/bin\n hostname \n"
|
||||
// job_desc.Script+= "export OMP_NUM_THREADS=$SLURM_JOB_CPUS_PER_NODE\n"
|
||||
// cmd := exec.Command( "/usr/local/bin/singularity", "exec",container, "/opt/openmp_example" )
|
||||
//
|
||||
// job_desc.Script+= cmd.String()
|
||||
// fmt.Printf("cmd %s\n", job_desc.Script)
|
||||
// user, _:= user.Current()
|
||||
// userid , _ := strconv.Atoi(user.Uid)
|
||||
// job_desc.User_id= uint32(userid)
|
||||
// groupid , _ := strconv.Atoi(user.Gid)
|
||||
//
|
||||
// job_desc.Group_id= uint32(groupid)
|
||||
// job_desc.Name = "test_job"
|
||||
// job_desc.Partition="long"
|
||||
// job_desc.Time_limit = uint32(60)
|
||||
// job_desc.Min_nodes =uint32(1)
|
||||
// job_desc.Num_tasks = uint32(1)
|
||||
//
|
||||
// job_desc.Cpus_per_task = uint16(2)
|
||||
// job_desc.Std_out = ("./%j-out.txt")
|
||||
// job_desc.Std_err = ("./%j-err.txt")
|
||||
// job_desc.Work_dir = dir
|
||||
//
|
||||
// answer := submit_job.Submit_job(&job_desc)
|
||||
// if(answer.Error_code != 0) {
|
||||
// msg := slurm.GetErrorString(answer.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
// }
|
||||
// fmt.Printf("Submitted Job %d\n", answer.Job_id)
|
||||
//
|
||||
// /*Now, we submit the same jon again, ut with some oversubsciption */
|
||||
// job_desc.Script = "#!/bin/bash\n export PATH=$PATH:/usr/local/bin\n hostname \n"
|
||||
// job_desc.Script+= "export OMP_NUM_THREADS=4\n"
|
||||
//
|
||||
// job_desc.Script+= cmd.String()
|
||||
// fmt.Printf("cmd %s\n", job_desc.Script)
|
||||
// answer2 := submit_job.Submit_job(&job_desc)
|
||||
// if(answer2.Error_code != 0) {
|
||||
// msg := slurm.GetErrorString(answer.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
// }
|
||||
// fmt.Printf("Submitted Job %d\n", answer2.Job_id)
|
||||
//
|
||||
//
|
||||
//
|
||||
// job_list := job_info.Get_job(answer.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job := job_list.Job_list[0]
|
||||
//
|
||||
// fmt.Printf("job is %s\n",job.Job_stateS)
|
||||
// state := job.Job_stateS
|
||||
// for state == "Pending" || state == "Running" {
|
||||
// time.Sleep(2 * time.Second)
|
||||
// job_list = job_info.Get_job(answer.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job = job_list.Job_list[0]
|
||||
//
|
||||
// state = job.Job_stateS
|
||||
//
|
||||
// fmt.Printf("job is %s\n",job.Job_stateS)
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
// fmt.Printf("Total runtime first job %s\n",job_info.Get_job_runtime(job).String() )
|
||||
// /*wait for second job */
|
||||
// job_list = job_info.Get_job(answer2.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job = job_list.Job_list[0]
|
||||
//
|
||||
// fmt.Printf("job is %s\n",job.Job_stateS)
|
||||
// state = job.Job_stateS
|
||||
// for state == "Pending" || state == "Running" {
|
||||
// time.Sleep(2 * time.Second)
|
||||
// job_list = job_info.Get_job(answer2.Job_id)
|
||||
// if job_list.Error_code != 0 {
|
||||
// msg := slurm.GetErrorString(job_list.Error_code)
|
||||
// fmt.Printf("Error: %s\n" ,msg)
|
||||
// return
|
||||
//
|
||||
// }
|
||||
// job = job_list.Job_list[0]
|
||||
//
|
||||
// state = job.Job_stateS
|
||||
//
|
||||
// fmt.Printf("job is %s\n",job.Job_stateS)
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
// fmt.Printf("Total runtime second job %s\n",job_info.Get_job_runtime(job).String() )
|
||||
//
|
||||
//}
|
|
@ -1,30 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_slurm/cgo_tianhe/src/slurm"
|
||||
submit_job "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_slurm/cgo_tianhe/src/slurm/submitjob"
|
||||
)
|
||||
import "os"
|
||||
import "strconv"
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 4 {
|
||||
fmt.Printf("Synthax specify JobID, qos and partition \n")
|
||||
return
|
||||
}
|
||||
var ops submit_job.Update_job_options
|
||||
id, err := strconv.Atoi(os.Args[1])
|
||||
if err != nil {
|
||||
fmt.Printf("Invalid job id (no int) %s\n", os.Args[1])
|
||||
return
|
||||
}
|
||||
|
||||
ops.Qos = os.Args[2]
|
||||
ops.Partition = os.Args[3]
|
||||
|
||||
err2 := submit_job.Update_job(ops, uint32(id))
|
||||
if err2 != uint32(0) {
|
||||
fmt.Printf("error %s \n", slurm.GetErrorString(err2))
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue