|
[Sponsors] | |||||
particles parallelization transfere cloud move |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
|
|
|
#1 |
|
Senior Member
Join Date: Dec 2009
Posts: 112
Rep Power: 18 ![]() |
Hi All,
i ran into a huge problem and i need help! I am doing a LES-PDF method using MC particles and the particles carry a lot of information (each particle has about 35 doubles which are transfered via stream and not reinitiated by a preinitialization list). The paralellization is REALLY bad! Using 48 cores - one board, quadsocket, xeon cpus - the time is spend as follows (318087 LES cells, 1556621 particles ): - 99.4 % of the time is used for particles(rest for LES) - The particle move takes 96.7 % of the particle time - and the transfer takes 94 % of that time so essentially the computer is only bussy moving particles. The routine consuming all the resources (in myCloud.move() ) is Code:
while ( true ) <- what the heck is that deathloop any ways !?
....
....
..
if (!Pstream::parRun())
{
break;
}
// Allocate transfer buffers
PstreamBuffers pBufs(Pstream::nonBlocking);
// Stream into send buffers
forAll(particleTransferLists, i)
{
if (particleTransferLists[i].size())
{
UOPstream particleStream
(
neighbourProcs[i],
pBufs
);
particleStream
<< patchIndexTransferLists[i]
<< particleTransferLists[i];
}
}
// Set up transfers when in non-blocking mode. Returns sizes (in bytes)
// to be sent/received.
labelListList allNTrans(Pstream::nProcs());
pBufs.finishedSends(allNTrans);
bool transfered = false;
forAll(allNTrans, i)
{
forAll(allNTrans[i], j)
{
if (allNTrans[i][j])
{
transfered = true;
break;
}
}
}
if (!transfered)
{
break;
}
// Retrieve from receive buffers
forAll(neighbourProcs, i)
{
label neighbProci = neighbourProcs[i];
label nRec = allNTrans[neighbProci][Pstream::myProcNo()];
if (nRec)
{
UIPstream particleStream(neighbProci, pBufs);
labelList receivePatchIndex(particleStream);
IDLList<myHardBallParticle> newParticles
(
particleStream,
//typename myHardBallParticle::iNew(polyMesh_)
myHardBallParticle::iNew(*this)
);
label pI = 0;
forAllIter(myIncompressibleCloud, newParticles, newpIter)
{
myHardBallParticle& newp = newpIter();
label patchI = procPatches[receivePatchIndex[pI++]];
newp.correctAfterParallelTransfer(patchI, td);
addParticle(newParticles.remove(&newp));
}
}
) I would appreciate any ideas or comments!!! |
|
|
|
|
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| how to determine the number of particles injected. | welch | FLUENT | 2 | January 18, 2024 05:08 |
| UDF for deleting particles in DPM | imanmirzaii | Fluent UDF and Scheme Programming | 12 | November 25, 2020 20:27 |
| trying to simulate two-phase jet flow with particles in surface injection | ajkratos | FLUENT | 5 | March 3, 2015 22:33 |
| Straight through cyclone with particles | rogerhoffmann | CFX | 1 | May 21, 2012 19:42 |
| particles model | ati_ros61 | FLOW-3D | 3 | December 6, 2009 17:03 |