Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
#1

VS 12 ограничение на создание потоков - C++

05.03.2014, 19:59. Просмотров 1326. Ответов 26
Метки нет (Все метки)

Использую реализацию OpenMP для распараллеливания вычислений. Почему то больше 64 потоков не создает. 2х ядерный процессор, 3гб оперативки, но ни в какую не хочет создавать 100,200,300 потоков? подскажите, может в настройках что поменять надо или какие библиотеку подключить? просто это точно дело не в OpenMP так как видел примеры реализации с большим кол-вом потоков. Что это может быть за ограничение?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2014, 19:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос VS 12 ограничение на создание потоков (C++):

Создание и завершение процессов и потоков. Приоритеты выполнения потоков - C++
Здравствуйте. Буду очень раз если поможете понять,что конкретно нужно сделать в вот этом задании,пока особого представления о...

Создание потоков - C++
Всем доброго времени суток. Как всегда, последняя надежда на этот сайт. Сразу к делу: Написать программу, которая принимает в качестве...

Создание потоков - C++
Здравствуйте, я создал два потока, но не знаю, как можно проверить, точно ли я их создал и точно ли всё выполняется в отдельном потоке, а...

Создание потоков в openmp - C++
Доброго времени суток. Мне удалось распараллелить цикл for, но внутри данного цикла, помимо прочего, содержится ещё один цикл for,...

Создание потоков в Borland c - C++
Есть ли возможность создание как минимум двух потоков процессора в borland c в консольке?

OpenMP, создание потоков - C++
В инете нашел много примеров по распараллеливание циклов, но никак не могу понять, как просто написать чтобы конкретная функция выполнялась...

26
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 20:25 #2
Цитата Сообщение от RayPas Посмотреть сообщение
100,200,300 потоков
А смысл в таком количестве потоков? Теоретически каждый из потоков может задействовать одно ядро на 100%, поэтому создавать кучу потоков (больше числа ядер процессора), которые к тому же требуют синхронизации, смысла особых не вижу. Хотя для вычислений создать их можно но только на GPU, а не на CPU...
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 20:27  [ТС] #3
mustimur, по заданию столько надо...
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 20:48 #4
Я расчеты делал на Cuda, там и больше было (хотя поток то я формально использовал один) но блоков и нитей было много (больше вашего)...А они и есть по сути потоки, хотя и называются по другому.
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 20:50  [ТС] #5
mustimur, ну нити, потоки, не суть. суть в том, что боьше 64 не создается...а почему...
вопрос все еще актуален
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 21:02 #6
Я с OpenMP не работал, а когда надо было потоки создать на CPU, использовал CreateThread, но таким количество не пробовал создавать (хотя в роде не видел ограничений явных), но и смысла не видел в этом. Так что не знаю

Другой вопрос использование вычислительных возможностей процессора видеокарты, там мной создавалось куча параллельных блоков, но это другой подход...
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 21:04  [ТС] #7
mustimur, я вас понял, ну сам не видел явных ограничений на вообще любые подходы, так что тут происходит сам не понял, кажетя что-то в самой VS
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
05.03.2014, 23:32 #8
Функция int omp_get_thread_limit() что выдаёт?
Цитата Сообщение от RayPas Посмотреть сообщение
Использую реализацию OpenMP для распараллеливания вычислений. Почему то больше 64 потоков не создает.
Как используете? Как узнаёте что больше 64-х потоков не создаётся?
На эти вопросы Вам надо было ответить еще в первом посте.
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 23:36  [ТС] #9
castaway,
задаю явно и не явно
C++
1
omp_set_num_threads(100);
а узнаю так, что вывожу на консоль
C++
1
cout << "Kol-vo potokov: "<< omp_get_num_threads() << endl;
там больше 64 не выводит
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
05.03.2014, 23:48 #10
void omp_set_num_threads( int ) задаёт маскимальное число потоков.
int omp_get_num_threads() возвращает число активных потоков.
Логично что число активных потоков меньше или равняется числу максимальных.
Без простейшего кода, воспроизводящего "проблему", говорить не о чем..
Цитата Сообщение от castaway Посмотреть сообщение
Функция int omp_get_thread_limit() что выдаёт?
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 23:49  [ТС] #11
castaway,

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
 cout << "V kakoe Kol-vo potokov poschet?"<<endl;
  cin >> count;
    
 
     omp_set_num_threads(count);
        
int k,l;
start = omp_get_wtime();
    #pragma omp parallel
    {
#pragma omp for schedule(dynamic,1) 
   for (i=0; i<100; i++) {
           k=i/10;
           l=i%10;
          c[k][l] = a[k][l] * b[k][l];
          cout << "Thread: "<< omp_get_thread_num() << " i= " << k << " j= " << l << endl;
          
    cout << "Kol-vo potokov: "<< omp_get_num_threads() << endl;
        }
   #pragma omp barrier
    }
    end = omp_get_wtime();
    cout << "Time: " << end-start<<endl;
    cout << "Kol-vo potokov: "<< omp_get_num_threads() << endl;
0
Убежденный
Ушел с форума
Эксперт С++
15708 / 7218 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
05.03.2014, 23:50 #12
Цитата Сообщение от RayPas Посмотреть сообщение
Что это может быть за ограничение?
E. Implementation-Defined Behaviors in OpenMP C/C++
http://msdn.microsoft.com/en-us/library/cz27w838%28v=vs.110%29.aspx
Number of threads: If a parallel region is encountered while dynamic adjustment of
the number of threads is disabled, and the number of threads requested for the
parallel region exceeds the number that the run-time system can supply, the
behavior of the program is implementation-defined (see page 9).

In Visual C++, for a non-nested parallel region, 64 threads (the maximum) will be provided.
Цитата Сообщение от RayPas Посмотреть сообщение
ну нити, потоки, не суть. суть в том, что больше 64 не создается...а почему.
640 килобайт 64 потока хватит всем (c)
2
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 23:55  [ТС] #13
castaway, что то на эту функцию он ругается и пишет - неразрешенный элемент...omp.h подключено...все работает, но только на 64 потока

Добавлено через 49 секунд
Убежденный, ну так был пост, в котром человек создавал и 300 потоков с помощью этой организации
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.03.2014, 23:56 #14
delete
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
06.03.2014, 00:05 #15
Собственно, Убежденный нашел правильный источник. Переведу следующий фрагмент.
Цитата Сообщение от Убежденный Посмотреть сообщение
In Visual C++, for a non-nested parallel region, 64 threads (the maximum) will be provided.
В Visual C++, для не вложенного участка parallel, будет предоставлено 64 потока (максимум).
* под "участком" так же подразумевается слово "team" (команда потоков) из источников OpenMP.
0
06.03.2014, 00:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2014, 00:05
Привет! Вот еще темы с ответами:

Создание потоков по нажатию кнопок - C++
Написал программу, которая создает потоки (круг1/2) которые движутся по экрану. Как сделать так, чтобы шары появлялись по нажатию какой...

Создание потоков в рекурсивной функции - C++
Почему при создании потоков в рекурсивных функциях скорость падает ? Добавлено через 1 минуту простейший пример: //...

Создание бинарного дерева и ограничение на количество узлов в ней - C++
В задании по созданию бинарного дерева есть условие на то, что узлов в дереве должно быть не больше 10. Пробую поставить такое ограничение...

Ограничение в N потоков - Java SE
Доброго времени и суток! Возник вопрос теоретический, как ограничить доступ к методу в N потоков? Чтобы в него не могло войти более N...


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

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

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