C++ 在组装数据时,对每个单元使用parallel

C++ 在组装数据时,对每个单元使用parallel,c++,multithreading,matrix,sparse-matrix,C++,Multithreading,Matrix,Sparse Matrix,我写了一个有限元程序,将小矩阵组合成一个巨大的稀疏矩阵。它是多线程的(使用std::thread)。根据线程的数量,每个线程负责计算一些小矩阵并将结果写入稀疏矩阵。线程1写入索引(0,0)直到(i-1,i-1)例如,线程2写入索引从(i,i)到(2*i-1,2*i-1)等等,其中i是根据使用的线程数预先计算的 我想对std::for_每个和std::execution::par做同样的处理。但是,我读到我无法选择使用的线程数。有没有办法告诉我std::for_each在哪里写结果,也就是稀疏矩阵

我写了一个有限元程序,将小矩阵组合成一个巨大的稀疏矩阵。它是多线程的(使用
std::thread
)。根据线程的数量,每个线程负责计算一些小矩阵并将结果写入稀疏矩阵。线程1写入索引
(0,0)
直到
(i-1,i-1)
例如,线程2写入索引从
(i,i)
(2*i-1,2*i-1)
等等,其中
i
是根据使用的线程数预先计算的


我想对
std::for_每个
std::execution::par做同样的处理。但是,我读到我无法选择使用的线程数。有没有办法告诉我std::for_each
在哪里写结果,也就是稀疏矩阵的精确位置?

为什么不使用而不是自制的线程池?@VictorGubin嗯,我没有,不知道为什么。不过我想问一下每个人的情况。是单线程的,在它里面。因为你可以选择你的
std::size\u t i=0;j=0;[i,j](…){++i,++j…}
lambda的跳线,您将把它们分别放入std::for_。与std::for_each不同,
#pragma omp parallel for simd for(…)
为您提供并行执行。@据我所知,std::for_each(std::execution::par,…)将使用多个线程执行,其中线程数根据操作系统提供的信息确定。此外,如果我不知道将要使用的线程总数,我无法计算I。