Difference between revisions of "Rocky R Prime"
From NIMBioS
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== Prime Number example code == | == Prime Number example code == | ||
Line 6: | Line 4: | ||
<pre> | <pre> | ||
library(foreach) | library(foreach) | ||
registerDoSEQ() | |||
known_primes <- | |||
c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31) | |||
search_space <- 34:999 | |||
found_primes <- foreach(check_i= search_space, .combine=c ) %do% { | |||
if(any((check_i %% known_primes )==0 ) ) return(numeric()) | |||
return(c(check_i)) | |||
} | |||
write.table(sort(c(known_primes, found_primes)), file="R_prime_serial.txt", | |||
row.names = F,col.names = F) | |||
</pre> | </pre> | ||
Line 22: | Line 28: | ||
registerDoParallel(40) | registerDoParallel(40) | ||
known_primes <- | |||
c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31) | |||
search_space <- 34:999 | |||
found_primes <- foreach(check_i= search_space, .combine=c ) %dopar% { | |||
if(any((check_i %% known_primes )==0 ) ) return(numeric()) | |||
return(c(check_i)) | |||
} | |||
write.table(sort(c(known_primes, found_primes)), file="R_prime_parallel.txt", | |||
row.names = F,col.names = F) | |||
</pre> | </pre> | ||
Only check numbers ending in 1, 3, 7 and 9 | Only check numbers ending in 1, 3, 7 and 9 | ||
Line 30: | Line 48: | ||
registerDoParallel(40) | registerDoParallel(40) | ||
known_primes <- | |||
c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31) | |||
search_space <- rep(3:99, each=4)*10 + rep(c(1,3,7,9), 97) | |||
found_primes <- foreach(check_i= search_space, .combine=c ) %dopar% { | |||
if(any((check_i %% known_primes )==0 ) ) return(numeric()) | |||
return(c(check_i)) | |||
} | |||
write.table(sort(c(known_primes, found_primes)), file="R_prime_parallel_fast.txt", | |||
row.names = F,col.names = F) | |||
</pre> | </pre> | ||
Line 63: | Line 93: | ||
[[ -e ~/git ]] || mkdir ~/git # Auto-create git subdirectory | [[ -e ~/git ]] || mkdir ~/git # Auto-create git subdirectory | ||
cd ~/git # switch to git subdirectory | cd ~/git # switch to git subdirectory | ||
[[ -e | [[ -e r-prime-cluster ]] || git clone git@github.com:rocky-cluster/r-prime-cluster.git | ||
cd | cd r-prime-cluster | ||
</pre> | </pre> | ||
Latest revision as of 17:54, 10 April 2023
Prime Number example code
R serial script
library(foreach) registerDoSEQ() known_primes <- c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31) search_space <- 34:999 found_primes <- foreach(check_i= search_space, .combine=c ) %do% { if(any((check_i %% known_primes )==0 ) ) return(numeric()) return(c(check_i)) } write.table(sort(c(known_primes, found_primes)), file="R_prime_serial.txt", row.names = F,col.names = F)
R parallel script
Naive version
library(foreach) library(doParallel) registerDoParallel(40) known_primes <- c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31) search_space <- 34:999 found_primes <- foreach(check_i= search_space, .combine=c ) %dopar% { if(any((check_i %% known_primes )==0 ) ) return(numeric()) return(c(check_i)) } write.table(sort(c(known_primes, found_primes)), file="R_prime_parallel.txt", row.names = F,col.names = F)
Only check numbers ending in 1, 3, 7 and 9
library(foreach) library(doParallel) registerDoParallel(40) known_primes <- c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31) search_space <- rep(3:99, each=4)*10 + rep(c(1,3,7,9), 97) found_primes <- foreach(check_i= search_space, .combine=c ) %dopar% { if(any((check_i %% known_primes )==0 ) ) return(numeric()) return(c(check_i)) } write.table(sort(c(known_primes, found_primes)), file="R_prime_parallel_fast.txt", row.names = F,col.names = F)
Slurm submission script
#!/bin/bash #SBATCH --job-name=R_PRIME ### Job Name #SBATCH --output=R_prime_%j.out ### File in which to store job output #SBATCH --time=00:10:00 ### Wall clock time limit in Days-HH:MM:SS #SBATCH --nodes=1 ### Node count required for the job #SBATCH --ntasks-per-node=1 ### Number of tasks to be launched per Node #SBATCH --mem-per-cpu=2G #SBATCH --cpus-per-task=40 module load R/4.2.1-foss-2022a date R --version time Rscript R_prime_serial.R date time Rscript R_prime_parallel.R date time Rscript R_prime_parallel_fast.R date
Running the Prime Number example
Uploading the code
The simple way to see this code is to clone the github repository:
[[ -e ~/git ]] || mkdir ~/git # Auto-create git subdirectory cd ~/git # switch to git subdirectory [[ -e r-prime-cluster ]] || git clone git@github.com:rocky-cluster/r-prime-cluster.git cd r-prime-cluster
Sanity check:
cat BLAH
Submitting the script
sbatch R-prime.srun
Looking at the results
Check the job queue, wait for job completion
squeue
Check log file:
ls -l R_prime_*.out # just look at the latest output log cat $( ls -t R_prime_*.out | head -n 1)
Check results file:
# Quick hash check verifying prime number sets are identical md5sum $( ls -t R_prime_*.txt | head -n 3)