#928: openmp parallelization within Exact broken ------------------------------------+--------------------------------------- Reporter: knarf | Owner: Type: defect | Status: confirmed Priority: minor | Milestone: ET_2012_11 Component: EinsteinToolkit thorn | Version: development version Resolution: | Keywords: ------------------------------------+---------------------------------------
Comment (by rhaas):
I don't know if an atomic would help us. The problem is that we would need to guarantee that first_call is only updated (in memory) after all the other variables have been flushed to memory. Ie the problem is not that threads see an inconsistent first_call but that first_call does not match status of the other saved variables. A flush would seem to have the same problem: we don't know if the compiler might move the first_call setting and flushing to the beginning of the block (OpenMP says nothig about ordering it seems and as far Fortran itself goes I don't know either). The attached patch also contained omp statements for the metrics subdirectory. The only reason I did not drop them is that some of the code inside the if(first_call) sections was CCTK_Equals which can be quite expensive (if eg Exact runs at each timestep) when run for each grid point (or multiple times when derivatives are taken inside Exact).