message: This is the version with a unique per-thread cnn_scorer (and underlying
  objects). It appears to give entirely consistent results across runs,
  which the shared object version still doesn't.
diff: @@ -63,6 +63,16 @@ struct parallel_mc_aux
  void operator()(parallel_mc_task& t) const
  {
  + non_cache_cnn* cnn = dynamic_cast<non_cache_cnn*>(ig);
  + if (cnn) {
  + CNNScorer cnn_scorer(t.m.settings->cnnopts, t.m);
  + const precalculate* p = cnn->get_precalculate();
  + szv_grid_cache gridcache(t.m, p->cutoff_sqr());
  + non_cache_cnn new_cnn(gridcache, cnn->get_grid_dims(),
  + p, cnn->getSlope(), cnn_scorer);
  + (*mc)(t.m, t.out, *p, new_cnn, *corner1, *corner2, pg, t.generator, *user_grid);
  + }
  + else
  (*mc)(t.m, t.out, *p, *ig, *corner1, *corner2, pg, t.generator, *user_grid);
  }
  };
  