You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Right now, MPB calls back to the meep_mpb_eps Meep for every pixel of the mode profile to find the ε profile for the eigenmode solver, and this performs a collective communication. This is a problem for scaling, because, you then have huge numbers of small collective calls, one per pixel in the eigenmode region.
Should be straightforward to fix. Probably something like:
Call set_maxwell_dielectric with a dummy function (just returns 1 everywhere), which caches the inv(ε) value for owned chunks in an array and zero for nonowned chunks. (i.e. pass parallel=false to get_chi1inv).
Call sum_to_allonce on this cache array to synchronize the values.
Call set_maxwell_dielectric again, this time returned the cached values from each process.
Hence, only a single collective call is required in the second step.
The text was updated successfully, but these errors were encountered:
Right now, MPB calls back to the
meep_mpb_eps
Meep for every pixel of the mode profile to find the ε profile for the eigenmode solver, and this performs a collective communication. This is a problem for scaling, because, you then have huge numbers of small collective calls, one per pixel in the eigenmode region.Should be straightforward to fix. Probably something like:
Call
set_maxwell_dielectric
with a dummy function (just returns 1 everywhere), which caches the inv(ε) value for owned chunks in an array and zero for nonowned chunks. (i.e. passparallel=false
toget_chi1inv
).Call
sum_to_all
once on this cache array to synchronize the values.Call
set_maxwell_dielectric
again, this time returned the cached values from each process.Hence, only a single collective call is required in the second step.
The text was updated successfully, but these errors were encountered: