2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
1

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

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

Author24 — интернет-сервис помощи студентам
Использую реализацию OpenMP для распараллеливания вычислений. Почему то больше 64 потоков не создает. 2х ядерный процессор, 3гб оперативки, но ни в какую не хочет создавать 100,200,300 потоков? подскажите, может в настройках что поменять надо или какие библиотеку подключить? просто это точно дело не в OpenMP так как видел примеры реализации с большим кол-вом потоков. Что это может быть за ограничение?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2014, 19:59
Ответы с готовыми решениями:

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

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

Ограничение количества потоков
Здраствуйте. Допустим есть прокси чекер. Есть тхт файл, в нем 100 прокси. Чекер должен быть...

Threading. Ограничение количества потоков
Добрый день. Есть некая функция do_stuff(), необходимо выполнять ее в отдельном потоке, но...

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

Другой вопрос использование вычислительных возможностей процессора видеокарты, там мной создавалось куча параллельных блоков, но это другой подход...
0
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 21:04  [ТС] 7
mustimur, я вас понял, ну сам не видел явных ограничений на вообще любые подходы, так что тут происходит сам не понял, кажетя что-то в самой VS
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.03.2014, 23:32 8
Функция int omp_get_thread_limit() что выдаёт?
Цитата Сообщение от RayPas Посмотреть сообщение
Использую реализацию OpenMP для распараллеливания вычислений. Почему то больше 64 потоков не создает.
Как используете? Как узнаёте что больше 64-х потоков не создаётся?
На эти вопросы Вам надо было ответить еще в первом посте.
0
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
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.03.2014, 23:48 10
void omp_set_num_threads( int ) задаёт маскимальное число потоков.
int omp_get_num_threads() возвращает число активных потоков.
Логично что число активных потоков меньше или равняется числу максимальных.
Без простейшего кода, воспроизводящего "проблему", говорить не о чем..
Цитата Сообщение от castaway Посмотреть сообщение
Функция int omp_get_thread_limit() что выдаёт?
0
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
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
05.03.2014, 23:50 12
Цитата Сообщение от RayPas Посмотреть сообщение
Что это может быть за ограничение?
E. Implementation-Defined Behaviors in OpenMP C/C++
http://msdn.microsoft.com/en-u... 10%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
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
05.03.2014, 23:55  [ТС] 13
castaway, что то на эту функцию он ругается и пишет - неразрешенный элемент...omp.h подключено...все работает, но только на 64 потока

Добавлено через 49 секунд
Убежденный, ну так был пост, в котром человек создавал и 300 потоков с помощью этой организации
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
05.03.2014, 23:56 14
delete
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
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
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
06.03.2014, 00:07  [ТС] 16
castaway, т.е. мне мои циклы в 100 потоков никак не посчитать?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
06.03.2014, 00:24 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;
}
Что выдаёт этот код?
0
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
06.03.2014, 00:27  [ТС] 18
castaway, 64
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
06.03.2014, 00:31 19
еще можно разрулить переменными окружения:
http://software.intel.com/en-us/node/459658
на винде больше 64 не ставится. может больше на каких-нибудь никсах можно будет выставить,
но и там наверняка есть предел.

если очень очень нужно 100 потоков, то - самодельное решение какое-нибудь. без OpenMP
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
06.03.2014, 00:37 20
Цитата Сообщение от RayPas Посмотреть сообщение
castaway, 64
Цитата Сообщение от DU Посмотреть сообщение
на винде больше 64 не ставится.
У меня MinGW 4.8.2, выдаёт 100..
RayPas, увы, в Visual C++ не работаю, посоветовать пока ничего не могу. Видимо.., там свои ограничения..
0
06.03.2014, 00:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2014, 00:37
Помогаю со студенческими работами здесь

Создание потоков
Разработать программу, определяющую основные параметры загруженности компьютера, работающего под...

Создание потоков
Нужно написать программу, которая порождает 2 потока. Один записывает информацию в именованный...

Создание потоков
Привет всем. Есть программа в которой количество используемых потоков должно определятся...

Создание потоков
Добрый день! Начала знакомство с GPSS и возникли проблемы. Необходимо смоделировать поток событий...

Создание потоков
Написать программу, которая принимает в качестве параметров набор имен файлов данных (произвольное...

Создание потоков
Напишите программу, которая создает поток. Используйте атрибуты по умолчанию. Родительский и вновь...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru