The serial kernel completes the magnetic update before beginning the electric update. These are the two spatial loops inside each time step:
for (size_t k = 0; k < width - 1; k++) { Hy[k] = Ch1[k] * Hy[k] + Ch2[k] * (Ez[k + 1] - Ez[k]); } for (size_t k = 1; k < width; k++) { Ez[k] = Ce1[k] * Ez[k] + Ce2[k] * (Hy[k] - Hy[k - 1]); }
The magnetic loop skips the last $H_y$ element; the electric loop skips Ez[0]. After both loops, sources are applied and the step counter advances. Ordinary execution order supplies the phase ordering without thread barriers.
The benchmark uses this kernel as the baseline for speedup. OpenMP with one thread is a different configuration because it still executes parallel-region and synchronization machinery.
Source: fdtd_ez_kernels.c.