Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Добрый день! Сейчас МНОГОПОТОЧНАЯ программка выполняется в одноядерной виртуальной машине. Скорость устраивает. Но хотим выделить нормальную, многоядерную машину(4 или 8), в связи с тем, что там находится и СУБД. В СУБД пока данных мало, это и пугает. Visual c++ 2010 XE. В частности куски программки есть тут . Вопрос. Следует ли ожидать увеличения скорости выполнения программы?(скорее всего да, но все таки) И все ли ядра будут использоваться в одном запуске многопоточной программы? (вот тут действительно не понятно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 15:37 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipok, скажем так - увеличение скорости работы программы возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 15:46 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipokВопрос. Следует ли ожидать увеличения скорости выполнения программы?(скорее всего да, но все таки) Да, если программе не хватает именно процессорного времени. У тебя возможно затык в сети, т.к. все 300 потоков одновременно начинают ее пользовать. vadipokИ все ли ядра будут использоваться в одном запуске многопоточной программы? (вот тут действительно не понятно) 300 твоих потоков распределятся на все ядра. Я бы для начала посмотрел как сейчас загружен проц на виртуалке. Если постоянно на 100%, то должно помочь. Если всплесками - то поразбираться PS Надеюсь ты переписал как я в конце советовал, чтобы объект не создавался каждый раз. PPS Забыл тогда дописать, я бы еще посоветовал развести пробуждение потоков по времени через какой-то промежуток, например 1 сек., тебе же главное периодичность раз в минуту и не критично если первый IP будет опрашиваться всегда в 00 сек, второй в 01 сек и т.д., тогда и одного процессора в виртуалке может хватить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 16:07 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Добрый день! Спасибо! Dima TДа, если программе не хватает именно процессорного времени. У тебя возможно затык в сети, т.к. все 300 потоков одновременно начинают ее пользовать. 300 твоих потоков распределятся на все ядра. Потоков уже 500. Dima TЯ бы для начала посмотрел как сейчас загружен проц на виртуалке. Если постоянно на 100%, то должно помочь. Если всплесками - то поразбираться C++ программка забивает полностью, потом отпускает, если помните там стоял Sleep(60000); этим и объясняется. Dima TPS Надеюсь ты переписал как я в конце советовал, чтобы объект не создавался каждый раз. Переписал, но скорость не устроила. Может что-то не так делаю? Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Это ключевые изменения вашего примера. Если честно, то так и не удалось записать в char employeeID[1000]; значение employeeID. На время тестов просто записал 434. Dima TPPS Забыл тогда дописать, я бы еще посоветовал развести пробуждение потоков по времени через какой-то промежуток, например 1 сек., тебе же главное периодичность раз в минуту и не критично если первый IP будет опрашиваться всегда в 00 сек, второй в 01 сек и т.д., тогда и одного процессора в виртуалке может хватить. Так нельзя сделать, запись в СУБД же происходит. А вектор для INSERT один для всех потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 13:35 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipokDima TPPS Забыл тогда дописать, я бы еще посоветовал развести пробуждение потоков по времени через какой-то промежуток, например 1 сек., тебе же главное периодичность раз в минуту и не критично если первый IP будет опрашиваться всегда в 00 сек, второй в 01 сек и т.д., тогда и одного процессора в виртуалке может хватить. Так нельзя сделать, запись в СУБД же происходит. А вектор для INSERT один для всех потоков. Я так понимаю "вектор для INSERT" это хранилище результатов твоих замеров для всех потоков. Узкое место. Что мешает заменить на вектор на очередь и создать отдельный поток для записи в БД? Т.е. потоки пишут свои замеры в очередь, отдельный поток для обмена с БД периодически проверяет что очередь не пуста и если что-то есть, то пишет это в БД. Если получится избавится от этого вектора, то цикл снаружи можно будет не запускать, перенести ожидание во внутрь потока. Попозже пример сделать постараюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:16 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipokДобрый день! Спасибо! Dima TДа, если программе не хватает именно процессорного времени. У тебя возможно затык в сети, т.к. все 300 потоков одновременно начинают ее пользовать. 300 твоих потоков распределятся на все ядра. Потоков уже 500. А зачем тебе столько, сынок ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:45 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Даже не знаю как объяснить. В начале начальник планировал сканировать за раз 50 машин, я тоже так думал. Забили, ок, все работает. Забили больше, опять работает. )) Дальше больше, и забили всех. Довольно быстро отрабатывает один круг, поэтому так и оставили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 16:35 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipok, А ты про Thread Pool слышал? Когда кол-во активных потоков больше количества ядер, то в таком случае имеет место снижение производительности за счёт переключения контекста между потоками на каждом ядре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 16:42 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
NekZ, В нашем случае не так, доказали методом проб. Этот закон наверно работает при сложных расчетах. А у нас тупо извлечение информации по сети. Причем время отклика информации далеко не одинаково. Для некоторых машин мгновенно, а некоторые приходится ждать и по 20-30 секунд. И все это время запущенный процесс не рассчитывает, а тупо ждет.(это уже я так думаю) vadipokДобрый день! Сейчас МНОГОПОТОЧНАЯ программка выполняется в одноядерной виртуальной машине. Скорость устраивает. Обратите на это внимание, я не жалуюсь на скорость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 16:50 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Изучай Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. Заметь что каждый поток повторяет цикл через равный промежуток времени (TIME_STEP). Если минута то TIME_STEP 60000 Для равномерности распределения нагрузки поиграй параметром TIME_OFFSET. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 17:47 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipokMasterZiv, Даже не знаю как объяснить. Если не знаешь, как объяснить, значит, и вообще не знаешь. Потоков бессмысленно иметь больше, чем кол-во процессоров. Можно кол-во потоков иметь больше, чем процессоров, на какой-то коэффициент -- коэффициент простоя -- отношение времени, когда задача работает на процессоре ко времени, когда она не в процессоре. В твоём случае 500 / (скажем, на 8) = 62 потока на процессор, это тогда коэффициент простоя должен быть 1/64 == 1.5 процента. Это очень мало. Т.е. твои задачи должны быстро заскочить в проц, общитаться, и -- вывалиться ждать чего-то снаружи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 19:07 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
MasterZivПотоков бессмысленно иметь больше, чем кол-во процессоров. Смысленно :) в его случае, там паузы большие по окончанию цикла обработки, просто не надо их одновременно пробуждать чтоб потоки усиленно боролись за процы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 19:14 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Dima TСмысленно :) в его случае, там паузы большие по окончанию цикла обработки, просто не надо их одновременно пробуждать чтоб потоки усиленно боролись за процы.Только в этом случае проще вообще выкинуть многопоточность и запускать потоки в цикле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 21:05 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipokMasterZiv, Даже не знаю как объяснить. В начале начальник планировал сканировать за раз 50 машин, я тоже так думал. Забили, ок, все работает. Забили больше, опять работает. )) Дальше больше, и забили всех. Довольно быстро отрабатывает один круг, поэтому так и оставили. Вобщем ничего непонятно. Всё устраивает... но начальник чего-то хочет. Птичьего молока наверное. Или с ужасом прогнозирует какой-то провал в перформансе всвязи с ... чем? А фиг его знает с чем. Кабычегоневышло... Или а вдругспросят... Ну вобщем дай ему почитать про Заком Амдала . Дай ему также читануть статью Кнута под названием У создателей комьютеров кончились идеи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 21:21 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Dima Tпросто не надо их одновременно пробуждать чтоб потоки усиленно боролись за процы Так это и есть пул потоков :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 21:24 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Вообще данная задача (много одновременных сетевых операций) наиболее правильно решается через пул потоков выполняющих операции асинхронно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 21:28 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
maytonВобщем ничего непонятно. Всё устраивает... но начальник чего-то хочет. Птичьего молока наверное. Или с ужасом прогнозирует какой-то провал в перформансе всвязи с ... чем? А фиг его знает с чем. Кабычегоневышло... Или а вдругспросят... Ну вобщем дай ему почитать про Заком Амдала . Дай ему также читануть статью Кнута под названием У создателей комьютеров кончились идеи. Стоп, стоп, коллеги! MasterZiv спросил почему 500, и я ответил. Вы теряете связь. Этот топиг несет информативный характер для меня. (Вопросы конкретные были в первом сообщении.) Дальше я просто отвечал людям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 22:01 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
mayton, А за ссылку спасибо, не знал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 22:02 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Dima T Изучай Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. Заметь что каждый поток повторяет цикл через равный промежуток времени (TIME_STEP). Если минута то TIME_STEP 60000 Для равномерности распределения нагрузки поиграй параметром TIME_OFFSET. Ок, спасибо большое! Завтра буду ставить эксперименты на работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 22:03 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDima TСмысленно :) в его случае, там паузы большие по окончанию цикла обработки, просто не надо их одновременно пробуждать чтоб потоки усиленно боролись за процы.Только в этом случае проще вообще выкинуть многопоточность и запускать потоки в цикле. Кстати, такие эксперименты я делал. Скорость получилась лучше, когда запускал все одновременно. Скорее всего не грамотно делал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 22:09 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
vadipokПотоков уже 500. Еще учти что каждому потоку создается стек 1 Мб, т.е. 0,5 Гб в твоем случае. Смотри чтоб памяти хватало в твоей виртуалке, а то свопится начнет и тормоза возрастут. Своп смотреть в диспетчере задач параметр "Ошибок страниц (изменение)" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 06:53 |
|
||
|
Скорость выполнения множества потоков в многоядерном процессоре.
|
|||
|---|---|---|---|
|
#18+
Dima TvadipokПотоков уже 500. Еще учти что каждому потоку создается стек 1 Мб, т.е. 0,5 Гб в твоем случае. Смотри чтоб памяти хватало в твоей виртуалке, а то свопится начнет и тормоза возрастут. Своп смотреть в диспетчере задач параметр "Ошибок страниц (изменение)" Добрый день! В общем все ок, все работает. Показатели процессора и памяти записываются каждую минуту. А информация о запущенных процессах записываются 1 раз в 15 шагов. То есть примерно 1 раз в 15 минут,иначе залью в СУБД излишнюю информацию. Вот тут были некоторые трудности. Реализовал вот так: Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Не судите строго, все таки я далеко не профи в С++. Спасибо всем, топик можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 11:02 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38785780&tid=2019255]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 147ms |

| 0 / 0 |
