Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2×2 MMI benchmark

Benchmarks Luminescent against Tidy3D and Lumerical FDTD using the 2×2 MMI from Liu & Poon, arXiv:2506.16665, Sec. 3.3. The device is GDSFactory’s generic mmi2x2_with_sbend: 500 nm × 220 nm Si arms tapered to 700 nm before the multimode region, with S-bends at all four ports. SiO2 cladding is above and below. Si uses a lossless Lorentzian fit to the paper’s Palik model (n = 3.4729 at 1550 nm); SiO2 is constant n = 1.4425. The domain is the device plus 1 µm margins: 34 × 7 × 2.22 µm³ (the paper uses 34 × 7.5 × 4 µm³). TE0 enters o1 (lower left) at 1550 nm with a λ/12 source bandwidth (the paper uses 20 nm). The energy shutoff is 1e-4 (1e-3 for nres ≤ 10; the paper uses 1e-5). We report the cross-port (o3) transmission, the excess loss, the solve time, and the peak memory against resolution.

Paper values (Tidy3D 2.7.7 on cloud GPUs, Lumerical 2025 R1 on a 24-core CPU; transmission digitized from Fig. 12a):

nresTidy3D cross TLumerical cross TTidy3D timeLumerical timeLumerical memory
635.8 %37.6 %11 s98 s0.32 GB
1046.1 %45.9 %34 s259 s0.82 GB
1547.9 %48.3 %45 s905 s2.15 GB
2048.5 %48.7 %57 s2182 s4.48 GB
2548.9 %48.9 %150 s4813 s8.10 GB

Setup

lumi backend: ~/Luminescent/bin/lumi

Simulate

<Figure size 800x600 with 1 Axes>
<Figure size 640x480 with 2 Axes>
using simulation folder runs/mmi_nres6
========================================
backend using simulation folder runs/mmi_nres6
========================================
setting up simulation...
processing geometry bodies...
generating voxels...
voxelation: 10.125711 seconds (463.82 M allocations: 18.691 GiB, 25.67% gc time, 139.25% compilation time)
Yee mode λ=0.9935: neff 2.486
Yee mode λ=1.0: neff 2.4736
Yee mode λ=1.0065: neff 2.4611
making sources o1 ...
making monitors o1 o2 o3 o4 ...
========================================
run: runs/mmi_nres6
processor: GPU
cpu threads: 48

nres: 6.0
courant: 0.9
subpixel_smoothing: 1
  
boundaries: [:PML :PML; :PML :PML; :PML :PML]

sources
   o1: -13, -2.25, 0 

monitors
   o1: -12, -2.25, 0 
   o2: -12, 2.25, 0 
   o3: 20, 2.25, 0 
   o4: 20, -2.25, 0 

original size: (460, 91, 26)
padded size: (511, 115, 42)
cell count: 2,468,130

step size: 29.0 steps/period
source duration: 3.93 periods

max time: 1,000 periods
max steps: 29,000
max load: 71,575,770,000 cell-steps
energy decay threshold: 0.001

