inline void operator()

in gemmology_fwd.h [39:63]


  inline void operator()(size_t Start, size_t End, size_t Stride, F&& f) {
    const size_t NbIter = (End - Start) / Stride;
    const size_t NbThread = std::min(NbIter, MaxPoolSize);
    const size_t Chunk = (NbIter / NbThread) * Stride;

    size_t Curr = Start, Next = Start;

    for(size_t threadID = 0; threadID < NbThread - 1; ++threadID) {
      Next += Chunk;
      Pool.emplace_back([=]() {
        for(size_t i = Curr; i < Next; i += Stride) {
          f(i);
        };
      });
      Curr = Next;
    }

    for(size_t i = Next; i < End; i += Stride) {
      f(i);
    };
    for(size_t threadID = 0; threadID < Pool.size(); ++threadID) {
      Pool[threadID].join();
    }
    Pool.clear();
  }