Форум программистов, компьютерный форум CyberForum.ru

Передача в MPI vector<char*> - C++

Восстановить пароль Регистрация
 
Gutsonok
0 / 0 / 0
Регистрация: 02.01.2016
Сообщений: 6
08.05.2016, 12:02     Передача в MPI vector<char*> #1
Пишу программу на MPI. И возникли сложности. Имеется массив слов и его нужно передать между процессами. Сначала у меня был vector<string>, но так как в MPI нету такого типа пришлось заменить его на vector<char*>. Я его передаю и возникает ошибка при обращении к элементу. Я передаю так MPI_Send(&words[0], countForMPI, MPI_CHAR, i, type, MPI_COMM_WORLD).
Подскажите пожалуйста как правильно передать vector<char*>.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2016, 12:02     Передача в MPI vector<char*>
Посмотрите здесь:

std::vector<char**> C++
vector<char> to char* C++
C++ Инициализация vector<char>
C++ Запихнуть в vector<int>, char?
Измените структуру CStash чтобы данные хранились в объекте типа vector<char> C++
C++ Запись в vector<vector<char>>
Выводятся дополнительные странные символы из vector<unsigned char> C++
C++ Unsigned char to vector
Vector<unsigned char> в int C++
C++ Как вместо char* использовать vector<string>?
C++ Передача vector с i-го элемента
Как выделить числа double из vector<char> C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gng
609 / 455 / 122
Регистрация: 08.09.2013
Сообщений: 1,167
08.05.2016, 15:57     Передача в MPI vector<char*> #2
Цитата Сообщение от Gutsonok Посмотреть сообщение
Я его передаю и возникает ошибка при обращении к элементу.
Минимальный пример с листингом ошибки будет?
Цитата Сообщение от Gutsonok Посмотреть сообщение
Подскажите пожалуйста как правильно передать vector<char*>
Либо поэлементно, либо не использовать vector.
Gutsonok
0 / 0 / 0
Регистрация: 02.01.2016
Сообщений: 6
08.05.2016, 16:41  [ТС]     Передача в MPI vector<char*> #3
Цитата Сообщение от gng Посмотреть сообщение
Минимальный пример с листингом ошибки будет?
Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "mpi.h"
#include<iostream>
#include<string>
#include<fstream> 
#include<algorithm> 
#include<map>
#include<ctime>
#include<math.h>
#include<vector>
 
using namespace std;
 
int main(int argc, char **argv )
{
   setlocale (LC_ALL,"");
   unsigned int start_time =  clock();
   int  i, rank, size, type = 99;
   string data, tmp="";
   long count=0;
   double starttime, endtime;    
   char text[150];
   int countForMPI;
   vector<char*> words;   
   words.resize(1000000);
 
   //здесь массив words заполняется     
 
   MPI_Status status;
 
   MPI_Init(&argc, &argv);
   MPI_Comm_size(MPI_COMM_WORLD, &size);   
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   starttime = MPI_Wtime();
   double cfm = (double)count/double(size-1);
   countForMPI = ceil(cfm);   
   countArr.resize(size);
   if (rank == 0)
  {       
      //рассылаем слова по процессам          
      for (i = 1; i < size-1; i++)
      {              
         MPI_Send(&words[(i-1)*countForMPI], countForMPI, MPI_CHAR, i, type, MPI_COMM_WORLD);        
      }   
      if (count-countForMPI*(size-2)!=0)
      {             
        MPI_Send(&words[(size-2)*countForMPI], count-countForMPI*(size-2), MPI_CHAR, size-1, type, MPI_COMM_WORLD);
      }  
  } 
  else
   {       
       vector<char*> wordsMPI;
       wordsMPI.resize(countForMPI);
        map<string, int> dict;  
        MPI_Recv(&wordsMPI.front(), countForMPI, MPI_CHAR, 0, type, MPI_COMM_WORLD, &status);               
        cout<<wordsMPI[0]<<"-rank-"<<rank<<endl;        
   }
  
  MPI_Finalize();
  return 0;
}
вот на этой строчке вылетает ошибка - cout<<wordsMPI[0]<<"-rank-"<<rank<<endl;
Запускаю вот таким батником "C:\Program Files (x86)\MPICH2\bin\mpiexec.exe" -n 4 -localonly Chastota.exe > out.txt
PAUSE
Просто вылетает окно прекращена работа программы.
gng
609 / 455 / 122
Регистрация: 08.09.2013
Сообщений: 1,167
08.05.2016, 17:52     Передача в MPI vector<char*> #4
Буфера передачи и приема должны указывать на выделенный непрерывный участок памяти. Если хотите вектор, передавайте по одной строке и принимайте в заранее подготовленный массив нужного размера.
Gutsonok
0 / 0 / 0
Регистрация: 02.01.2016
Сообщений: 6
08.05.2016, 18:54  [ТС]     Передача в MPI vector<char*> #5
Цитата Сообщение от gng Посмотреть сообщение
Если хотите вектор, передавайте по одной строке и принимайте в заранее подготовленный массив нужного размера.
А это не сильно медленно?
gng
609 / 455 / 122
Регистрация: 08.09.2013
Сообщений: 1,167
08.05.2016, 20:41     Передача в MPI vector<char*> #6
Цитата Сообщение от Gutsonok Посмотреть сообщение
А это не сильно медленно?
В каких-то случаях да, значительно.
Есть более традиционный способ - вовсе отказаться от векторов и передавать кусок текста нужного размера.
Yandex
Объявления
08.05.2016, 20:41     Передача в MPI vector<char*>
Ответ Создать тему
Опции темы

Текущее время: 12:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru