0

我想在同一时间运行一个具有不同参数的命令,N 次就像一个 for 循环,其中所有循环同时运行

我知道通过在这样的特定行的末尾使用 & 我们可以同时运行它们,但我想要一种运行 N 次的方式,可以变体

./a &
./a &
./a &

我可以在特定的核心上运行每一个吗?或者我应该像那样做一些openMP和C吗?如果是,我如何使用 C++ 运行命令?

#paragma omp parallel
for(int i=0;i<n ; i++ )
{
///  ??? how can I run these command by c++
}

但即使它有效,这个解决方案也只有在 (n< #core) :(

4

2 回答 2

0

也许你可以使用 std::thread ...

#include <iostream>
#include <thread>
#include <string>

void runcmd(std::string param)
{
  // something like system(param.c_str());
}

int main() 
{
  std::thread* threadarray[10];
  for (int i=0; i<10; ++i)
      threadarray[i] = new std::thread(runcmd,"./a"); 

  for (int i=0; i<10; ++i) {
      threadarray[i]->join;
      delete threadarray[i];
  }

  return 0;
}

我认为您可以使用 sched_setaffinity 指定核心 id。

看: http ://www.thinkingparallel.com/2006/08/18/more-information-on-pthread_setaffinity_np-and-sched_setaffinity/

于 2013-08-27T10:29:26.937 回答
0
N=3
eval params=({1..$N})
for param in ${params[*]}; do ./a $param& done
于 2014-08-26T07:24:09.273 回答