Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446

Не создаются новые потоки при распараллеливании цикла for (работает только один поток - главный)

27.06.2018, 10:26. Показов 1160. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток, ребята!

Пишу код по распараллеливанию умножения матриц. Всё вроде работает верно, но есть один момент OMP не создаёт новые потоки для распараллеливания внешнего цикла, работает только один поток - главный (на скрине это видно). Пробовал устанавливать количество потоков вручную - не помогло.
Подскажите в чем тут дело?

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
int countstr1, countstolb1, countstr2, countstolb2;
int ** MultyMatrix(int **matrix1, int** matrix2)
{
    int ** multyMatrix = new int *[countstr1];
    for (int i = 0; i < countstr1; i++)
        multyMatrix[i] = new int[countstolb2];
    for (int i = 0; i < countstr1; i++) {
        for (int j = 0; j < countstolb2; j++)
            multyMatrix[i][j]=0;
    }
    double startTime = 0, endTime = 0, time=0;
    omp_set_num_threads(4);
    int i = 0, j = 0,tid=0,nthreads=0;
#pragma omp parallel for private (i,j,k,tid,nthreads) shared (matrix1,matrix2,multyMatryx)
        for (i = 0; i < countstr1; i++)
        {
            // печать номера потока
            tid = omp_get_thread_num();
            printf("Number potok: %d\n", tid);
            startTime = omp_get_wtime();
            // Печать количества потоков – только master
            if (tid == 0) {
                nthreads = omp_get_num_threads();
                printf("Number of threads = %d\n", nthreads);
            }
 
            {
                for (j = 0; j < countstolb2; j++)
                {
                    {
                        for (int k = 0; k < countstr2; k++)
                        {
                            multyMatrix[i][j] += matrix1[i][k] * matrix2[k][j];
                        }
                    }
                }
            }
            endTime = omp_get_wtime();
            printf("Time work: %fpotok: %d\n", endTime - startTime);
        }
        return multyMatrix;
}
Миниатюры
Не создаются новые потоки при распараллеливании цикла for (работает только один поток - главный)  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2018, 10:26
Ответы с готовыми решениями:

Создается только один потомок и не создаются дополнительные при следующем входе в цикл
#include &lt;stdio.h&gt; int main () { int i; for (i = 0; i &lt; 2; i ++) { fork(); printf (&quot;.&quot;); ...

Как реализовать, чтобы главный поток ждал, пока завершат свою роботу другие потоки
Всем доброго времени суток. Есть следующий код, как реализовать чтоб главный поток подождал пока завершат свою роботу другие потоки? ...

OpenMP при распараллеливании цикла иногда выдает разные результаты
Доброго времени суток, ув. форум! Я новичек и в С++ и в OpenMP Играюсь со следующей программкой для вычисления Пи: #include...

1
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
04.08.2018, 13:40  [ТС]
Почему никто даже никаких замечаний не делает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2018, 13:40
Помогаю со студенческими работами здесь

При добавлении данных в БД создаются новые экземпляры Entity Framework C#
Добрый день, знатоки, имеются классы контекста Пользователь public class person { public int ID { get; set; } ...

QUdpSocket работает только при локальном IP. QUdoSocket вынесен в другой поток
QUdpSocket работает только при локальном IP. Не работает когда указываю свой айпишник. В чем может быть причина. UdpSock.cpp ...

Нужна программа реализации эйлерова цикла (обхода все ребер графа, и при том только один раз))
Товарищи...очень нужно, хотя бы прототип, отладить берусь сам... Помогите кто чем может (желательно кидать готовые тексты)

Как синхронизировать потоки, чтобы сначала один поток, затем первый завершался и начинался второй
Как синхронизировать потоки, чтобы сначала один поток, затем первый завершался и начинался второй Родительский и вновь созданный поток...

Dll-ка работает только один раз при каждом запуске программы
Здравствуйте. Есть файл .dll-ки, написанный на другом языке с несколькими известными импортированными методами. static extern...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru