Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Freelance
Эксперт С++
2871 / 1806 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
1

Распараллеливание

29.10.2013, 21:14. Просмотров 1301. Ответов 5
Метки нет (Все метки)

Здраствуйте. Подскажите как распаралелить функцию поиска минимального элемента в масиве средствами WinAPI. К примеру в 2, 4, 8... потоках. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2013, 21:14
Ответы с готовыми решениями:

Распараллеливание процессов
Вопросы такие, братцы: 1)на чем лучше писать такую тему как распараллеливание процессов - visual...

Распараллеливание алгоритма сортировки
Доброго времени суток. Есть программа, в которой реализуется распараллеливание алгоритма...

Используя распараллеливание потоков найти количество цифр, входящих в заданную строку
Используя распараллеливания потоков найти количество цифр, входящих в заданную строку. Я говорил с...

Распараллеливание программы
Пишу брутер и встал вопрос о добавление многопоточности. Вот у меня есть функция: std::string...

5
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
29.10.2013, 21:18 2
разбиваешь массив на куски по числу потоков и перебираешь параллельно каждый кусок. а когда все закончат - из них выбираешь минимальное значение. или что здесь пробл. конкретно? как потоки winapi создает, или как их снова слить в один?
1
Freelance
Эксперт С++
2871 / 1806 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
29.10.2013, 22:49  [ТС] 3
novi4ok, Что то такое должно выйти?
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
#include <iostream>
#include <vector>
#include <cmath>
#include <functional>
#include <random>
#include <algorithm>
#include <ctime>
 
#include "thread.h"
#include "criticalsection.h"
 
struct args
{
  int *arr,
       begin,
       end,
       min;
};
 
DWORD WINAPI min_elem(LPVOID param)
{
  args *_arg = static_cast<args*>(param);
  int min = _arg->arr[_arg->begin];
  for(int i = _arg->begin + 1; i <= _arg->end; ++i)
    if(min > _arg->arr[i])
      min = _arg->arr[i];
  _arg->min = min;
}
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  const int n = 1000000, nn = 2;
  int *a = new int[n];
  my::thread thr[nn];
  args arg[nn];
 
  auto rnd = std::bind(std::uniform_int_distribution<int>(-10000, 10000),
                       std::mt19937(time(nullptr)));
  std::generate(a, a + n, rnd);
 
  arg[0].arr = arg[1].arr = a;
  arg[0].begin = 0;
  arg[0].end = n / 2;
  arg[1].begin = n / 2 + 1;
  arg[1].end = n - 1;
 
  thr[0].create(min_elem, LPVOID(&arg[0]));
  thr[1].create(min_elem, LPVOID(&arg[1]));
 
  std::cout << std::min({arg[0].min, arg[1].min});
 
  delete[] a;
 
  return 0;
}
C++
1
2
3
4
5
void my::thread::create(LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter)
{
  hThread = CreateThread(NULL, 0, lpStartAddress, lpParameter, 0, &ThreadId);
  //WaitForSingleObject(hThread, INFINITE); тут не знаю как надо
}
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
29.10.2013, 23:47 4
что-то в этом роде, только "не знаю как надо" не в том месте прописано. в этом месте ты запускаешь фактически выполнение ф-ии min_elem, которая должна бы как-то просигналить о своем окончании. я бы в твою структуру добавил хэндл события, и в конце ф-я min_elem сигналит свое событие. а перед строчкой 53 нужно дождаться, пока просигналят все.
1
Freelance
Эксперт С++
2871 / 1806 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
30.10.2013, 00:06  [ТС] 5
novi4ok, Я не знаю нужно ли там ставить WaitForSingleObject или нет.

Добавлено через 1 минуту
Цитата Сообщение от novi4ok Посмотреть сообщение
я бы в твою структуру добавил хэндл события, и в конце ф-я min_elem сигналит свое событие. а перед строчкой 53 нужно дождаться, пока просигналят все.
З событиями еще не работал. Если не сложно, парочка строчок кода, для общего понятия, не была б лишней)
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
30.10.2013, 01:49 6
лучше - ссылка на первоисточник
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2013, 01:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

OpenMP распараллеливание цикла
Привет кодеры! Нужна ваша помощь. У меня есть код который нужно распараллелить и тем самым получить...

Распараллеливание
Написал программу для полного перебора всех возможных n-значных комбинаций состоящих из . Написал 3...

Распараллеливание
Уважаемые формумчане! Подскажите, кто-нибудь, пожалуйста, в чем тут может быть ошибка? using...

Распараллеливание
Пишу в C++/CLI программу. Потребовалось распараллелить построение фрактала. Вопрос: кто-нибудь...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.