// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void InitializeData::readFilterParameters(AbstractFilterParametersReader* reader, int index) { reader->openFilterGroup(this, index); setCellAttributeMatrixPaths( reader->readDataArrayPathVector("CellAttributeMatrixPaths", getCellAttributeMatrixPaths() ) ); setXMin( reader->readValue("XMin", getXMin()) ); setYMin( reader->readValue("YMin", getYMin()) ); setZMin( reader->readValue("ZMin", getZMin()) ); setXMax( reader->readValue("XMax", getXMax()) ); setYMax( reader->readValue("YMax", getYMax()) ); setZMax( reader->readValue("ZMax", getZMax()) ); setInitType(reader->readValue("InitType", getInitType())); setInitValue(reader->readValue("InitValue", getInitValue())); setInitRange(reader->readPairOfDoubles("InitRange", getInitRange())); reader->closeFilterGroup(); }
void startMethod() { // Старт с заданным начальным распределением (см далее) и количеством // потоков K // Начальное распределение может быть задано в двух вариантах (нужно // реализовать оба): // а)файл в формате CSV (https://ru.wikipedia.org/wiki/CSV) // б)задаются лишь размеры NxM, поле генерируется случайным образом int choice = getInitType(); if (choice == 1) { if (getCSVTable() == 1) { getTable(); } cout << "Here's your initial table:" << endl; drawTable(init_table); } else if (choice == 2) { getTable(); cerr << "Here's your initial table:" << endl; drawTable(init_table); } else { cerr << "Wrong choice while starting..." << endl; } int count = world_size - 1; int integral = N / count; int last = N / count + N % count; // cout << "integral: " << integral << endl; // cout << "last: " << last << endl; if (N < count) { cerr << "Too many processes:)" << endl; exit(0); } MPI_Bcast(&M, 1, MPI_INT, MPI_ROOT, intercomm); //processes 1 .. count - 2 int work_N; for (int i = 1; i < count - 1; ++i) { work_N = integral + 2; MPI_Send(&work_N, 1, MPI_INT, i, data_tag, intercomm); MPI_Send(init_table[(i - 1) * integral], work_N * M, MPI_INT, i, data_tag, intercomm); } //process 0 work_N = integral + 1; MPI_Send(&work_N, 1, MPI_INT, 0, data_tag, intercomm); MPI_Send(init_table[0], work_N * M, MPI_INT, 0, data_tag, intercomm); //process count - 1 work_N = last + 1; MPI_Send(&work_N, 1, MPI_INT, count - 1, data_tag, intercomm); MPI_Send(init_table[N - last - 1], work_N * M, MPI_INT, count - 1, data_tag, intercomm); }