|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2019, 15:08 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Смержил. Вечером потещу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 09:22 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Затестил. Пока результат .. не очень. Складывается ощущение что где-то идет жесткая конкуренция между вычислительными потоками. Приложение в 1 поток отработало быстрее чем многопоточные кейсы. Я слегка изменил скриптик добавив 3-й опциональный параметр от 1.. до 12 Код: sql 1. 2. 3. 4. 5. 6. 7.
Щас приаттачу лог и цифирки. Код: 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. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 20:41 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Еще заметно что рабочие потоки не загружают ядра на 100%. Как будто они где-то простаивают. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 21:50 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
После 6 потоков время не растет. Запирает как будто есть какой-то ограничитель. И вообще .. должно не расти а уменьшаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 21:58 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Скрин где видно простой процессоров на 10 потоках. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 22:01 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonЗатестил. Пока результат .. не очень. Складывается ощущение что где-то идет жесткая конкуренция между вычислительными потоками. Приложение в 1 поток отработало быстрее чем многопоточные кейсы. Я слегка изменил скриптик добавив 3-й опциональный параметр от 1.. до 12 Код: sql 1. 2. 3. 4. 5. 6. 7.
Щас приаттачу лог и цифирки. Код: 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. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343.
Забыл вывод статистики отключить, запушил, обновись. Результаты очень странные, свел в таблицу Потоков Время мс19844219397317795420346528011629795730018830018929598 102972811294931229690 Время должно уменьшаться, а тут наоборот. Запусти еще с ключом 0, это исходный однопоточный код без акторов. Затестил у себя на i7-3770К 4 ядра + HT Код: 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.
Потоков Время мс Ускорение раз0136101137411.0269991.9351982.6441463.3537573.6634943.9731924.3830574.5 i7 6700K 4 ядра без HT Потоков Время мс Ускорение раз0115301110061.0259811.9343182.7435573.2 Похоже этот тест не очень подходит для замера производительности одного ядра, но очень сильно удивил твой результат, медленнее не должно становиться. Если это косяк моей либы с акторами, то это очень плохо, я не тестил ее на многоядерном линуксе. Сделаю загрузочную флэшку с линуксом, потестю у себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 08:13 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Насколько я понимаю рендеринг картинки должен подгружать CPU. В топе с 10-потоками висели ядра загруженные едва-ли на треть. Где-то они простаивают. А как отключать твои акторы? Там вроде 1 аргумент в конце только. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 12:52 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonНасколько я понимаю рендеринг картинки должен подгружать CPU. В топе с 10-потоками висели ядра загруженные едва-ли на треть. Где-то они простаивают. Похоже проблема в самодельном мутексе. В линуксе многоядерном я его не запускал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Попробуй цифру 20 на поменьше заменить. maytonА как отключать твои акторы? Там вроде 1 аргумент в конце только. Задать 0 потоков Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 14:06 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Возможно в этом и проблема. Второе. Как фиксить? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 14:26 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Чтобы не гадать - заменил для линукса блокировку на std::mutex, обновляйся. Должно заработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 14:37 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima T, вечерочком. Щас я погружен в Амазоны... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 14:50 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Я не понял как ты смотрел нагрузку в разрезе процов. Гугл предложил поставить htop, поставил. Дал виртуалке 3 ядра (на хосте 4 без HT), htop показывает загрузку 80+% на каждом ядре, суммарно 280%, но общее время чуть меньше однопоточного (10 сек вместо 12). Может это проблема многоядерных виртуалок. Флэшку с линуксом не нашел, на реальном железе потестить не получилось. Жду твой замер. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 18:00 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
ОК. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 18:11 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Я кстати в пул-реквестах вижу только 1. На удаление статистики. А был ли второй? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 18:12 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonЯ кстати в пул-реквестах вижу только 1. На удаление статистики. А был ли второй? Я так понял второй коммит в него же попал. Посмотри, там внутри должен быть коммит про замену на std::mutex Для проверки я вынес тип блокировки в вывод. Если все нормально, то появится строчка Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 18:21 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Смержил. Смотрю. Пока - хреновенько. Щас покажу фотку с htop. Судя по вики цветовая маркировка (зеленый - красный) должна означать соотв активность - потоков пользователя - потоков ядра https://ru.wikipedia.org/wiki/Htop В нашем случае мы слишком много сидим в ядре. Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 22:57 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Вместе с htop. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 23:03 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Если задать последний аргумент = 0 то вроде получше. 9 секунд. И красный градусник исчезает. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вобщем если это дело в акторах - то их надо фиксить. Они под линуксами не летают. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 23:10 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonЕсли задать последний аргумент = 0 то вроде получше. 9 секунд. И красный градусник исчезает. Это оригинальный код без акторов. С акторами в 1 поток близкое время 21857913 , а дальше начинается какая-то хрень (( maytonВобщем если это дело в акторах - то их надо фиксить. Они под линуксами не летают. Сегодня сделаю флэшку загрузочную с линуксом, затестю в линуксе. mayton Код: sql 1. 2. 3. 4. 5. 6.
Код: sql 1. 2. 3. 4. 5. 6.
Если я правильно понимаю, то с акторами 90% времени проходит в режиме ядра, т.е. тратится на синхронизацию потоков. В прошлый раз 21857731 похожее время было, так что вероятно дело не в usleep() mayton Код: sql 1. 2. 3. 4. 5.
Есть подозрение на распараллеливающийся актор (расчет одной точки), т.е. несколько однотипных обработчиков с общей очередью. Возможно когда несколько потоков пытаются одновременно из одной очереди получить сообщение, то это получается далеко не с первого раза. При увеличении количества потоков вероятность такой ситуации возрастает. Затем после расчета ситуация повторяется еще раз, т.к. все 12 потоков пишут результат в одну очередь следующего актора, который выводом занимается. Непонятно почему в виндовсе этой проблемы нет на 8 лог. процах? Попробую заменить std::mutex на линуксовый мутекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 08:46 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TЕсть подозрение на распараллеливающийся актор (расчет одной точки), т.е. несколько однотипных обработчиков с общей очередью. Возможно когда несколько потоков пытаются одновременно из одной очереди получить сообщение, то это получается далеко не с первого раза. При увеличении количества потоков вероятность такой ситуации возрастает. Затем после расчета ситуация повторяется еще раз, т.к. все 12 потоков пишут результат в одну очередь следующего актора, который выводом занимается. Непонятно почему в виндовсе этой проблемы нет на 8 лог. процах? Попробую заменить std::mutex на линуксовый мутекс.привет, ты же вроде делал sleep под виндой? у винды вытесняемая многопоточнось ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 09:31 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Dima TЕсть подозрение на распараллеливающийся актор (расчет одной точки), т.е. несколько однотипных обработчиков с общей очередью. Возможно когда несколько потоков пытаются одновременно из одной очереди получить сообщение, то это получается далеко не с первого раза. При увеличении количества потоков вероятность такой ситуации возрастает. Затем после расчета ситуация повторяется еще раз, т.к. все 12 потоков пишут результат в одну очередь следующего актора, который выводом занимается. Непонятно почему в виндовсе этой проблемы нет на 8 лог. процах? Попробую заменить std::mutex на линуксовый мутекс.привет, ты же вроде делал sleep под виндой? у винды вытесняемая многопоточнось Верно, под виндой spinlock + Sleep(0), но вытеснять некуда, т.к. потоков столько же сколько логических процов. Под виндой работает, тут речь про линукс mayton`а, там тормозит и со spinlock и с std::mutex, осталось попробовать вариант с родным линуксовым мутексом. Причем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 10:38 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TПричем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек.всё логично, сброс кеша как раз раз в 5 убивает производительность памяти sleep фактически заставлял планировщик работать с памятью только 1-му процу, притормаживая конкурирующие потоки ну нельзя одну и ту же память долбить одновременно с разных процов :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 10:50 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima Tkealon(Ruslan)пропущено... привет, ты же вроде делал sleep под виндой? у винды вытесняемая многопоточнось Верно, под виндой spinlock + Sleep(0), но вытеснять некуда, т.к. потоков столько же сколько логических процов. Под виндой работает, тут речь про линукс mayton`а, там тормозит и со spinlock и с std::mutex, осталось попробовать вариант с родным линуксовым мутексом. Причем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек. Ты что по 1 пикселю на поток считаешь? Я бил картинку на прямоугольники в пропорции пополам или по золотому сечению (там вобещем 3 стратегии деления области пополам). И каждый поток у меня обрабатывал прямоугольник и потом на мьютексе стоял ожидая когда освободится растр картинки чтобы слить туда результаты. Это в реализации Java-mt. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 13:19 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Еще можно посмотреть из любопытства как работает OpenMP. В идеале добавить камент перед циклом и дальше Код: plaintext 1.
- всё должно [i]взлететь в шоколаде [/i]. Вобщем как в сказке у Джоан Роулинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 13:22 |
|
|
start [/forum/topic.php?fid=16&fpage=10&tid=1339960]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 170ms |
0 / 0 |