← Back to team overview

yade-users team mailing list archive

Re: [Question #693017]: How to accelerate Yade's poromechanical coupling

 

Question #693017 on Yade changed:
https://answers.launchpad.net/yade/+question/693017

Huang peilun posted a new comment:
Thanks Robert, your comments help me a lot.

I now understand the matrix factorization reuse, multithreaded
factorization and GPU accelerated techniques. I still have some problems
about the parallel task management technique.

In the python scripts that your mentioned, I think the parallel task
management technique is implemented through the following code:

#######################################################################
O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_CundallStrack()],label="iloop"
	),
	FlowEngine(multithread=1,dead=1,label="flow",ompThreads=10),
	GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
	triax,
	#VTKRecorder(Key=identifier,dead=1, label='vtkRec', iterPeriod=100,initRun=True,fileName=(outputDir+'/vtkFiles/out-'),recorders=['spheres','facets','boxes']),
	newton
]

#Some of the original code is omitted here

if setEnginesParallel:

	O.engines=[ParallelEngine([flow,[O.engines[0],O.engines[1],O.engines[2],O.engines[4]]]),
		O.engines[5],
		O.engines[6]
	]

	triax = O.engines[1]
	newton = O.engines[2]

O.engines[0].slaves[1][0].ompThreads=O.engines[0].slaves[1][1].ompThreads=O.engines[0].slaves[1][2].ompThreads=O.engines[0].slaves[1][3].ompThreads=5

	flow.ompThreads=4
#######################################################################

I think based on the above code, FlowEngine runs before the
ForceResetter() which is now the O.engines[0].slaves[1][0]. However, in
this case, the fluid force cannot be applied to the sphere particles.
Did I get this right?

Besides, I noticed that the parallelism in Yade has 3 levels. According
to my understanding, by using the -j/--thread option, one can implement
parallelism inside Engines and parallelism between Computation,
interaction (python, GUI) and rendering. Parallelism inside multiple
engine groups can only be implemented by ParallelEngine. Did I get it
right?

I'm not sure if I should open a new question.

Thanks
Peilun

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.