Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
3 / 3 / 0
Регистрация: 02.01.2015
Сообщений: 39

Как задействовать все процессоры для выполнения программы c++?

08.08.2015, 09:39. Показов 9018. Ответов 40
Метки нет (Все метки)

Столкнулся с такой проблемой.

При выполнении программы c++ (я использую Microsoft Visual Studio 2015) компиллятор показывает использования лишь 10-13% процессоров (у меня их 8 по 3.4 ГГЦ).

Как же использовать все процессоры для выполнения программы?

Быстродействие этой программы очень важно, ведь она высчитывает числа.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.08.2015, 09:39
Ответы с готовыми решениями:

VC++ 2008, как задействовать все ядра CPU под расчеты
Есть необходимость задействовать все ядра процессора для решения математической задачи, а то на текущий момент программа использует только...

Стоило задействовать, по одному из советов, все ядра процессоров из 4, как перестала загружаться винда
Значит, после совета по увеличению производительности процессора и его следованию, после перезагрузки ПК перестала грузится винда. Синий...

Как задействовать встроеную видеокарту для другого монитора?
На материнке есть встроеная видеокарта. При вставке внешней встроенй не видно в диспечере и не омогает даже INIT DISPLAY FIST(хотя когда...

40
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.08.2015, 11:30
Цитата Сообщение от castaway Посмотреть сообщение
а в совместном её использовании разными потоками
А разве придумав ядра, не обеспечили независимый доступ к памяти? Есть же там двух-трёхканальность какая-то, плюс кэш.
0
Заблокирован
09.08.2015, 11:38
Цитата Сообщение от SerVal Посмотреть сообщение
std::cout << " На одном процессоре не считаем. Приходите завтра.\n";
- на одном процессоре считаем в одном потоке
Цитата Сообщение от Enno Посмотреть сообщение
Не всегда. У меня с диплома остались тесты производительности по потокам. Смотря на них можно сказать что решающим фактором становится ещё и объём вычислений. Ориентировался на скорость(размер_вычислений)*количество_п отоков.
- на чём проводилось исcледование, каким образом контролировалась производительность?Рассчёт get_md5 даст одинаковую нагрузку на каждый из процессоров, скорей всего в твоём дипломе сравнивались потоки - один решал 1 + 1 на одном ядре, а другой решал большую СЛАУ на втором, конечно ускорение будет меньшим.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.08.2015, 11:39
Цитата Сообщение от nmcf Посмотреть сообщение
А разве придумав ядра, не обеспечили независимый доступ к памяти?
Суть не в этом. Доступ к одному участку памяти (рассматриваю доступ к диапазону памяти) из различных потоков необходимо синхронизировать вручную. ЦП за тебя этого не сделает.
0
Заблокирован
09.08.2015, 11:41
Цитата Сообщение от nmcf Посмотреть сообщение
А разве придумав ядра, не обеспечили независимый доступ к памяти? Есть же там двух-трёхканальность какая-то, плюс кэш.
- память у приложения общая и делится между потоками, если потоки не разделить по общему ресурсу, которым является память (не синхронизировать), то получим в лучшем случае дедлок.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.08.2015, 11:44
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
если потоки не разделить по общему ресурсу
Так вроде определились, что задачи независимы, а доступ на чтение исходных данных синхронизировать не нужно.
0
Заблокирован
09.08.2015, 11:59
Цитата Сообщение от nmcf Посмотреть сообщение
Так вроде определились, что задачи независимы, а доступ на чтение исходных данных синхронизировать не нужно.
- где именно?
Цитата Сообщение от nmcf Посмотреть сообщение
а доступ на чтение исходных данных синхронизировать не нужно.
- да ну?А если я ещё и пишу откуда читаю?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.08.2015, 12:06
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
где именно?
Там выше он говорит, что вычисляет для каждого числа.
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
А если я ещё и пишу откуда читаю?
Не делай так. Речь вроде про md5, есть исходный блок, есть результат.
0
Заблокирован
09.08.2015, 12:09
Цитата Сообщение от nmcf Посмотреть сообщение
Не делай так. Речь вроде про md5, есть исходный блок, есть результат
почему не делать? А если я хочу захешировать файл по md5 (допустим у меня скудные ресурсы, файл огромный и держать какой то буффер нет возможности). Немного начинаю терять смысл беседы - синхронизировать потоки надо, если не синхронизировать - сразу же появляется куча условий, что можно а что нет.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.08.2015, 12:14
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
А если я хочу захешировать файл
Ну это же другое. Там набор строк, для каждой md5.
0
09.08.2015, 12:17

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
Ну это же другое. Там набор строк, для каждой md5.
- я хочу захешировать бинарный файл к примеру dll какие ж там строки?

0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.08.2015, 12:20
Там никаких. У автора строки. Число - строка, затем по строке md5. Ну я мельком посмотрел.
0
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 32
09.08.2015, 13:32
castaway: "Дело не в интенсивности использования ОЗУ, а в совместном её использовании разными потоками."

Если мы запускаем одну и ту же задачу столько раз, сколько ядер, то это совместное использование памяти?
Для определенности скажем, что у меня 64 гига оперативной памяти (как, например, на моем компе с 6-ти ядерным hasvell'ом) и я выделяю ~10.5 гига (столько памяти требует конкретный расчет)?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.08.2015, 13:57
Цитата Сообщение от George_ Посмотреть сообщение
Если мы запускаем одну и ту же задачу столько раз, сколько ядер, то это совместное использование памяти?
Тебя реально интересует этот вопрос или ты поумничать решил?
0
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 32
09.08.2015, 14:22
castaway:"Тебя реально интересует этот вопрос или ты поумничать решил?"

просто я использую этот метод для определения загруженности памяти. Например, для перемножения матриц (Blas Leve 3) скорости перемножения на одном ядре и на 6-ти ядрах практически совпадают (очень эффективно используется кэш). А вот если мы возьмем алгоритм трехдиагонализации матриц, то там скорость значительно падает, т.к. Blas Leve 2 (типа умножения матрицы на вектор) занимает значительную долю алгоритма и при этом интенсивно юзает оперативую память. Вот я и хотел у Вас узнать: к какой категории будет относится данное использование памяти?
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
10.08.2015, 09:38
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
на чём проводилось исcледование
На домашнем пека с Core2Duo.
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
каким образом контролировалась производительность?
Считал среднее время на итерацию по факту (5 запусков с одними параметрами).
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
в твоём дипломе сравнивались потоки - один решал 1 + 1 на одном ядре, а другой решал большую СЛАУ на втором
Не надо выдумывать. Потоки выполняли идентичные задачи.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.08.2015, 10:40
Цитата Сообщение от George_ Посмотреть сообщение
Если мы запускаем одну и ту же задачу столько раз, сколько ядер, то это совместное использование памяти?
На пальцах. Есть глобальная переменная "сколько у нас свободной памяти". Один поток хочет эту переменную прочитать, другой изменить. Вот это и есть совместное использование памяти. Если потоки реализуют свои хотелки одновременно, получится фигня какая-то (один начал писать, другой прочитал полупереписанное). Поэтому один поток выполняет синхронизацию "ребят, подождите, сейчас допишу, потом и дам почитать". А остальные потоки сидят и ждут. И нифига в это время не делают. Итого, вернулись к тому, с чего начали - работает одно ядро, остальные простаивают.
1
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
10.08.2015, 11:57
Нужно вынести вывод из цикла и сделать parallel for (как угодно - OpenMP, Cilk, TBB). В общем, не вижу проблем.
0
 Аватар для SerVal
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
10.08.2015, 12:16
Цитата Сообщение от Renji Посмотреть сообщение
На пальцах. Есть глобальная переменная "сколько у нас свободной памяти". Один поток хочет эту переменную прочитать, другой изменить.
Кто ж создаёт параллельные процессы, понатыкав глобальные переменные?
Этак мы договоримся до того, что одна программа меняет registry, а остальные должны ждать, когда она завешится.
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
10.08.2015, 12:27
Цитата Сообщение от Renji Посмотреть сообщение
И нифига в это время не делают.
Это если они до этого места в программе дошли. Иначе они работают как и работали. Если уж такая крутая и важная переменная, то скорее всего она уже захвачена системой и доступ к ней атомарный предоставляет сама система, а кодер выдумывает велосипед.
0
Заблокирован
10.08.2015, 19:39
Цитата Сообщение от Enno Посмотреть сообщение
Не надо выдумывать. Потоки выполняли идентичные задачи.
- я не выдумываю а спрашиваю, касательно времени как оно считалось?(clocks GetTickCount GetPerformanceCounter)

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от Enno Посмотреть сообщение
Считал среднее время на итерацию по факту (5 запусков с одними параметрами).
- ну это не показатель, система могла быть загружена по разному, это уже первая неточность вообще невозможно адекватно измерить нагрузку наядро, но пока мне интересно как контролировалось время.А почему 5 раз а не 10 - распределние стьюдента для 5 процентов даёт ещё ощутимую погрешность.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2015, 19:39

Как задействовать многопоточность для обработки больших запросов в WebBrowser
Здравствуйте,нужна помощь. Как создать потоки,многопоточность,в программе присутствует веб браузер,далее цикл на поиск некого значение на...

Как задействовать программу пароля для ноута по отпечатку пальца?
Процедура сброса БИОСа замыканием контактов батарейки и запуска ноута Леново без харда и озу не сработала. Сбросить удалось практически...

Как реализовать задержку выполнения определённой части программы без полной задержки всей программы?
Ниже представлен упрощённый код игры, в которой герой управляется ПКМ и подбирает предметы ЛКМ, которые перемещаются в инвентарь....


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru