       print("The solver gave up, message: \(error.localizedDescription)")
     }
   }
+
+  suite.benchmark(
+    "sphere2500, chordal initialization",
+    settings: Iterations(1), TimeUnit(.ms)
+  ) {
+    _ = ChordalInitialization.GetInitializations(
+      graph: sphere2500Dataset.graph, ids: sphere2500Dataset.variableId)
+  }
+
+  let sphere2500DatasetChordal = try! G2OReader.G2OFactorGraph(
+    g2oFile3D: sphere2500URL, chordal: true)
+
+  suite.benchmark(
+    "sphere2500, chordal graph, 1 LM step, 200 CGLS steps",
+    settings: Iterations(1), TimeUnit(.ms)
+  ) {
+    var val = sphere2500DatasetChordal.initialGuess
+    var graph = sphere2500DatasetChordal.graph
+    
+    graph.store(PriorFactor(TypedID(0), Pose3()))
+    
+    var optimizer = LM()
+    optimizer.verbosity = .SUMMARY
+    optimizer.max_iteration = 1
+    optimizer.max_inner_iteration = 200
+    
+    do {
+      try optimizer.optimize(graph: graph, initial: &val)
+    } catch let error {
+      print("The solver gave up, message: \(error.localizedDescription)")
+    }
+  }
 }

    }
  }
  
  var sphere2500Dataset =  try! G2OReader.G2OFactorGraph(g2oFile3D: try! cachedDataset("sphere2500.g2o"))
  // Uses `FactorGraph` on the sphere2500 dataset.
  // The solvers are configured to run for a constant number of *LM steps*, except when the LM solver is
  // unable to progress even with maximum lambda.

    var val = sphere2500Dataset.initialGuess
    var graph = sphere2500Dataset.graph
    
    graph.store(PriorFactor(TypedID(0), Pose3()))
    
    var optimizer = LM()
    optimizer.verbosity = .SUMMARY
