0
일부 문자열에 대해 기본 MapReduce 작업을 실행하고 싶습니다.MPI에서 문자열 배열을 분산시키는 방법 C++
- 과정에서 (동등) 내 모든 프로세스에 문자열 목록,
- 배포 : 나는하려면 원하는
- 수집, 사용자 정의 클래스의 객체 (예 :
WordWithFrequency
)에 수신 된 문자열을지도 객체를 생성하고 추가 작업을 위해 프로세스로 다시 보냅니다.
간단한 작업이어야하지만 올바르게 수행 할 수있는 방법을 찾지 못했습니다.
#include <boost/mpi.hpp>
...
int main(int argc, char *argv[]) {
// Initialize the MPI environment.
mpi::environment env(argc, argv);
mpi::communicator world;
vector<string> words = { "foo", "bar", "baz", "..." };
const int wordCount = words.size();
const int wordsPerProcess = wordCount/world.size();
vector<vector<string> > wordsByProcess(world.size(), vector<string>());
for (int j = 0; j < world.size(); ++j) {
for (int k = 0, wordIndex = j * wordsPerProcess + k;
k < wordsPerProcess && wordIndex < wordCount; ++k, ++wordIndex) {
wordsByProcess[j].push_back(words[wordIndex]);
}
}
vector<string> subWords;
mpi::scatter(world, wordsByProcess, subWords, 0);
// subWords is equal to wordsByProcess[world.rank()] here in every process.
분산 :
Process 0 got words:
�R
Process 1 got words:
'new []'보다'std :: vector'와 같은 것을 사용해보십시오. 메모리 관리 문제가 현저하게 줄어들 기 때문에 일상 생활을 현저히 쉽게 만듭니다. – tadman
@tadman 나는 (실제로, 나는 확신한다) 문제는 배열이 아니라'MPI_Scatter'와 함께있다. 나는 여기서 완전히 잘못된 것을하고있다. 그러나 나는 인터넷에서 문자열 산란의 한 가지 예를 찾을 수 없었다. ps. 'std :: vector'는 도움이되지 않았습니다. – smddzcy
이 특별한 경우에 마술처럼 모든 문제를 해결하지는 않지만 메모리 누수를 추적하는 데 낭비하지 않으므로 장기간 유용 할 것입니다. – tadman