![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 10.03.2009
Сообщений: 15
|
![]()
Здравствуйте!
Пытаюсь полностью использовать ресурс процессора (4 ядра). Для этого создаю 4 потока, которые должны выполнять одинаковые операции с разными элементами массива, являющегося полем класса. Каждый поток по очереди (в мъютексе) берёт текущее значение индекса массива и увеличивает индекс (объявлен как class var в классе TCalculateThread). Если индекс не превышает размер массива, то выполняется метод класса, производящий нужные действия (или если говорить точно, то массив в классе многомерный и метод выполняется в циклах). При этом операции при разных индексах абсолютно независимы. При этом % занятости процессора практически не отличается от варианта без использования потоков. Вопрос: почему не получается занять процессор полностью? Может ли это быть результатом использования классов? Код описывающий потоки: Код:
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 10.03.2009
Сообщений: 15
|
![]() Код:
Код:
|
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]()
1. приаттаченый проект приятнее читать
2. почему не критическая секция? 3. не принято делать работу в Create убери оттуда DoThreads 4. ты уверен что FPrevMesh.MovePoint не лезет в гуй? 5. попытка оптимизировать экстенсивным способом... много калла в твоем 4 этажном цикле, для скорости кал иногда нужно развернуть, убрать стековую подачу параметров... 6. может репорт PostMessage частый? за модить так на 10 попробуй в общем без проекта и секундомера не обойтись
Не стесняемся, плюсуем!
![]() |
![]() |
![]() |
![]() |
#4 | ||||||
Пользователь
Регистрация: 10.03.2009
Сообщений: 15
|
![]() Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Спасибо за помощь. |
||||||
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]()
var Data - можно заменить на var i:integer;
Код:
Не стесняемся, плюсуем!
![]() |
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 10.03.2009
Сообщений: 15
|
![]()
Добрый вечер!
Честно говоря не понял что принципиально должны изменить предложенные изменения, кроме повышения компактности и элегантности кода. Для проверки гипотезы Цитата:
Код:
Код:
Сейчас перерабатываю вызов: Код:
|
|
![]() |
![]() |
![]() |
#7 | |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]() Цитата:
Покажи лучше содержимое FPrevMesh.MovePoint(w,i,j,l,FBounds .Bound[w],FDim3);
Не стесняемся, плюсуем!
![]() |
|
![]() |
![]() |
![]() |
#8 | |
Пользователь
Регистрация: 10.03.2009
Сообщений: 15
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 10.03.2009
Сообщений: 15
|
![]() Код:
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 10.03.2009
Сообщений: 15
|
![]() Код:
Попытка переделать метод в просто процедуру и использовать указатели на ячейки массивов не увенчалась успехом. По прежнему используется одно ядро (судя по загрузке ЦП). Новые данные: Если вставить в процедуру Код:
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование классов С++ | Anderkor | Помощь студентам | 0 | 19.12.2012 00:13 |
Использование классов | Balabek | Общие вопросы C/C++ | 8 | 24.09.2012 09:39 |
Использование классов | SoftKoc | Свободное общение | 5 | 11.02.2011 20:05 |
Создание классов и использование объектов классов при написании программ в среде C++. | Frozen inside | Помощь студентам | 0 | 16.04.2009 23:18 |
Использование потоков | Repz | Общие вопросы Delphi | 6 | 25.01.2008 14:20 |