Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208

Ввод элементов массива, параллельное программирование

26.03.2018, 16:03. Показов 2553. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Требуется вычислить сумму всех элементов вектора. Я тестирую свою программы на 1-м, 4-х, 8-ми и 12-ти ядрах с числом итераций от 3 до 3 * 10^8. Неужели нужно создавать текстовый файл и заносить в него 3 * 10^8 элементов вектора? Если я буду заполнять с помощью рандома, каждый раз при одном и том же количестве элементов и ядер сумма будет различной. В чём хитрость этого задания? Как правильно заполнять массивы с большим количеством элементов?

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
#include <ctime>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <fstream>
#include <omp.h>
#include <conio.h>
using namespace std;
 
int main() {
    srand(time(NULL));
int n, k, c, sum;
clock_t st, et;
double iv;
sum = 0;
    int A = 1;
    int B = 100;
cout << “Enter N:\n”;
cin >> n;
cout << “Enter number of threads:\n”;
cin >> k;
omp_set_dynamic(0);
omp_set_num_threads(k);
vector <int> myvector;
st = clock();
ofstream fout("file1.txt");
#pragma omp parallel for {
    for(int i = 0; i < n; i++) {
        c = A + rand() % ((B + 1) - A);
        myvector.push_back(c);
        fout << c << endl;
    }
}
fout.close();
#pragma omp parallel for reduction(+: sum) {
for (int i = 0; i < ivector.size(); i++) {
  sum += myvector.at(i);
}
}
et = clock();
iv = (double)(et-st)/CLOCKS_PER_SEC;
printf("time is %f\n", iv);
cout << “sum =<< sum << endl;
_getch();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2018, 16:03
Ответы с готовыми решениями:

Параллельное программирование:Построить вектор, элементы которого равны произведению соответствующих элементов
Уважаемые программисты,буду весьма признателен, если напишите код программы на C# к данной задаче: Построить вектор, элементы которого...

Параллельное программирование
Нужно написать простейшую программу для кластера. Читал про MPI, но там тоже есть выбор: из boost-а, OpenMPI, OpenMP, который...

Параллельное программирование
Если не ошибаюсь, то VBA не обладает функционалом для параллельного выполнения программ. Однако, я где-то читал, что можно создать...

5
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
26.03.2018, 16:07
вот и правда, в чем хитрость? а можно само задание увидеть?
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
26.03.2018, 16:29  [ТС]
Всё бы ничего, но основная трудность с заполнением вектора. Кому не надоест в текстовом файле вводить 3 * 10^8 элементов вектора? При рандомном заполнении каждый раз с одним и тем же количеством ядер сумма будет различной, и преподаватель может придраться по этому поводу. У меня есть вариант заполнять вектор по какой-нибудь математической зависимости от счётчика цикла:

C++
1
2
3
4
5
#pragma omp parallel for {
    for(int i = 0; i < n; i++) {
        myvector.push_back((2*i*i) + (16*i) + 28);
    }
}
Нужно ли тогда параллелить этот цикл?
Миниатюры
Ввод элементов массива, параллельное программирование   Ввод элементов массива, параллельное программирование   Ввод элементов массива, параллельное программирование  

0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
26.03.2018, 16:31  [ТС]
У меня 3 вариант
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
26.03.2018, 16:44
БузинВладимир, https://habrahabr.ru/company/intel/blog/85273/

так там ж не о заполнении вектора речь, а о времени выполнения расчета.

можно генераторами воспользоваться с изменяемым seed ("семенем" не знаю как перевести).

http://www.codeabbey.com/index... -generator

http://www.codeabbey.com/index... -generator

http://www.codeabbey.com/index/task_list/random
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
26.03.2018, 18:29  [ТС]
Выкладываю код, где вектор заполняется остатками от деления счётчика цикла на 10. Нужно ли параллелить цикл с заполнением вектора? Какие директивы синхронизации использовать? Пожалуйста, укажите ошибки в коде, нужно ли где-нибудь использовать schedule, critical или master?

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
#include <ctime> 
#include <iostream> 
#include <vector> 
#include <omp.h> 
#include <conio.h> 
using namespace std; 
 
int main() { 
int n, k, sum; 
clock_t st, et; 
double iv; 
sum = 0; 
cout « “Enter N:\n”; 
cin » n; 
cout « “Enter number of threads:\n”; 
cin » k; 
omp_set_dynamic(0); 
omp_set_num_threads(k); 
vector <int> myvector; 
st = clock(); 
#pragma omp parallel for 
{ 
for(int i = 0; i < n; i++) { 
myvector.push_back(i % 10); 
} 
} 
#pragma omp parallel for reduction(+: sum) 
{ 
for (int i = 0; i < ivector.size(); i++) { 
sum += myvector.at(i); 
} 
} 
et = clock(); 
iv = (double)(et-st)/CLOCKS_PER_SEC; 
printf("time is %f\n", iv); 
cout « “sum = ” « sum « endl; 
_getch(); 
return 0; 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2018, 18:29
Помогаю со студенческими работами здесь

Параллельное программирование
Подскажите учебник с помощью которого можно научиться параллельному программированию

Параллельное программирование
Помогите решить. С чего начать не знаю. новичок в Java. Java программа должна считать все числа из файла и сложить между собой цифры...

Параллельное программирование
Доброго времени суток! Вообщем немного предистории, на летнюю практику препод дал задание вот теперь я сижу и не знаю с чего начать. ...

Параллельное программирование в С++
Здравствуйте! я новичок в параллельном программировании. Помогите пожалуйста с задачкой!! Есть одна глобальная переменная, которая должна...

Параллельное программирование
Есть задача, которая хорошо распараллеливается. Ее текущий вариант выполняется неприлично долго: условно около суток. Для ее решения мне...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru