Difference between revisions of "Rocky R Prime"
From NIMBioS
(9 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 58: | Line 88: | ||
== Running the Prime Number example == | == Running the Prime Number example == | ||
=== Uploading the code === | === Uploading the code === | ||
The simple way to see this code is to clone the github repository: | |||
<pre> | |||
[[ -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 | |||
</pre> | |||
Sanity check: | |||
<pre> | |||
cat BLAH | |||
</pre> | |||
=== Submitting the script === | === Submitting the script === | ||
<pre> | |||
sbatch R-prime.srun | |||
</pre> | |||
=== Looking at the results === | === Looking at the results === | ||
Check the job queue, wait for job completion | |||
<pre> | |||
squeue | |||
</pre> | |||
Check log file: | |||
<pre> | |||
ls -l R_prime_*.out | |||
# just look at the latest output log | |||
cat $( ls -t R_prime_*.out | head -n 1) | |||
</pre> | |||
Check results file: | |||
<pre> | |||
# Quick hash check verifying prime number sets are identical | |||
md5sum $( ls -t R_prime_*.txt | head -n 3) | |||
</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)