Commit befor trying to convert particle array to linked list to improve
performance.
This commit is contained in:
parent
05f5adcfe1
commit
60f38a2d95
8 changed files with 160 additions and 12 deletions
54
runs/cylFlow/compCPUTime.gp
Normal file
54
runs/cylFlow/compCPUTime.gp
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
|
||||||
|
set terminal qt enhanced 1 size 1600, 1000 font "Times ,10"
|
||||||
|
|
||||||
|
set style line 1 pt 4 lc rgb "#B50427" #Squares red
|
||||||
|
set style line 2 pt 6 lc rgb "#3B4CC1" #Circles blue
|
||||||
|
set style line 3 pt 1 lc rgb "#2CA02C" #Crosses green
|
||||||
|
set style line 4 pt 2 lc rgb "#FE7F0E" #Exes orange
|
||||||
|
set style line 5 pt 8 lc rgb "#D6696B" #Triangles light red
|
||||||
|
set style line 10 lt 1 lw 2.0 lc rgb "black" #Black solid line
|
||||||
|
|
||||||
|
folder1 = "2020-09-27_10.46.31/"
|
||||||
|
folder2 = "2020-09-28_10.49.22/"
|
||||||
|
folder3 = "2020-09-30_20.40.04/"
|
||||||
|
folder4 = "2020-10-01_08.53.50/"
|
||||||
|
|
||||||
|
set key box opaque
|
||||||
|
set pointsize 1.5
|
||||||
|
|
||||||
|
set ylabel "Time per particle (ms)"
|
||||||
|
set xrange [0:8000]
|
||||||
|
set xlabel "Iteration"
|
||||||
|
|
||||||
|
|
||||||
|
set multiplot layout 2,3
|
||||||
|
set title "Total"
|
||||||
|
plot folder1."cpuTime.dat" u 1:(1e3*$3) t "Step 1" ls 1, \
|
||||||
|
folder2."cpuTime.dat" u 1:(1e3*$3) t "Step 2" ls 2, \
|
||||||
|
folder3."cpuTime.dat" u 1:(1e3*$3) t "Step 3" ls 3, \
|
||||||
|
folder4."cpuTime.dat" u 1:(1e3*$3) t "Step 4" ls 4
|
||||||
|
|
||||||
|
set title "Push"
|
||||||
|
plot folder1."cpuTime.dat" u 1:(1e3*$4) t "Step 1" ls 1, \
|
||||||
|
folder2."cpuTime.dat" u 1:(1e3*$4) t "Step 2" ls 2, \
|
||||||
|
folder3."cpuTime.dat" u 1:(1e3*$4) t "Step 3" ls 3, \
|
||||||
|
folder4."cpuTime.dat" u 1:(1e3*$4) t "Step 4" ls 4
|
||||||
|
|
||||||
|
set title "Reset"
|
||||||
|
plot folder1."cpuTime.dat" u 1:(1e3*$5) t "Step 1" ls 1, \
|
||||||
|
folder2."cpuTime.dat" u 1:(1e3*$5) t "Step 2" ls 2, \
|
||||||
|
folder3."cpuTime.dat" u 1:(1e3*$5) t "Step 3" ls 3, \
|
||||||
|
folder4."cpuTime.dat" u 1:(1e3*$5) t "Step 4" ls 4
|
||||||
|
|
||||||
|
set title "Collisions"
|
||||||
|
plot folder1."cpuTime.dat" u 1:(1e3*$6) t "Step 1" ls 1, \
|
||||||
|
folder2."cpuTime.dat" u 1:(1e3*$6) t "Step 2" ls 2, \
|
||||||
|
folder3."cpuTime.dat" u 1:(1e3*$6) t "Step 3" ls 3, \
|
||||||
|
folder4."cpuTime.dat" u 1:(1e3*$6) t "Step 4" ls 4
|
||||||
|
|
||||||
|
set title "Weighting"
|
||||||
|
plot folder1."cpuTime.dat" u 1:(1e3*$7) t "Step 1" ls 1, \
|
||||||
|
folder2."cpuTime.dat" u 1:(1e3*$7) t "Step 2" ls 2, \
|
||||||
|
folder3."cpuTime.dat" u 1:(1e3*$7) t "Step 3" ls 3, \
|
||||||
|
folder4."cpuTime.dat" u 1:(1e3*$7) t "Step 4" ls 4
|
||||||
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"output": {
|
"output": {
|
||||||
"path": "./runs/cylFlow/",
|
"path": "./runs/cylFlow/",
|
||||||
"trigger": 100,
|
"trigger": 10,
|
||||||
"cpuTime": false,
|
"cpuTime": true,
|
||||||
"numColl": false
|
"numColl": false
|
||||||
},
|
},
|
||||||
"geometry": {
|
"geometry": {
|
||||||
|
|
@ -38,5 +38,10 @@
|
||||||
"collisions": [
|
"collisions": [
|
||||||
{"species_i": "Argon", "species_j": "Argon", "crossSections": ["Ar-Ar_Elastic.dat"]}
|
{"species_i": "Argon", "species_j": "Argon", "crossSections": ["Ar-Ar_Elastic.dat"]}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"parallel": {
|
||||||
|
"OpenMP":{
|
||||||
|
"nThreads": 24
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
49
runs/cylFlow/plotCPUTime.gp
Normal file
49
runs/cylFlow/plotCPUTime.gp
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
reset
|
||||||
|
set terminal qt enhanced 1 size 1800, 400 font "Times ,10"
|
||||||
|
|
||||||
|
set style line 1 pt 4 lc rgb "#B50427" #Squares red
|
||||||
|
set style line 2 pt 6 lc rgb "#3B4CC1" #Circles blue
|
||||||
|
set style line 3 pt 1 lc rgb "#2CA02C" #Crosses green
|
||||||
|
set style line 4 pt 2 lc rgb "#FE7F0E" #Exes orange
|
||||||
|
set style line 5 pt 8 lc rgb "#D6696B" #Triangles light red
|
||||||
|
set style line 10 lt 1 lw 2.0 lc rgb "black" #Black solid line
|
||||||
|
|
||||||
|
set style data histogram
|
||||||
|
set style histogram rowstacked title offset 0,-1
|
||||||
|
set style fill solid border -1
|
||||||
|
set boxwidth 0.50
|
||||||
|
|
||||||
|
set key box opaque
|
||||||
|
|
||||||
|
set yrange [0:100]
|
||||||
|
set ylabel "CPU Time (%)"
|
||||||
|
set xrange [0:]
|
||||||
|
|
||||||
|
|
||||||
|
plot "cpuTime.dat" u ($4/$3*100) t "Push" ls 1, \
|
||||||
|
"" u ($5/$3*100) t "Reset" ls 2, \
|
||||||
|
"" u ($6/$3*100) t "Collisions" ls 3, \
|
||||||
|
"" u ($7/$3*100) t "Weighting" ls 4
|
||||||
|
|
||||||
|
reset
|
||||||
|
set terminal qt enhanced 2 size 800, 600 font "Times ,10"
|
||||||
|
|
||||||
|
set style line 1 pt 4 lc rgb "#B50427" #Squares red
|
||||||
|
set style line 2 pt 6 lc rgb "#3B4CC1" #Circles blue
|
||||||
|
set style line 3 pt 1 lc rgb "#2CA02C" #Crosses green
|
||||||
|
set style line 4 pt 2 lc rgb "#FE7F0E" #Exes orange
|
||||||
|
set style line 5 pt 8 lc rgb "#D6696B" #Triangles light red
|
||||||
|
set style line 10 lt 1 lw 2.0 lc rgb "black" #Black solid line
|
||||||
|
|
||||||
|
set key box opaque
|
||||||
|
set pointsize 1.5
|
||||||
|
|
||||||
|
set ylabel "Time per particle ({/Symbol m}s)"
|
||||||
|
set xrange [0:]
|
||||||
|
set xlabel "Iteration"
|
||||||
|
|
||||||
|
|
||||||
|
plot "cpuTime.dat" u 1:(1e6*$4/$2) t "Push" ls 1, \
|
||||||
|
"" u 1:(1e6*$5/$2) t "Reset" ls 2, \
|
||||||
|
"" u 1:(1e6*$6/$2) t "Collisions" ls 3, \
|
||||||
|
"" u 1:(1e6*$7/$2) t "Weighting" ls 4
|
||||||
|
|
@ -10,17 +10,15 @@ PROGRAM DSMC_Neutrals
|
||||||
USE moduleList
|
USE moduleList
|
||||||
USE moduleOutput
|
USE moduleOutput
|
||||||
USE moduleCaseParam
|
USE moduleCaseParam
|
||||||
|
USE moduleParallel
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
|
||||||
! t = time step; n = number of particle; e = number of element; i = number of inject
|
! t = time step; n = number of particle; e = number of element; i = number of inject
|
||||||
INTEGER:: t, n, e, i
|
INTEGER:: t, n, e, i
|
||||||
CHARACTER(200):: arg1
|
CHARACTER(200):: arg1
|
||||||
CHARACTER(:), ALLOCATABLE:: inputFile
|
CHARACTER(:), ALLOCATABLE:: inputFile
|
||||||
REAL(8), EXTERNAL::omp_get_wtime, omp_get_wtick
|
REAL(8), EXTERNAL::omp_get_wtime
|
||||||
|
|
||||||
!Starts threads for OpenMP parallelization
|
|
||||||
!TODO: make this an input parameter
|
|
||||||
CALL OMP_SET_NUM_THREADS(8)
|
|
||||||
|
|
||||||
!Gets the input file
|
!Gets the input file
|
||||||
CALL getarg(1, arg1)
|
CALL getarg(1, arg1)
|
||||||
|
|
@ -39,6 +37,10 @@ PROGRAM DSMC_Neutrals
|
||||||
PRINT *, "t/tmax: ", t, "/", tmax
|
PRINT *, "t/tmax: ", t, "/", tmax
|
||||||
PRINT *, "Particles: ", n_part_old
|
PRINT *, "Particles: ", n_part_old
|
||||||
|
|
||||||
|
!Starts threads for OpenMP parallelization
|
||||||
|
!TODO: make this an input parameter
|
||||||
|
CALL OMP_SET_NUM_THREADS(openMP%nThreads)
|
||||||
|
|
||||||
!$OMP PARALLEL PRIVATE(t) DEFAULT(SHARED)
|
!$OMP PARALLEL PRIVATE(t) DEFAULT(SHARED)
|
||||||
DO t = 1, tmax
|
DO t = 1, tmax
|
||||||
tStep = omp_get_wtime()
|
tStep = omp_get_wtime()
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ OBJECTS = $(OBJDIR)/$(OUTPUT).o \
|
||||||
$(OBJDIR)/moduleErrors.o $(OBJDIR)/moduleList.o $(OBJDIR)/moduleOutput.o \
|
$(OBJDIR)/moduleErrors.o $(OBJDIR)/moduleList.o $(OBJDIR)/moduleOutput.o \
|
||||||
$(OBJDIR)/moduleMeshCyl.o $(OBJDIR)/moduleMeshCylRead.o $(OBJDIR)/moduleMeshCylBoundary.o \
|
$(OBJDIR)/moduleMeshCyl.o $(OBJDIR)/moduleMeshCylRead.o $(OBJDIR)/moduleMeshCylBoundary.o \
|
||||||
$(OBJDIR)/moduleBoundary.o $(OBJDIR)/moduleCaseParam.o $(OBJDIR)/moduleRefParam.o \
|
$(OBJDIR)/moduleBoundary.o $(OBJDIR)/moduleCaseParam.o $(OBJDIR)/moduleRefParam.o \
|
||||||
$(OBJDIR)/moduleCollisions.o $(OBJDIR)/moduleTable.o
|
$(OBJDIR)/moduleCollisions.o $(OBJDIR)/moduleTable.o $(OBJDIR)/moduleParallel.o
|
||||||
|
|
||||||
|
|
||||||
all: $(OUTPUT)
|
all: $(OUTPUT)
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,15 @@
|
||||||
OBJS = moduleCaseParam.o moduleCompTime.o moduleList.o\
|
OBJS = moduleCaseParam.o moduleCompTime.o moduleList.o\
|
||||||
moduleMesh.o moduleMeshCyl.o moduleMeshCylBoundary.o\
|
moduleMesh.o moduleMeshCyl.o moduleMeshCylBoundary.o\
|
||||||
moduleMeshCylRead.o moduleOutput.o moduleInput.o \
|
moduleMeshCylRead.o moduleOutput.o moduleInput.o \
|
||||||
moduleSolver.o moduleCollisions.o moduleTable.o
|
moduleSolver.o moduleCollisions.o moduleTable.o \
|
||||||
|
moduleParallel.o
|
||||||
|
|
||||||
all: $(OBJS)
|
all: $(OBJS)
|
||||||
|
|
||||||
moduleCollisions.o: moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleMeshCyl.f95
|
moduleCollisions.o: moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleMeshCyl.f95
|
||||||
$(FC) $(FCFLAGS) -c $(subst .o,.f95, $@) -o $(OBJDIR)/$@
|
$(FC) $(FCFLAGS) -c $(subst .o,.f95, $@) -o $(OBJDIR)/$@
|
||||||
|
|
||||||
moduleInput.o: moduleRefParam.o moduleCaseParam.o moduleSolver.o moduleInject.o moduleBoundary.o moduleMesh.o moduleMeshCylRead.o moduleErrors.o moduleSpecies.o moduleInput.f95
|
moduleInput.o: moduleParallel.o moduleRefParam.o moduleCaseParam.o moduleSolver.o moduleInject.o moduleBoundary.o moduleMesh.o moduleMeshCylRead.o moduleErrors.o moduleSpecies.o moduleInput.f95
|
||||||
$(FC) $(FCFLAGS) -c $(subst .o,.f95, $@) -o $(OBJDIR)/$@
|
$(FC) $(FCFLAGS) -c $(subst .o,.f95, $@) -o $(OBJDIR)/$@
|
||||||
|
|
||||||
moduleInject.o: moduleSpecies.o moduleSolver.o moduleMesh.o moduleMeshCyl.o moduleInject.f95
|
moduleInject.o: moduleSpecies.o moduleSolver.o moduleMesh.o moduleMeshCyl.o moduleInject.f95
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,9 @@ MODULE moduleInput
|
||||||
!Read injection of particles
|
!Read injection of particles
|
||||||
CALL readInject(config)
|
CALL readInject(config)
|
||||||
|
|
||||||
|
!Read parallel parameters
|
||||||
|
CALL readParallel(config)
|
||||||
|
|
||||||
END SUBROUTINE readConfig
|
END SUBROUTINE readConfig
|
||||||
|
|
||||||
!Reads the reference parameters
|
!Reads the reference parameters
|
||||||
|
|
@ -325,9 +328,9 @@ MODULE moduleInput
|
||||||
|
|
||||||
TYPE(json_file), INTENT(inout):: config
|
TYPE(json_file), INTENT(inout):: config
|
||||||
INTEGER:: i
|
INTEGER:: i
|
||||||
character(2):: istring
|
CHARACTER(2):: istring
|
||||||
character(:), allocatable:: object
|
CHARACTER(:), ALLOCATABLE:: object
|
||||||
logical:: found
|
LOGICAL:: found
|
||||||
CHARACTER(:), ALLOCATABLE:: speciesName
|
CHARACTER(:), ALLOCATABLE:: speciesName
|
||||||
CHARACTER(:), ALLOCATABLE:: name
|
CHARACTER(:), ALLOCATABLE:: name
|
||||||
REAL(8):: v
|
REAL(8):: v
|
||||||
|
|
@ -366,4 +369,28 @@ MODULE moduleInput
|
||||||
|
|
||||||
END SUBROUTINE readInject
|
END SUBROUTINE readInject
|
||||||
|
|
||||||
|
SUBROUTINE readParallel(config)
|
||||||
|
USE moduleParallel
|
||||||
|
USE moduleErrors
|
||||||
|
USE json_module
|
||||||
|
IMPLICIT NONE
|
||||||
|
|
||||||
|
TYPE(json_file), INTENT(inout):: config
|
||||||
|
CHARACTER(:), ALLOCATABLE:: object
|
||||||
|
LOGICAL:: found
|
||||||
|
|
||||||
|
!Reads OpenMP parameters
|
||||||
|
object = 'parallel.OpenMP'
|
||||||
|
|
||||||
|
CALL config%get(object // '.nThreads', openMP%nThreads, found)
|
||||||
|
|
||||||
|
IF (.NOT. found) THEN
|
||||||
|
openMP%nthreads = 8
|
||||||
|
CALL warningError('No OpenMP configuration detected, using 8 threads as default.')
|
||||||
|
|
||||||
|
END IF
|
||||||
|
|
||||||
|
END SUBROUTINE readParallel
|
||||||
|
|
||||||
|
|
||||||
END MODULE moduleInput
|
END MODULE moduleInput
|
||||||
|
|
|
||||||
10
src/modules/moduleParallel.f95
Normal file
10
src/modules/moduleParallel.f95
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
MODULE moduleParallel
|
||||||
|
|
||||||
|
TYPE openMP_type
|
||||||
|
INTEGER:: nThreads
|
||||||
|
|
||||||
|
END TYPE
|
||||||
|
|
||||||
|
TYPE(openMP_type):: openMP
|
||||||
|
|
||||||
|
END MODULE moduleParallel
|
||||||
Loading…
Add table
Add a link
Reference in a new issue