Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 8
1

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

13.12.2018, 14:52. Просмотров 705. Ответов 8
Метки нет (Все метки)

есть цикл

C++
1
2
3
4
5
6
7
for (unsigned n = 0; n < threads; n++)
        {
            func (sigma, sub_noisy[n], sub_basic[n], sub_denoised[n],
                              w_table[n], h_table[n], chnls, nWien, kWien, NWien, pWien,
                              useSD_w, color_space, tau_2D_wien, &plan_2d_for_1[n],
                              &plan_2d_for_2[n], &plan_2d_inv[n]);
        }
как его распараллелить, желательно не используя openMP
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2018, 14:52
Ответы с готовыми решениями:

Распараллеливание цикла проверки
Всем здравствуйте! У меня есть метод, который проверяет элементы массива на обладание каким то...

Работа с OpenMP. Распараллеливание цикла for
Доброго времени суток товарищи. При работе с OpenMP возник следующий вопрос Почему код int i;...

Распараллеливание цикла For с использованием OpenMP
Всем привет. Задался целью изучить OpenMP, что бы в дальнейшем уметь распараллеливать программы....

распараллеливание
Скажите, кто-нибудь занимался распараллеливанием в си++? В моих попытках что-либо распараллелить...

8
314 / 167 / 77
Регистрация: 09.10.2014
Сообщений: 802
13.12.2018, 16:11 2
вообще не знаю, что под функцией func, но
C++
1
2
3
4
5
6
7
8
9
#include <future>
....
for (unsigned n = 0; n < threads; n++)
{
    std::async(std::launch::async, func, sigma, sub_noisy[n], sub_basic[n], sub_denoised[n],
        w_table[n], h_table[n], chnls, nWien, kWien, NWien, pWien,
        useSD_w, color_space, tau_2D_wien, &plan_2d_for_1[n],
        &plan_2d_for_2[n], &plan_2d_inv[n]);
}
Не проверял. Если что то серьезное, лучше использовать тред пул
0
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 8
13.12.2018, 19:39  [ТС] 3
пробовал сделать так, используя ppl
C++
1
2
3
4
5
6
7
8
     parallel_for (0,threads,[&sub_noisy,&sub_basic,& w_table,&h_table,&plan_2d_for_1,&plan_2d_for_2,&plan_2d_inv](unsigned n)                                           
        {
       bm3d_1st_step(sigma, sub_noisy[n], sub_basic[n], w_table[n],
                              h_table[n], chnls, nHard, kHard, NHard, pHard, useSD_h,
                              color_space, tau_2D_hard, &plan_2d_for_1[n],
                              &plan_2d_for_2[n], &plan_2d_inv[n]);
       
        });
ругается на
1>D:\исхoдники\bm3d.cpp(103): error C3493: "sigma" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(104): error C3493: "chnls" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(104): error C3493: "nHard" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(104): error C3493: "kHard" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(104): error C3493: "NHard" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(104): error C3493: "pHard" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(104): error C3493: "useSD_h" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(105): error C3493: "color_space" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
1>D:\исхoдники\bm3d.cpp(105): error C3493: "tau_2D_hard" нельзя передать неявно, поскольку не задан режим передачи по умолчанию
может кто знает как исправить
0
314 / 167 / 77
Регистрация: 09.10.2014
Сообщений: 802
13.12.2018, 21:17 4
Цитата Сообщение от Vadim551 Посмотреть сообщение
может кто знает как исправить
в лямбду this забыл передать.
0
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 8
13.12.2018, 22:26  [ТС] 5
не совсем понял что нужно сделать

Добавлено через 15 минут
Цитата Сообщение от lArtl Посмотреть сообщение
в лямбду this забыл передать.
не совсем понял что нужно сделать
0
314 / 167 / 77
Регистрация: 09.10.2014
Сообщений: 802
13.12.2018, 23:08 6
Цитата Сообщение от Vadim551 Посмотреть сообщение
не совсем понял что нужно сделать
C++
1
2
3
4
5
6
7
8
parallel_for (0,threads,[this,&sub_noisy,&sub_basic,& w_table,&h_table,&plan_2d_for_1,&plan_2d_for_2,&plan_2d_inv](unsigned n)                                           
        {
       bm3d_1st_step(sigma, sub_noisy[n], sub_basic[n], w_table[n],
                              h_table[n], chnls, nHard, kHard, NHard, pHard, useSD_h,
                              color_space, tau_2D_hard, &plan_2d_for_1[n],
                              &plan_2d_for_2[n], &plan_2d_inv[n]);
       
        });
0
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 8
13.12.2018, 23:41  [ТС] 7
1>D:\исхoдники\bm3d.cpp(101): error C3482: "this" может быть использован в качестве передаваемого параметра в лямбда-выражении только с нестатической функцией-членом

