@dzw05 请问老师,您这边清楚interface并行边界如何处理吗?我想从openfoam中拿到完整矩阵数据,但是并行的话只能拿到各个线程对应的子矩阵,如何知道并行边界的关系将其组装成一个完整的矩阵
w352405196
帖子
-
openfoam中cyclic周期性边界的问题 -
openfoam中cyclic周期性边界的问题@Micro 请问老师,您这边搞清楚interface并行边界如何处理的了吗
-
Interface到底是做什么的呢?@ZY-GONG 好的,多谢老师,辛苦了
-
Interface到底是做什么的呢?@ZY-GONG 多谢老师,这部分内容非常关键,写的非常好。我还有个问题,并行耦合边界条件是如何处理的?也就是说不同线程之间如何交互?怎么知道线程0和线程1之间相邻网格的对应关系
-
openfoam中cyclic周期性边界的问题@Tong 老师,您好。我想请教您一下,interface是针对周期边界、多求解域(如旋转机械)、并行边界这类复杂边界的吗,对于常规边界条件有影响吗,我理解的是边界条件的离散系数已经添加到lduMatrix中的对角线系数和源项中了。在测试中发现initMatrixInterfaces和updateMatrixInterfaces对于X和B都没有影响啊
-
Interface到底是做什么的呢?新手请教各位老师,AX=B,边界条件的影响不是应该加到稀疏矩阵A的对角系数和源项B中了吗,initMatrixInterfaces和updateMatrixInterfaces是什么作用呢,针对特定边界条件吗?汽车的算例,我测试X和B都没有发生改变
initMatrixInterfaces ( bouCoeffsCmpt, interfaces, psiCmpt, sourceCmpt, cmpt ); updateMatrixInterfaces ( bouCoeffsCmpt, interfaces, psiCmpt, sourceCmpt, cmpt ); void Foam::lduMatrix::Amul ( scalarField& Apsi, const tmp<scalarField>& tpsi, const FieldField<Field, scalar>& interfaceBouCoeffs, const lduInterfaceFieldPtrsList& interfaces, const direction cmpt ) const { scalar* __restrict__ ApsiPtr = Apsi.begin(); const scalarField& psi = tpsi(); const scalar* const __restrict__ psiPtr = psi.begin(); const scalar* const __restrict__ diagPtr = diag().begin(); const label* const __restrict__ uPtr = lduAddr().upperAddr().begin(); const label* const __restrict__ lPtr = lduAddr().lowerAddr().begin(); const scalar* const __restrict__ upperPtr = upper().begin(); const scalar* const __restrict__ lowerPtr = lower().begin(); initMatrixInterfaces ( interfaceBouCoeffs, interfaces, psi, Apsi, cmpt ); const label nCells = diag().size(); for (label cell=0; cell<nCells; cell++) { ApsiPtr[cell] = diagPtr[cell]*psiPtr[cell]; } const label nFaces = upper().size(); for (label face=0; face<nFaces; face++) { ApsiPtr[uPtr[face]] += lowerPtr[face]*psiPtr[lPtr[face]]; ApsiPtr[lPtr[face]] += upperPtr[face]*psiPtr[uPtr[face]]; } // Update interface interfaces updateMatrixInterfaces ( interfaceBouCoeffs, interfaces, psi, Apsi, cmpt ); tpsi.clear(); }
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@bestucan 好的,多谢老师解惑,我再好好找找原因
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@bestucan 老师,该主板型号如下所示。我这边测试,在大网格量线程数较多时如32核跨cpu计算效率比单cpu更高,但在核数较少如8核的情况下单cpu更好。感觉跟正常理解不太一样,按理说单cpu计算性能更高才对
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@bestucan 多谢老师回复。这台工作站两个cpu,跨cpu线程计算的,不知道跟上传下载流量有关没,还是因为我这边是远程网络连接导致的。
我在指定跨cpu的线程计算时,如8和16线程,cpu很大概率上会有线程闲置或者无法满负荷运行,极少的情况下会100%运行,该情况下效率比较高;如果指定的是单cpu的线程时都是满负荷运行,但是在核数较多时效率反而较低,比如说32核。
如果是内存带宽受限的话,会体现在那个数据上呢,多谢老师解惑
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@bestucan 多谢老师,安装您说的这个软件监测了一下,用的2000万网格测得,也没看懂哪里受限了。
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@李东岳 好的,多谢李老师
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@李东岳 李老师,我工作站的配置如下,内存会对性能有影响吗
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@李东岳 了解了,多谢李老师解惑
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@李东岳 但是我这个测试时间只是高斯赛德尔求解矩阵方程的时间,理论上是完全并行的,这种情况下这样的效率也是可以接受的吗
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢学到了,李老师,这我还是第一次知道。我一直以为单机多核的并行效率不会低于80%呢。
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢是的,ubuntu22.04系统。小白理解单机多核的加速比不是应该比集群更高吗,而且64核只有不到20%也太低了吧
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢我用SPMP和openfoam都进行了并行测试,SPMP使用的openmp。
测试算例:openfoam自带的2200万网格的汽车算例
测试统计时间为迭代128步的高斯赛德尔计算时间
配置:cpu为64核128线程,内存256g。
执行命令:mpirun -np 32 foamRun -parallel
测试结果如下图所示:
并行效率很低,在哪里有问题呢 -
Openfoam矩阵求解,segreated和coupled好的,多谢李老师,我去看看学习下foam-extend,看看能不能输出一个这样的系数矩阵
-
Openfoam矩阵求解,segreated和coupled在OpenFoam中离散后对矩阵进行求解时有两种方式,默认为segreated,另外一种为coupled。在使用coupled时,只有速度矢量有用。而Openfoam中解算器求解顺序规定了分别求解密度、速度、温度、压力、湍流粘性等,是不是意味着Openfoam中没有真正意义上的耦合求解器,即求解速度和压力等耦合成的一个大稀疏矩阵