Skip to content
Snippets Groups Projects
Commit 4a71241b authored by Jean-Matthieu Etancelin's avatar Jean-Matthieu Etancelin
Browse files

New TG Examples for CPU/GPU desynchronize MPI/OpenCL transfers.

parent 2fa95a48
No related branches found
No related tags found
No related merge requests found
...@@ -9,7 +9,7 @@ All parameters are set and defined in python module dataTG. ...@@ -9,7 +9,7 @@ All parameters are set and defined in python module dataTG.
import parmepy as pp import parmepy as pp
from parmepy.f2py import fftw2py from parmepy.f2py import fftw2py
import math as m import numpy as np
from parmepy.fields.continuous import Field from parmepy.fields.continuous import Field
from parmepy.mpi.topology import Cartesian from parmepy.mpi.topology import Cartesian
from parmepy.operator.advection import Advection from parmepy.operator.advection import Advection
...@@ -22,12 +22,11 @@ from parmepy.operator.monitors.printer import Printer ...@@ -22,12 +22,11 @@ from parmepy.operator.monitors.printer import Printer
from parmepy.operator.monitors.energy_enstrophy import Energy_enstrophy from parmepy.operator.monitors.energy_enstrophy import Energy_enstrophy
from dataTG import dim, nb, NBGHOSTS, ADVECTION_METHOD, VISCOSITY, \ from dataTG import dim, nb, NBGHOSTS, ADVECTION_METHOD, VISCOSITY, \
OUTPUT_FREQ, FILENAME, simu OUTPUT_FREQ, FILENAME, simu
import numpy as np
## ----------- A 3d problem ----------- ## ----------- A 3d problem -----------
print " ========= Start Navier-Stokes 3D (Taylor Green benchmark) =========" print " ========= Start Navier-Stokes 3D (Taylor Green benchmark) ========="
## pi constant ## pi constant
pi = m.pi pi = np.pi
cos = np.cos cos = np.cos
sin = np.sin sin = np.sin
## Domain ## Domain
...@@ -96,15 +95,18 @@ poisson = Poisson(velo, vorti, ...@@ -96,15 +95,18 @@ poisson = Poisson(velo, vorti,
# Bridges between the different topologies in order to # Bridges between the different topologies in order to
# redistribute data. # redistribute data.
# 1 -Advection to stretching # 1 -Advection to stretching
distrAdvStr = Redistribute([vorti, velo], advec, stretch) distrAdvStr_vorti = Redistribute([vorti], advec, stretch)
distrStrA = Redistribute([vorti, velo], stretch, advec) distrPoiStr_velo = Redistribute([velo], poisson, stretch)
# 2 - Stretching to Poisson/Diffusion # 2 - Stretching to Poisson/Diffusion
distrStrPoiss = Redistribute([vorti, velo], stretch, poisson) distrStrDiff = Redistribute([vorti], stretch, diffusion)
## Define the problem to solve ## Define the problem to solve
pb = NSProblem(operators=[advec, distrAdvStr, stretch, pb = NSProblem(operators=[distrPoiStr_velo, advec, # Redistribute wile advec
distrStrPoiss, distrAdvStr_vorti,
diffusion, poisson], stretch,
distrStrDiff,
diffusion,
poisson],
simulation=simu, dumpFreq=-1) simulation=simu, dumpFreq=-1)
## Setting solver to Problem (only operators for computational tasks) ## Setting solver to Problem (only operators for computational tasks)
......
...@@ -17,10 +17,9 @@ from parmepy.operator.stretching import Stretching ...@@ -17,10 +17,9 @@ from parmepy.operator.stretching import Stretching
from parmepy.operator.poisson import Poisson from parmepy.operator.poisson import Poisson
from parmepy.operator.diffusion import Diffusion from parmepy.operator.diffusion import Diffusion
from parmepy.operator.redistribute import Redistribute from parmepy.operator.redistribute import Redistribute
from parmepy.gpu import PARMES_DOUBLE_GPU as gpu_prec
from parmepy.problem.navier_stokes import NSProblem from parmepy.problem.navier_stokes import NSProblem
from parmepy.operator.monitors.energy_enstrophy import Energy_enstrophy from parmepy.operator.monitors.energy_enstrophy import Energy_enstrophy
from dataTG import dim, nb, NBGHOSTS, VISCOSITY, \ from dataTG import dim, nb, NBGHOSTS, VISCOSITY, FILENAME, \
OUTPUT_FREQ, simu OUTPUT_FREQ, simu
from parmepy.methods_keys import TimeIntegrator, Interpolation, Remesh,\ from parmepy.methods_keys import TimeIntegrator, Interpolation, Remesh,\
Support, Splitting Support, Splitting
...@@ -83,8 +82,7 @@ advec = Advection(velo, vorti, ...@@ -83,8 +82,7 @@ advec = Advection(velo, vorti,
Interpolation: Linear, Interpolation: Linear,
Remesh: rmsh, Remesh: rmsh,
Support: 'gpu_1k', Support: 'gpu_1k',
Splitting: 'o2'}, Splitting: 'o2_FullHalf'},
precision=gpu_prec,
) )
advec.discretize() advec.discretize()
...@@ -112,7 +110,7 @@ vorti_advec_stretch = Redistribute([vorti], advec, stretch) ...@@ -112,7 +110,7 @@ vorti_advec_stretch = Redistribute([vorti], advec, stretch)
# 1.2 -Streching input is already uptodate on cpu from Poisson output # 1.2 -Streching input is already uptodate on cpu from Poisson output
velo_poisson_stretch = Redistribute([velo], poisson, stretch) velo_poisson_stretch = Redistribute([velo], poisson, stretch)
# 2 -Stretching to Poisson/Diffusion # 2 -Stretching to Poisson/Diffusion
vorti_stretch_poisson = Redistribute([vorti, velo], stretch, poisson) vorti_stretch_diffusion = Redistribute([vorti], stretch, diffusion)
# 3 -Advection input to GPU from Poisson/Diffusion # 3 -Advection input to GPU from Poisson/Diffusion
vorti_diff_advec = Redistribute([vorti], diffusion, advec) vorti_diff_advec = Redistribute([vorti], diffusion, advec)
velo_diff_advec_X = Redistribute([velo], poisson, advec.advecDir[0], velo_diff_advec_X = Redistribute([velo], poisson, advec.advecDir[0],
...@@ -123,15 +121,18 @@ velo_diff_advec_Z = Redistribute([velo], poisson, advec.advecDir[2], ...@@ -123,15 +121,18 @@ velo_diff_advec_Z = Redistribute([velo], poisson, advec.advecDir[2],
component=2) component=2)
## Define the problem to solve ## Define the problem to solve
pb = NSProblem(operators=[velo_poisson_stretch, advec, pb = NSProblem(operators=[velo_poisson_stretch,
advec,
vorti_advec_stretch, vorti_advec_stretch,
stretch, stretch,
vorti_stretch_poisson, vorti_stretch_diffusion,
diffusion, diffusion,
vorti_diff_advec, vorti_diff_advec,
poisson, poisson,
velo_diff_advec_X, velo_diff_advec_Y, velo_diff_advec_X,
velo_diff_advec_Z], velo_diff_advec_Y,
velo_diff_advec_Z
],
simulation=simu, dumpFreq=-1) simulation=simu, dumpFreq=-1)
## Setting solver to Problem (only operators for computational tasks) ## Setting solver to Problem (only operators for computational tasks)
...@@ -142,7 +143,7 @@ energy = Energy_enstrophy(velo, vorti, ...@@ -142,7 +143,7 @@ energy = Energy_enstrophy(velo, vorti,
topo=topofft, topo=topofft,
viscosity=VISCOSITY, viscosity=VISCOSITY,
frequency=OUTPUT_FREQ, frequency=OUTPUT_FREQ,
prefix='./TG/energy_GPU.dat') prefix=FILENAME)
## printer = Printer(variables=[velo, vorti], ## printer = Printer(variables=[velo, vorti],
## topo=topo, ## topo=topo,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment