38 parallel_for(std::size_t begin, std::size_t end, F fn) {
39 std::atomic<std::size_t> idx(begin);
40 int num_cpus = std::thread::hardware_concurrency();
41 std::vector<std::future<void>> futures(num_cpus);
43 for (
int cpu = 0; cpu != num_cpus; ++cpu) {
44 futures[cpu] = std::async(std::launch::async, [&idx, end, &fn]() {
46 std::size_t i = idx++;
53 for (
int cpu = 0; cpu != num_cpus; ++cpu) {
60 parallel_for(
int threads, F fn) {
61 int num_cpus = threads == 0 ? std::thread::hardware_concurrency() : threads;
62 std::vector<std::future<void>> futures(num_cpus);
64 for (
int cpu = 0; cpu != num_cpus; ++cpu) {
65 futures[cpu] = std::async(std::launch::async, fn, cpu, num_cpus);
67 for (
int cpu = 0; cpu != num_cpus; ++cpu) {