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

Создание параллельных задач - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Оптимизация обработки массивов http://www.cyberforum.ru/cpp-beginners/thread776600.html
Есть 12 числовых массивов (a,b,d,e,f,g,h,k,m,n,p,r) разной длины, их длина кратна 5 и заранее известна. Необходимо создать массив (abdefghkmnpr) состоящий из перебора этих массивов. Алгоритм программы такой: 1 объявляем новый массив(ab) 2 сравниваем два первых массива(a и b) сравнение происходит так: берем 5 элементов массива (b) и по одному сравниваем с 5 элементами массива (a) если в...
C++ Cтруктура: расчет количества библиотек на 1000 жителей. Составить программу, в которой описывается структура из полей: Город, Количество жителей, Количество библиотек. Организовать ввод структурных переменных, вывод каждой структуры на экран и расчет количества библиотек на 1000 жителей. Кол-во библиотек на 1000 жителей = Количество библиотек / Количество жителей / 1000. #include <iostream> #include <cstring> #include <windows.h> #include... http://www.cyberforum.ru/cpp-beginners/thread776581.html
Реализация работы с динамическими структурами C++
Составьте программу, которая создает стек из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух целых чисел. Организуйте обработку каждого элемента: печать целых чисел из информационной части и остатка от деления первого целого числа на второе.
Структура: Очередь C++
Составьте программу, которая создает очередь из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух целых чисел. Организуйте обработку каждого элемента: печать целых чисел из информационной части и их среднее значение.
C++ Static поля класса http://www.cyberforum.ru/cpp-beginners/thread776562.html
объясните нубу, вот имею я такой код на С# class WebResponse { public static string GET(string Url, string Data) { string Out = sr.ReadToEnd(); return Out; } } и я просто буду обращаться к этой функции WebResponse.GET(...);
C++ Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения. Организовать ввод двух структурных переменных, вывод каждой структуры на экран и вывести на экран фамилию человека, номер телефона введен с клавиатуры (если такого человека нет, вывести сообщение об этом). подробнее

Показать сообщение отдельно
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.02.2013, 19:40  [ТС]     Создание параллельных задач
ForEveR, я немного разобрался в вашем последнем коде и нашел в нем одну проблему - он не совсем параллельно работает, только одно ядро у меня грузит. Походу, проблема в функции is_future_ready. Вот немного переделал, теперь все ядра по 100% в загрузке и вывод результатов по порядку. Вот, может кому надо будет.
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
#include <thread>
#include <future>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
 
long long fib(long long i) { return i < 3 ? 1 : fib(i - 1) + fib(i - 2); }
 
int main()
{
    typedef std::pair<int, std::future<long long>> future;
 
    const int start = 30, end = 48;
    auto is_future_valid = [](future& fut)
    {
        return fut.second.valid();
    };
    auto is_future_ready = [&is_future_valid](future& fut)
    {
        return is_future_valid(fut) && fut.second.wait_for(std::chrono::microseconds(100)) == std::future_status::ready;
    };
    std::vector<future> futures(std::thread::hardware_concurrency());
    std::cout<<"threads = "<<futures.size()<<"\n\n";
    int number = start;
    for (future& f : futures)
    {
        f = std::make_pair(number, std::async(std::launch::async, fib, number));
        ++number;
    }
 
    while (std::any_of(futures.begin(), futures.end(), is_future_valid))
    {
        auto next = std::find_if(futures.begin(), futures.end(), is_future_ready);
        if (next == futures.end())
        {
            continue;
        }
        std::cout<<"thread = "<<std::distance(futures.begin(), next)<<"\n";
        std::cout << "Result of fib(" << next->first << ") is " << next->second.get() << std::endl;
        if (number <= end)
        {
            
            *next = std::make_pair(number, std::async(std::launch::async, fib, number));
            ++number;
        }
    }
    system("pause");
    return 0;
}
 
Текущее время: 00:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru