大家有遇到过并行计算和单核计算结果不同的情况吗?
-
很好奇并行处理的结果与单核计算结果的差异。或者说并行量的大小对计算结果的影响。
对与小的问题,还可以进行互相的考证。但是对于实际的问题,我觉得很少会有人再去比对单核计算的结果。
-
@cfd-china 不知道为什么前两天论坛总是断开连接,给我急坏了!
我现在发现是并行的时候processor之间不交互,问题出现在这里:
if (pimple.firstIter() || moveMeshOuterCorrectors) { scalar timeBeforeMeshUpdate = runTime.elapsedCpuTime(); mesh.update(); if (mesh.changing()) **//Here comes the problem!** { Info<< "Execution time for mesh.update() = " << runTime.elapsedCpuTime() - timeBeforeMeshUpdate << " s" << endl; gh = (g & mesh.C()) - ghRef; ghf = (g & mesh.Cf()) - ghRef; } if (mesh.changing() && correctPhi) { // Calculate absolute flux from the mapped surface velocity phi = mesh.Sf() & Uf; #include "correctPhi.H" // Make the flux relative to the mesh motion fvc::makeRelative(phi, U); mixture.correct(); } if (mesh.changing() && checkMeshCourantNo) { #include "meshCourantNo.H" }
其中第一个mesh.changing的if条件根本没有进去,我也不知道是咋回事,单核计算的时候就完全没问题,并行的时候不更新网格。
-
@random_ran 是有影响的,我看过类似的论文,和分块方式,分块数量都用影响,但是影响应该不大,不大懂并行,不好下结论,但是实际工程或者三维的算例,是根本没法对比的,用单核算不得慢死,和试验值能对上就行了。。。。