|
|
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть программа, написана на delphi 2010, запускаю под windows 7. Программа запускает 10 потоков которые обрабатывают некие данные и отдают сумму основному потоку, тот "суммирует" полученные данные со всех потоков и отображает результат. Всё работает, вычисляет и вроде проблем нет... но загрузка процессора в Windows ~ 15%. Мощности простаивают. Хочется заставить работать всё это дело быстрее. Что я проделывал : 1. Пытался увеличить количество используемых потоков вплоть до 100, толку нет, в среднем получается что за единицу времени программа обрабатывает одинаковое количество заданий (данных). При этом загрузка процессора в Windows ~ 100% 2. Запускал несколько "клонов" программы. Реально помогает. До 8 клонов есть смысл запускать, т.е. количество обрабатываемых данных пропорционально возрастает. При этом загрузка процессора в Windows ~ 100% Исходя из этого у меня два варианта : а) слабое место это основной поток - который не успевает проссумировать то что ему отдают и потоки выстраиваются в очередь и простаивают. б) windows не отдает одной программе процессорного времени больше какого-то лимита Логичнее кажется вариант "а", но основной поток занимается только тем что получает только 1 цифру,складывает её с общей суммой и выводит в Caption формы... не вижу что здесь может настолько задерживать весь процесс. Если есть идеи как определить проблемное место, подскажите пожалуйста. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 00:38 |
|
||
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
parb, для начала - попробуйте пореже выводить в Caption . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 01:24 |
|
||
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
parb, Ограничения на процессорное время можно только за счёт приоритетов. Тут же скорее Delphi глючит. В студии 8 потоков акурат заняли все 8 ядер, причётм гдра как-то равномерно загружались. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 10:09 |
|
||
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
parbа) слабое место это основной поток - который не успевает проссумировать то что ему отдают и потоки выстраиваются в очередь и простаивают. а каким образов потоки взаимодействуют? уверен что проблема в способе "общения" между потоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 12:22 |
|
||
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
доигрался до такого... код ( попытка загрузить проц, расчётом простое ли число 99999 ) : Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Код: pascal 1. 2. 3. 4. 5. 6. 7. код в виде представленном выше, успешно загружает 8 ядер и соответственно даёт 100% нагрузку. Но стоит в процедуре somethingToString убрать комментарий со строки Код: sql 1. и появляется проблема. Загрузка не растёт выше 15%, а увеличение количества потоков не сказывается на загруженности и количестве обработанных данных ( количество вызовов SyncronizeValue( mockData ); в единицу времени) что я делаю не так ? P.S. проблему в работе со строками я начал искать после того как наткнулся на фразу : Rather use var parameters in a procedure instead of a function returning a string (a function returning a string will add an UStrAsg/LStrAsg call which has a LOCK which will flush all CPU cores); но получить такой результат я уж точно не планировал :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2013, 13:59 |
|
||
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
parbНо стоит в процедуре somethingToString убрать комментарий со строки Это связано с тем, что string и к тому-же объявлена как var. http://stackoverflow.com/questions/7725813/what-is-new-in-multithreading-in-delphi-xe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 11:43 |
|
||
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
parb, Точно НЕ вариант Б, однозначно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 11:47 |
|
||
|
Есть ли в windows ограничение проц.времени на приложение ?
|
|||
|---|---|---|---|
|
#18+
parb, мне кажется ты неверно акцентируешь цель. Ведь загрузить на 100% процессор всегда можно. Дурное дело не хитрое. Но как у тебя получается что "мастер поток" является тормозом по отношению к "рабочим потокам" ? Тут какое-то неверное проектирование. Вобщем без исходника и юзкейса вообще нифига непонятно. В примере с расчётом primes нужно считать от 3 с шагом 2. Делене на 2 расчитать вручную вне второго цикла. И это еще не все оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 23:05 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38103084&tid=1341972]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
121ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
177ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 592ms |

| 0 / 0 |
