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

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

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

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

Другой вопрос использование вычислительных возможностей процессора видеокарты, там мной создавалось куча параллельных блоков, но это другой подход...
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
05.03.2014, 21:04  [ТС]     VS 12 ограничение на создание потоков #7
mustimur, я вас понял, ну сам не видел явных ограничений на вообще любые подходы, так что тут происходит сам не понял, кажетя что-то в самой VS
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
05.03.2014, 23:32     VS 12 ограничение на создание потоков #8
Функция int omp_get_thread_limit() что выдаёт?
Цитата Сообщение от RayPas Посмотреть сообщение
Использую реализацию OpenMP для распараллеливания вычислений. Почему то больше 64 потоков не создает.
Как используете? Как узнаёте что больше 64-х потоков не создаётся?
На эти вопросы Вам надо было ответить еще в первом посте.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
05.03.2014, 23:36  [ТС]     VS 12 ограничение на создание потоков #9
castaway,
задаю явно и не явно
C++
1
omp_set_num_threads(100);
а узнаю так, что вывожу на консоль
C++
1
cout << "Kol-vo potokov: "<< omp_get_num_threads() << endl;
там больше 64 не выводит
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
05.03.2014, 23:48     VS 12 ограничение на создание потоков #10
void omp_set_num_threads( int ) задаёт маскимальное число потоков.
int omp_get_num_threads() возвращает число активных потоков.
Логично что число активных потоков меньше или равняется числу максимальных.
Без простейшего кода, воспроизводящего "проблему", говорить не о чем..
Цитата Сообщение от castaway Посмотреть сообщение
Функция int omp_get_thread_limit() что выдаёт?
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
05.03.2014, 23:49  [ТС]     VS 12 ограничение на создание потоков #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;
Убежденный
Системный программист
 Аватар для Убежденный
14194 / 6209 / 985
Регистрация: 02.05.2013
Сообщений: 10,346
Завершенные тесты: 1
05.03.2014, 23:50     VS 12 ограничение на создание потоков #12
Цитата Сообщение от RayPas Посмотреть сообщение
Что это может быть за ограничение?
E. Implementation-Defined Behaviors in OpenMP C/C++
http://msdn.microsoft.com/en-us/libr...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)
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
05.03.2014, 23:55  [ТС]     VS 12 ограничение на создание потоков #13
castaway, что то на эту функцию он ругается и пишет - неразрешенный элемент...omp.h подключено...все работает, но только на 64 потока

Добавлено через 49 секунд
Убежденный, ну так был пост, в котром человек создавал и 300 потоков с помощью этой организации
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.03.2014, 23:56     VS 12 ограничение на создание потоков #14
delete
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
06.03.2014, 00:05     VS 12 ограничение на создание потоков #15
Собственно, Убежденный нашел правильный источник. Переведу следующий фрагмент.
Цитата Сообщение от Убежденный Посмотреть сообщение
In Visual C++, for a non-nested parallel region, 64 threads (the maximum) will be provided.
В Visual C++, для не вложенного участка parallel, будет предоставлено 64 потока (максимум).
* под "участком" так же подразумевается слово "team" (команда потоков) из источников OpenMP.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
06.03.2014, 00:07  [ТС]     VS 12 ограничение на создание потоков #16
castaway, т.е. мне мои циклы в 100 потоков никак не посчитать?
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
06.03.2014, 00:24     VS 12 ограничение на создание потоков #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <omp.h>
 
int main()
{
    omp_set_num_threads( 100 );
 
    #pragma omp parallel for
    for ( int i = 0; i < 100; i++ ) {
        if ( i == 99 )
            std::cout << omp_get_num_threads() << std::endl;
    }
    return 0;
}
Что выдаёт этот код?
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
06.03.2014, 00:27  [ТС]     VS 12 ограничение на создание потоков #18
castaway, 64
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.03.2014, 00:31     VS 12 ограничение на создание потоков #19
еще можно разрулить переменными окружения:
http://software.intel.com/en-us/node/459658
на винде больше 64 не ставится. может больше на каких-нибудь никсах можно будет выставить,
но и там наверняка есть предел.

если очень очень нужно 100 потоков, то - самодельное решение какое-нибудь. без OpenMP
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2014, 00:37     VS 12 ограничение на создание потоков
Еще ссылки по теме:

C++ Создание потоков в рекурсивной функции
Создание потоков в openmp C++
C++ Создание бинарного дерева и ограничение на количество узлов в ней

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
06.03.2014, 00:37     VS 12 ограничение на создание потоков #20
Цитата Сообщение от RayPas Посмотреть сообщение
castaway, 64
Цитата Сообщение от DU Посмотреть сообщение
на винде больше 64 не ставится.
У меня MinGW 4.8.2, выдаёт 100..
RayPas, увы, в Visual C++ не работаю, посоветовать пока ничего не могу. Видимо.., там свои ограничения..
Yandex
Объявления
06.03.2014, 00:37     VS 12 ограничение на создание потоков
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru