gpt4 book ai didi

c++ - MPI 和标准输入开销?

转载 作者:行者123 更新时间:2023-11-28 06:10:55 24 4
gpt4 key购买 nike

我正在用 C++ MPI 编写程序,但是当将大文件作为 stdin 传递时我面临的问题是线程没有看到相同的 stdin信息。

更详细地说,我将输入文件列表作为标准输入传递,然后将其存储在 vector<string> 中:

MPI_Init(NULL,NULL);
int CORES, thread;
MPI_Comm_size(MPI_COMM_WORLD,&CORES);
MPI_Comm_rank(MPI_COMM_WORLD,&thread);
stringstream tline;
int count = 0;
for (std::string line; std::getline(std::cin, line);){
tline << line << " ";
count++;
}

vector<string> args(count,"");
for(int i = 0; i < count; i++)
tline >> args[i];

cout << thread << " " << count << endl; //each thread outputs the number of input files it received

我的问题是这会为不同的线程提供不同的数字。例如,在传递一个 10 000 行的文件后,我得到:

5 9464
6 9464
3 9464
4 9464
1 9554
2 9554
0 10000
7 9464

是不是因为一些开销?我怎样才能避免这种情况?

最佳答案

好吧,基本上你的问题是你所有的线程都在消耗来自 cin 的行并且它们在竞争。尽管 cin 为一般的线程安全提供了一些保证,但您并不总是确定会得到什么。检查此线程:How do scanf(), std::cin behave on multithreaded environment?

解决方案:不要使用 CIN?使用文件并让每个线程使用文件句柄自行打开文件。如果你真的想使用 cin 那么让 MPI 的一个线程读取 CIN 并将其广播到其他线程,然后他们可以随心所欲地使用它。

关于c++ - MPI 和标准输入开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31297753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com