========================================
running simulation...
accumulating dft field...
period 10, decay: 0.96, 1.49 seconds/period, 48.09 Mcells/s
period 20, decay: 0.95, 0.011 seconds/period, 6336.38 Mcells/s
period 30, decay: 0.94, 0.008 seconds/period, 9257.59 Mcells/s
period 40, decay: 0.92, 0.009 seconds/period, 7595.29 Mcells/s
period 50, decay: 0.92, 0.007 seconds/period, 9553.36 Mcells/s
period 60, decay: 0.91, 0.007 seconds/period, 9551.96 Mcells/s
period 70, decay: 0.88, 0.009 seconds/period, 7789.12 Mcells/s
period 80, decay: 0.78, 0.008 seconds/period, 9499.76 Mcells/s
period 90, decay: 0.73, 0.009 seconds/period, 7916.88 Mcells/s
period 100, decay: 0.54, 0.007 seconds/period, 9550.17 Mcells/s
period 110, decay: 0.086, 0.009 seconds/period, 8059.26 Mcells/s
period 120, decay: 0.013, 0.008 seconds/period, 9514.36 Mcells/s
period 130, decay: 0.007, 0.007 seconds/period, 9553.76 Mcells/s
period 140, decay: 0.006, 0.009 seconds/period, 7581.86 Mcells/s
period 150, decay: 0.005, 0.008 seconds/period, 9535.82 Mcells/s
period 160, decay: 0.004, 0.009 seconds/period, 7857.87 Mcells/s
period 170, decay: 0.004, 0.008 seconds/period, 9527.8 Mcells/s
period 180, decay: 0.003, 0.009 seconds/period, 7729.32 Mcells/s
period 190, decay: 0.002, 0.008 seconds/period, 9483.65 Mcells/s
period 198.62 stop on energy decay
8489.5 Mcells/s
simulation completed.
{'runtime': 126.59987044334412, 'gpu_GB': 1.2353515625, 'host_GB': 2.4572982788085938}
<Figure size 800x600 with 1 Axes>
<Figure size 640x480 with 2 Axes>
using simulation folder runs/mmi_nres10
========================================
backend using simulation folder runs/mmi_nres10
========================================
setting up simulation...
processing geometry bodies...
generating voxels...
voxelation: 26.456843 seconds (1.34 G allocations: 51.541 GiB, 33.84% gc time, 54.07% compilation time)
Yee mode λ=0.9935: neff 2.4648
Yee mode λ=1.0: neff 2.4531
Yee mode λ=1.0065: neff 2.4414
making sources o1 ...
making monitors o1 o2 o3 o4 ...
========================================
run: runs/mmi_nres10
processor: GPU
cpu threads: 48

nres: 10.0
courant: 0.9
subpixel_smoothing: 1
  
boundaries: [:PML :PML; :PML :PML; :PML :PML]

sources
   o1: -13, -2.25, 0 

monitors
   o1: -12, -2.25, 0 
   o2: -12, 2.25, 0 
   o3: 20, 2.25, 0 
   o4: 20, -2.25, 0 

original size: (764, 150, 41)
padded size: (847, 188, 68)
cell count: 10,828,048

step size: 49.0 steps/period
source duration: 3.94 periods

max time: 1,000 periods
max steps: 49,000
max load: 530,574,352,000 cell-steps
energy decay threshold: 0.001

========================================
running simulation...
accumulating dft field...
period 10, decay: 0.97, 1.52 seconds/period, 348.74 Mcells/s
period 20, decay: 0.97, 0.063 seconds/period, 8482.85 Mcells/s
period 30, decay: 0.97, 0.061 seconds/period, 8715.58 Mcells/s
period 40, decay: 0.95, 0.058 seconds/period, 9194.97 Mcells/s
period 50, decay: 0.95, 0.056 seconds/period, 9395.75 Mcells/s
period 60, decay: 0.94, 0.056 seconds/period, 9398.1 Mcells/s
period 70, decay: 0.88, 0.057 seconds/period, 9381.88 Mcells/s
period 80, decay: 0.79, 0.056 seconds/period, 9402.88 Mcells/s
period 90, decay: 0.75, 0.056 seconds/period, 9453.09 Mcells/s
period 100, decay: 0.068, 0.056 seconds/period, 9465.8 Mcells/s
period 110, decay: 0.013, 0.056 seconds/period, 9461.36 Mcells/s
period 120, decay: 0.008, 0.058 seconds/period, 9112.88 Mcells/s
period 130, decay: 0.003, 0.057 seconds/period, 9330.39 Mcells/s
period 140, decay: 0.002, 0.057 seconds/period, 9270.53 Mcells/s
period 150, decay: 0.002, 0.057 seconds/period, 9294.58 Mcells/s
period 160, decay: 0.002, 0.057 seconds/period, 9293.24 Mcells/s
period 170, decay: 0.002, 0.057 seconds/period, 9274.17 Mcells/s
period 180, decay: 0.002, 0.057 seconds/period, 9293.57 Mcells/s
period 185.47 stop on energy decay
9241.58 Mcells/s
simulation completed.
{'runtime': 154.33912324905396, 'gpu_GB': 3.0791015625, 'host_GB': 3.585926055908203}
<Figure size 800x600 with 1 Axes>
<Figure size 640x480 with 2 Axes>
using simulation folder runs/mmi_nres15
========================================
backend using simulation folder runs/mmi_nres15
========================================
setting up simulation...
processing geometry bodies...
generating voxels...
voxelation: 41.084999 seconds (3.27 G allocations: 122.792 GiB, 31.09% gc time, 45.66% compilation time)
Yee mode λ=0.9935: neff 2.4591
Yee mode λ=1.0: neff 2.4477
Yee mode λ=1.0065: neff 2.4362
making sources o1 ...
making monitors o1 o2 o3 o4 ...
========================================
run: runs/mmi_nres15
processor: GPU
cpu threads: 48

nres: 15.0
courant: 0.9
subpixel_smoothing: 1
  
boundaries: [:PML :PML; :PML :PML; :PML :PML]

sources
   o1: -13, -2.25, 0 

monitors
   o1: -12, -2.25, 0 
   o2: -12, 2.25, 0 
   o3: 20, 2.25, 0 
   o4: 20, -2.25, 0 

original size: (1144, 221, 59)
padded size: (1269, 275, 96)
cell count: 33,501,600

step size: 72.0 steps/period
source duration: 3.93 periods

max time: 1,000 periods
max steps: 72,000
max load: 2,412,115,200,000 cell-steps
energy decay threshold: 0.0001

========================================
running simulation...
accumulating dft field...
period 10, decay: 0.97, 1.7 seconds/period, 1420.95 Mcells/s
period 20, decay: 0.96, 0.327 seconds/period, 7371.5 Mcells/s
period 30, decay: 0.96, 0.324 seconds/period, 7450.92 Mcells/s
period 40, decay: 0.95, 0.305 seconds/period, 7900.88 Mcells/s
period 50, decay: 0.95, 0.306 seconds/period, 7873.52 Mcells/s
period 60, decay: 0.94, 0.306 seconds/period, 7882.27 Mcells/s
period 70, decay: 0.86, 0.304 seconds/period, 7928.49 Mcells/s
period 80, decay: 0.79, 0.304 seconds/period, 7928.53 Mcells/s
period 90, decay: 0.75, 0.306 seconds/period, 7876.55 Mcells/s
period 100, decay: 0.046, 0.306 seconds/period, 7880.9 Mcells/s
period 110, decay: 0.011, 0.304 seconds/period, 7929.97 Mcells/s
period 120, decay: 0.003, 0.304 seconds/period, 7927.91 Mcells/s
period 130, decay: 0.0, 0.306 seconds/period, 7878.0 Mcells/s
period 140, decay: 0.0, 0.304 seconds/period, 7929.28 Mcells/s
period 144 stop on energy decay
7826.55 Mcells/s
simulation completed.
{'runtime': 205.23535656929016, 'gpu_GB': 9.7978515625, 'host_GB': 4.730339050292969}

Results

loading solution from runs/mmi_nres6
may take a minute if simulation folder is remotely mounted
loading solution from runs/mmi_nres10
may take a minute if simulation folder is remotely mounted
loading solution from runs/mmi_nres15
may take a minute if simulation folder is remotely mounted
nres  cross T  through T  excess loss  runtime  GPU mem  host mem
   6    35.3 %     47.0 %     0.843 dB    127 s   1.24 GB   2.46 GB
  10    45.7 %     49.2 %     0.227 dB    154 s   3.08 GB   3.59 GB
  15    47.6 %     48.4 %     0.177 dB    205 s   9.80 GB   4.73 GB
<Figure size 1000x400 with 2 Axes>

Fig. 12a comparison

<Figure size 500x350 with 1 Axes>

Movie