# Performance analysis (1D FDTD) **Performance analysis** compares the cost of the same simulation under different execution strategies. The repository's plotting script derives three metrics from the recorded timings: ```python throughput = data["width"] * data["nsteps"] / data["seconds"] / 1e6 speedup = np.ones(len(data)) for width in np.unique(data["width"]): serial = data[(data["accel"] == "none") & (data["width"] == width)] parallel = (data["accel"] == "openmp") & (data["width"] == width) speedup[parallel] = np.median(serial["seconds"]) / data["seconds"][parallel] efficiency = speedup / data["threads"] ``` Throughput reports work per second. Speedup uses the median serial time for the same grid width, while efficiency divides speedup by the number of threads. These calculations assume a consistent numerical workload, including step count. Run [[fdtd-openmp-benchmarking|the benchmark]] across widths and thread counts. Small grids expose synchronization overhead; large working sets can pressure the memory hierarchy. The curves identify changes in performance, while additional profiling is needed to distinguish their causes. Source: [plot_benchmark.py](https://github.com/yanevskiv/fdtd-openmp/blob/main/tools/plot_benchmark.py).