【发布时间】:2014-03-13 20:05:23
【问题描述】:
我有代码:
for (int i = 0; i < (int)(kpts.size()); i++) {
perform_operation(kpts1[i], *kpts2[i]);
}
其中kpt1 和kpt2 是std::vector<> 类型。函数perform_operation接受kpt1[i],对其执行操作并将其存储在kpt2[i]中。
看来我应该能够多线程。由于 for 循环的每个循环都是相互独立的,那么我应该能够以与 CPU 内核一样多的进程并行运行,对吧?
我似乎有几个这样的问题有点在回答这个问题,但他们并没有真正了解如何并行化一个简单的 for 循环;而且我不确定是否可以读取相同的kpt1 变量并写入相同的kpt2 变量。
还是我误解了什么? - 这不是可并行化的吗?
如果我能在 C++ 或 C 中找到解决方案,我会很高兴,但现在我被困住了。
【问题讨论】:
-
是的,您可以简单地将其并行化,但请事先考虑一下——您当然不想要数千个线程,但只要您拥有物理内核即可。所以你真的只想对索引空间进行分区。
-
首先想到的是 Boost Threads stackoverflow.com/questions/415994/boost-thread-tutorials
-
C++11 支持标准库中的线程。如果
kpts.size()很大和/或perform_operation()非常昂贵,那么它可能值得并行化。 -
@KerrekSB 我肯定会对
kpts1进行分区,以便最大线程数等于内核数(我仍在决定我将使用哪个 AWS 实例,所以我不知道最大内核数在这一刻)。但是为了争论,假设我想把它分成8进程。我怎么能这样做? -
这里是 C++11 线程的教程solarianprogrammer.com/2011/12/16/cpp-11-thread-tutorial
标签: c++ c multithreading