Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 04.10.2014
Сообщений: 35

[AMP] Распараллеливание вложенных циклов

09.05.2015, 11:39. Показов 1330. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть участок кода с многократно вложенными циклами,которые необходимо распараллелить с помощью C++AMP,но возникли некоторые трудности,хочется получить совет.
Возьмём первый for, Nfi в нём это размерность конечного ряда фурье,тут она равна 10,во втором for Nx тоже размерность,равна 5
Как тут можно применить parallel_for_each для первых двух for?

Кликните здесь для просмотра всего текста
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
for (int k = 0; k <= Nfi; k++)
    {
        TmpPsi[k] = 0.0;
        for (int n = 0; n <= Nx; n++)
        {
            complex<double> S = 0.0;
            for (int nu = 0; nu <= Nx + 2; nu++)
                for (int j = -Nfi; j <= Nfi; j++)
                    S += B2_Func(n, -k, nu, j)*Vfi_(nu, j);
            for (int nu = 0; nu <= Nx + 2; nu++)
                for (int m = 0; m <= Nx + 2; m++)
                {
                    double AA0 = A0_Func(n, nu, m);
                    double AA1 = AA1_Func(n, nu, m);
                    double AA2 = AA2_Func(n, nu, m);
                    double AA3 = AA3_Func(n, nu, m);
                    double AA4 = AA4_Func(n, nu, m);
                    double AA5 = AA5_Func(n, nu, m);
                    double AA6 = AA6_Func(n, nu, m);
                    double AA7 = AA7_Func(n, nu, m);
 
                    for (int j = -Nfi; j <= Nfi; j++)
                        for (int l = -Nfi; l <= Nfi; l++)
                            {
                                complex<double> B3 = AA1*Jz_(j + l - k);
                                if ((j + l) == k)
                                    B3 += complex<double>(0, M_PI*(2 * j*AA1 - l*AA0));
                                if (abs(j + l - k) <= 2)
                                    B3 += complex<double>(0, beta / 4)*(AA4*l + AA5*(l - k) + AA2*(k - j) - (k*AA3) / 2)*J_(j + l - k, 1);
                                if (abs(j + l - k) <= 4)
                                    B3 += complex<double>(0, beta*beta / 16)*(AA6*(j - l - k) + (AA7*(j + l + k)) / 4)*J_(j + l - k, 2);
                                S += B3*Vfi_(nu, j)*Vfi_(m, l);
                }
            }
            TmpPsi[k](n) = S / M_PI;
        }
        if (k == 0)
            TmpPsi[k](Nx + 1) = -wt;
        if (k == 1)
            TmpPsi[k](Nx + 2) = (beta / 2)*conj(yt);
        Blas_Mat_Vec_Mult(A_Inv, TmpPsi[k], Psi[k]);
    }


Добавлено через 20 часов 31 минуту
up up
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2015, 11:39
Ответы с готовыми решениями:

VS 2010 Express Edition && (MFC && ATL(WTL)) ???
Здравствуйте Смогу ли я воспользоваться Легально MFC и ATL(WTL) библиатеками в VS 2010 Express Edition ? Или эти библиотеки...

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

Распараллеливание циклов
Есть такой цикл std::list&lt;int&gt;::iterator iter; std::list&lt;int&gt;_paramsFFT; for(iter = _paramsFFT.begin(); iter != _paramsFFT.end();...

2
0 / 0 / 1
Регистрация: 04.10.2014
Сообщений: 35
13.05.2015, 11:15  [ТС]
UP UP
0
0 / 0 / 1
Регистрация: 04.10.2014
Сообщений: 35
19.05.2015, 14:39  [ТС]
HELP
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2015, 14:39
Помогаю со студенческими работами здесь

Распараллеливание циклов
Возникли трудности с освоением OpenMP Непонимаю, почему если закоментировать вот этот фрагмент кода, то программа работает вы разы...

Распараллеливание циклов в OpenMP
Доброго времени суток. Собственно в чем заключается вопрос: есть код, который заполняет трехмерный массив. как эффективно распараллелить?...

Распараллеливание циклов с использованием OpenMP C++
Доброго времени суток. (Нужен совет, так как разбираюсь с omp почти 3 дня и не хватает знанний) Есть следующий последовательный код ...

OpenIM - не работает распараллеливание циклов
void Multiplication(int a, int b) { int c; int i; int j; int count(0); omp_set_num_threads(count); #pragma omp...

Распараллеливание циклов с ипользованием OpenMP
Есть проблема , получился парадокс - время роботы программы с распараллеливанием дольше на 1 сек чем без распараллеливания, ожидалось...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru