c++ - 多线程效率

标签 c++ multithreading performance simulation

假设我有这样的代码

for(i = 0; i < i_max; i++)
  for(j = 0; j < j_max; j++)
     // do something

我想通过使用不同的线程来做到这一点(假设//do something 任务彼此独立,例如考虑 montecarlo 模拟)。我的问题是:为每个 i 值创建一个线程是否一定比为每个 j 值创建一个线程更好?像这样

for(i = 0; i < i_max; i++)
  create_thread(j_max);

另外:合适的线程数是多少?我应该只创建 i_max 线程,还是使用信号量,其中 k < i_max 线程在任何给定时间同时运行。

谢谢,

最佳答案

分配工作量的最佳方式取决于工作量。

广义上 - 对于可并行的工作负载,使用 OpenMP;对于异构工作负载,使用线程池。如果可以,请避免管理自己的线程。

蒙特卡洛模拟应该是真正并行代码而不是线程池的一个很好的候选者。

顺便说一下 - 如果您使用的是 Visual C++,Visual C++ v10 中有一个有趣的新 Concurrency Runtime正是针对这类问题。这有点类似于添加到 .Net Framework 4 以简化多核/多 CPU 代码实现的任务并行库。

关于c++ - 多线程效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4432968/

相关文章:

c++ - OpenCL中逐行矩阵运算的实现

c++ - 无法在 Linux 中使用自定义头文件编译 C++ 程序

c - 关于用多线程实现 sleep 理发师时的同步

Python Pika - 消费者进入线程

java - 当线程崩溃时到底会发生什么?

iphone - 是否可以在touchesBegan : gets called?之后立即拉取触摸点

c++ - 控制台应用程序返回一个奇怪的值

c++ - 未找到 Xcode 的 cmath

python - 为什么 numpy 本身就是 'slow'?

r - 使用 for 循环创建新变量的效率更高