Добавлено через 3 минуты
Цитата Сообщение от lArtl Посмотреть сообщение
C++
1
2
3
4
5
6
7
parallel_for (0,threads,[this,&sub_noisy,&sub_basic,& w_table,&h_table,&plan_2d_for_1,&plan_2d_for_2,&plan_2d_inv](unsigned n) 
{
bm3d_1st_step(sigma, sub_noisy[n], sub_basic[n], w_table[n],
 h_table[n], chnls, nHard, kHard, NHard, pHard, useSD_h,
 color_space, tau_2D_hard, &plan_2d_for_1[n],
 &plan_2d_for_2[n], &plan_2d_inv[n]);
});
1>D:\исхoдники\bm3d.cpp(101): error C3482: "this" может быть использован в качестве передаваемого параметра в лямбда-выражении только с нестатической функцией-членом
0
314 / 167 / 77
Регистрация: 09.10.2014
Сообщений: 802
14.12.2018, 02:44 8
Цитата Сообщение от Vadim551 Посмотреть сообщение
1>D:\исхoдники\bm3d.cpp(101): error C3482: "this" может быть использован в качестве передаваемого параметра в лямбда-выражении только с нестатической функцией-членом
тогда попробуй так

C++
1
2
3
4
5
6
7
8
parallel_for (0,threads,[&](unsigned n)                                           
        {
       bm3d_1st_step(sigma, sub_noisy[n], sub_basic[n], w_table[n],
                              h_table[n], chnls, nHard, kHard, NHard, pHard, useSD_h,
                              color_space, tau_2D_hard, &plan_2d_for_1[n],
                              &plan_2d_for_2[n], &plan_2d_inv[n]);
       
        });
0
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 8
14.12.2018, 07:33  [ТС] 9
Цитата Сообщение от lArtl Посмотреть сообщение
тогда попробуй так
так в самом начале пробовал
1>D:\исхoдники\bm3d.cpp(108): error C2661: run_bm3d::<lambda_b051773df5291d01ebf876aa4193e98e>::<lambda _b051773df5291d01ebf876aa4193e98e>: нет перегруженной функции, принимающей 16 аргументов
1>D:\исхoдники\bm3d.cpp(108): error C2780: void Concurrency:: parallel_for(_Index_type,_Index_type,const _Function &,Concurrency::affinity_partitioner &): требует аргументов: 4, имеется: 3
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ppl.h(3562): см. объявление "Concurrency:: parallel_for"
1>D:\исхoдники\bm3d.cpp(108): error C2780: void Concurrency:: parallel_for(_Index_type,_Index_type,const _Function &,const Concurrency::simple_partitioner &): требует аргументов: 4, имеется: 3
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ppl.h(3523): см. объявление "Concurrency:: parallel_for"
1>D:\исхoдники\bm3d.cpp(108): error C2780: void Concurrency:: parallel_for(_Index_type,_Index_type,const _Function &,const Concurrency::static_partitioner &): требует аргументов: 4, имеется: 3
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ppl.h(3484): см. объявление "Concurrency:: parallel_for"
1>D:\исхoдники\bm3d.cpp(108): error C2780: void Concurrency:: parallel_for(_Index_type,_Index_type,_Index_type,const _Function &): требует аргументов: 4, имеется: 3
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ppl.h(3406): см. объявление "Concurrency:: parallel_for"
1>D:\исхoдники\bm3d.cpp(108): error C2780: void Concurrency:: parallel_for(_Index_type,_Index_type,_Index_type,const _Function &,_Partitioner &&): требует аргументов: 5, имеется: 3
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\ppl.h(3370): см. объявление "Concurrency:: parallel_for"

C++
1
2
3
4
5
6
7
8
9
10
11
#pragma omp parallel shared(sub_noisy, sub_basic, sub_denoised,  w_table,h_table, plan_2d_for_1, plan_2d_for_2, plan_2d_inv)
        {
            #pragma omp for schedule(dynamic) nowait
            for (unsigned n = 0; n < nb_threads; n++)
            {
                bm3d_2nd_step(sigma, sub_noisy[n], sub_basic[n], sub_denoised[n],
                              w_table[n], h_table[n], chnls, nWien, kWien, NWien, pWien,
                              useSD_w, color_space, tau_2D_wien, &plan_2d_for_1[n],
                              &plan_2d_for_2[n], &plan_2d_inv[n]);
            }
         }
c openmp все просто, вот так работает, а с ppl не совсем понятно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2018, 07:33

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

Распараллеливание
Всем добрый вечер. Если кто знает подскажите,мне надо распараллелить перемножение...

Распараллеливание
Подскажите, что не так. Есть массив из 13 элементов, мне нужно разбить на три блока, один блок...

Странное распараллеливание
Добрый вечер, коллеги. У меня следующая проблема. Преподаватель сказал распараллелить программу,...

Распараллеливание циклов
Доброго времени суток. Возникла необходимость распараллелить один численный алгоритм средствами...


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

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

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