3 / 3 / 0
Регистрация: 02.01.2015
Сообщений: 39

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

08.08.2015, 09:39. Показов 9117. Ответов 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 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru