Possible Solution

Content

We only show here the benchmark result for -O3.

Benchmark for unmodified code

heim$ gcc -Wall -std=c11 -O3 -o bench_init bench_init.c
heim$ ./bench_init
#    m     n   t (colm)   t (rowm)
   100   100       0.00       0.00 
   200   200       0.00       0.00 
   300   300       0.00       0.00 
   400   400       0.00       0.00 
   500   500       0.00       0.00 
   600   600       0.00       0.00 
   700   700       0.00       0.01 
   800   800       0.00       0.01 
   900   900       0.00       0.01 
  1000  1000       0.00       0.01 
  1100  1100       0.01       0.01 
  1200  1200       0.00       0.02 
  1300  1300       0.00       0.02 
  1400  1400       0.00       0.02 
  1500  1500       0.00       0.02 
  1600  1600       0.01       0.02 
  1700  1700       0.01       0.02 
  1800  1800       0.00       0.02 
  1900  1900       0.01       0.03 
  2000  2000       0.01       0.03 
  2100  2100       0.01       0.04 
  2200  2200       0.02       0.04 
  2300  2300       0.02       0.05 
  2400  2400       0.01       0.05 
  2500  2500       0.02       0.06 
  2600  2600       0.02       0.07 
  2700  2700       0.02       0.07 
  2800  2800       0.01       0.09 
  2900  2900       0.02       0.09 
  3000  3000       0.02       0.10 
  3100  3100       0.03       0.10 
  3200  3200       0.02       0.11 
  3300  3300       0.03       0.12 
  3400  3400       0.03       0.13 
  3500  3500       0.03       0.14 
  3600  3600       0.03       0.14 
  3700  3700       0.04       0.16 
  3800  3800       0.04       0.17 
  3900  3900       0.04       0.18 
  4000  4000       0.03       0.18 
  4100  4100       0.04       0.20 
  4200  4200       0.04       0.20 
  4300  4300       0.04       0.21 
  4400  4400       0.04       0.23 
  4500  4500       0.05       0.24 
  4600  4600       0.05       0.25 
  4700  4700       0.05       0.26 
  4800  4800       0.05       0.28 
  4900  4900       0.06       0.29 
  5000  5000       0.05       0.29 
  5100  5100       0.05       0.31 
  5200  5200       0.06       0.32 
  5300  5300       0.07       0.34 
  5400  5400       0.06       0.35 
  5500  5500       0.06       0.36 
  5600  5600       0.07       0.38 
  5700  5700       0.08       0.39 
  5800  5800       0.07       0.41 
  5900  5900       0.07       0.41 
  6000  6000       0.08       0.43 
  6100  6100       0.08       0.45 
  6200  6200       0.09       0.47 
  6300  6300       0.09       0.48 
  6400  6400       0.09       0.53 
  6500  6500       0.10       0.51 
  6600  6600       0.09       0.54 
  6700  6700       0.10       0.55 
  6800  6800       0.11       0.57 
  6900  6900       0.11       0.59 
  7000  7000       0.11       0.61 
heim$ 

Benchmark for modified code

heim$ gcc -Wall -std=c11 -O3 -o bench_init_sol bench_init_sol.c
heim$ ./bench_init_sol
#    m     n   t (colm)   t (rowm)
   100   100       0.00       0.00 
   200   200       0.00       0.00 
   300   300       0.00       0.00 
   400   400       0.00       0.00 
   500   500       0.00       0.00 
   600   600       0.00       0.00 
   700   700       0.00       0.01 
   800   800       0.00       0.00 
   900   900       0.00       0.01 
  1000  1000       0.00       0.00 
  1100  1100       0.00       0.01 
  1200  1200       0.00       0.01 
  1300  1300       0.00       0.00 
  1400  1400       0.01       0.01 
  1500  1500       0.00       0.00 
  1600  1600       0.01       0.00 
  1700  1700       0.01       0.00 
  1800  1800       0.01       0.00 
  1900  1900       0.02       0.00 
  2000  2000       0.01       0.01 
  2100  2100       0.01       0.01 
  2200  2200       0.01       0.01 
  2300  2300       0.01       0.02 
  2400  2400       0.01       0.01 
  2500  2500       0.01       0.02 
  2600  2600       0.02       0.02 
  2700  2700       0.01       0.01 
  2800  2800       0.01       0.02 
  2900  2900       0.02       0.02 
  3000  3000       0.02       0.03 
  3100  3100       0.02       0.03 
  3200  3200       0.02       0.02 
  3300  3300       0.02       0.03 
  3400  3400       0.03       0.03 
  3500  3500       0.03       0.04 
  3600  3600       0.03       0.03 
  3700  3700       0.03       0.04 
  3800  3800       0.03       0.03 
  3900  3900       0.03       0.04 
  4000  4000       0.03       0.04 
  4100  4100       0.04       0.04 
  4200  4200       0.04       0.05 
  4300  4300       0.04       0.04 
  4400  4400       0.04       0.05 
  4500  4500       0.04       0.05 
  4600  4600       0.04       0.05 
  4700  4700       0.05       0.06 
  4800  4800       0.04       0.06 
  4900  4900       0.05       0.06 
  5000  5000       0.06       0.07 
  5100  5100       0.06       0.06 
  5200  5200       0.06       0.06 
  5300  5300       0.07       0.07 
  5400  5400       0.06       0.07 
  5500  5500       0.07       0.07 
  5600  5600       0.07       0.08 
  5700  5700       0.07       0.08 
  5800  5800       0.08       0.08 
  5900  5900       0.08       0.09 
  6000  6000       0.08       0.08 
  6100  6100       0.09       0.09 
  6200  6200       0.09       0.10 
  6300  6300       0.09       0.10 
  6400  6400       0.09       0.10 
  6500  6500       0.10       0.10 
  6600  6600       0.09       0.11 
  6700  6700       0.10       0.10 
  6800  6800       0.10       0.12 
  6900  6900       0.10       0.12 
  7000  7000       0.11       0.12 
heim$