我正在使用BSP库来制作并行程序。有些人我声明了一些
std::vector<size_t> segmentPrimes
在每个核心上并在程序运行时填充它们。然后我想在核心0(第一个核心)上的一个长向量中聚合所有这些向量。但是,由于某些原因,这不起作用。
bsp_put
由于某种原因,命令在这里无法正常运行,或者我搞砸了。这是我的问题的简单MWE
#include <vector>
#include <iostream>
extern "C" {
#include <mcbsp.h>
}
using namespace std;
int main(){
bsp_begin(4); // start parallel part with 4 cores
vector<size_t> segmentPrimes;
unsigned long core = bsp_pid(); // gives id number of the current core
for (int i = 0; i < 10; i++)
segmentPrimes.push_back(i + 10*core); // each vector initialized to something illustrative
if (core == 0)
segmentPrimes.resize(4*10,0); // make the vector in core 0 larger
bsp_push_reg(&segmentPrimes,segmentPrimes.size()*sizeof(size_t)); // register the vectors
bsp_sync();
for (int i = 1; i < 4; i++){
if (core == i) // each core sends their vector to part of the vector in core 0
bsp_put(0,&segmentPrimes,&segmentPrimes,(i*10)*sizeof(size_t),10*sizeof(size_t));
bsp_sync();
}
if (core == 0) // print the resulting vector on core 0
for (int i = 0; i < segmentPrimes.size(); i++)
cout << segmentPrimes[i];
bsp_end(); // finish parallel part
return 0;
}
任何人都可以确定问题所在吗?我没有得到任何错误消息,但输出如下
0123456789000000000000000000000000000000
虽然数字应该不断增加。提前谢谢!
编辑:顺便说一下,我用命令编译g++ FILENAME.cpp -L../bsp/lib -lmcbsp1.2.0 -lpthread
EDIT。对于那些感兴趣的人,工作核心
#include <vector>
#include <iostream>
extern "C" {
#include <mcbsp.h>
}
using namespace std;
int main(){
bsp_begin(4); // start parallel part with 4 cores
vector<size_t> segmentPrimes;
unsigned long core = bsp_pid(); // gives id number of the current core
for (int i = 0; i < 10; i++)
segmentPrimes.push_back(i + 10*core); // each vector initialized to something illustrative
if (core == 0)
segmentPrimes.resize(4*10,0); // make the vector in core 0 larger
bsp_push_reg(&(segmentPrimes[0]),segmentPrimes.size()*sizeof(size_t)); // register the vectors
bsp_sync();
for (int i = 1; i < 4; i++){
if (core == i) // each core sends their vector to part of the vector in core 0
bsp_put(0,&(segmentPrimes[0]),&(segmentPrimes[0]),(i*10)*sizeof(size_t),10*sizeof(size_t));
bsp_sync();
}
if (core == 0) // print the resulting vector on core 0
for (int i = 0; i < segmentPrimes.size(); i++)
cout << segmentPrimes[i] << "\t";
bsp_end(); // finish parallel part
return 0;
}
答案 0 :(得分:1)
C ++中的向量不像数组那样。在内部,它们有一个指向数据所在位置的指针。所以,发送这个:
bsp_put(0,&segmentPrimes,&segmentPrimes,(i*10)*sizeof(size_t),10*sizeof(size_t));
无法发送数据。就像发送指针一样,但不是它的内容。
改为使用数组。
如果你被某种方式强迫使用Vector,你可以: