|
Особенности многопоточности виндовса и линукса, 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 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Dima TПричем тормозит очень сильно, 12 потоков считают втрое дольше чем один. И самое главное там нагрузка на акторы мизерная, т.к. обработка сообщений достаточно тяжелая. Всего 27 тыс. сообщений в секунду при тестовой прокачке в 50 млн./сек.всё логично, сброс кеша как раз раз в 5 убивает производительность памяти sleep фактически заставлял планировщик работать с памятью только 1-му процу, притормаживая конкурирующие потоки ну нельзя одну и ту же память долбить одновременно с разных процов :-( Надо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 14:09 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Смержил не глядя. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 14:18 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Странно что ты не использовал Код: plaintext 1. 2.
как в этом примере. www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html Ты мог резать картинку на 8 частей. 8 прямоугольников размером 256х128. И спокойно запускать 8 позиксных потоков и потом в конце слить (pthread_join) результат даже не в потоке а в функции main последовательно. Возможно ты очень сильно хотел погонять свою библиотечку лайтовых акторов? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 14:27 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonТы что по 1 пикселю на поток считаешь? Я бил картинку на прямоугольники в пропорции пополам или по золотому сечению (там вобещем 3 стратегии деления области пополам). И каждый поток у меня обрабатывал прямоугольник и потом на мьютексе стоял ожидая когда освободится растр картинки чтобы слить туда результаты. Это в реализации Java-mt. Да, по одному. Но это не значит что на каждый по потоку, просто есть очередь заданий, которая разгребается N параллельными обработчиками (акторами). Я уже думал увеличить задание, например считать строку за раз, но это неспортивно, акторный фрэйморк отчасти нужен для того чтобы не заморачиваться этим вопросом. Сделал флэшку загрузочную, затестил в линуксе на своем компеi5-660 2 ядра + HT Ubuntu 18.04.2 Код: 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.
17 сек в 1 поток, 13 сек - 4 потока. Есть ускорение от акторов. Похоже дело не в линуксе, а в AMD. Как-то по другому в нем распараллеливание работает. Дома есть старенький ноут с AMD процом, потестю на нем вечером. Запушил обновление с заменой std::mutex на родной pthread_mutex, как время будет - затести на 1 (не 0) поток и 12. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 14:30 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonСтранно что ты не использовал Код: plaintext 1. 2.
как в этом примере. www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html Ты мог резать картинку на 8 частей. 8 прямоугольников размером 256х128. И спокойно запускать 8 позиксных потоков и потом в конце слить (pthread_join) результат даже не в потоке а в функции main последовательно. Возможно ты очень сильно хотел погонять свою библиотечку лайтовых акторов? Можно написать вариант на потоках хотя бы просто для дополнительного теста параллелизма. Акторы это способ уйти от геморроя многопоточного программирования с явным использованием потоков, блокировок и т.п. Акторы избавляют от явного управления потоками. На акторах не надо заморачиваться с потокобезопасностью доступа к данным. Твоя схема разбить на N частей неоптимальна, разные пиксели считаются с разной скоростью, т.е. разные блоки обсчитаются за разное время, мы это проходили еще когда я это на C# параллелил. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 15:29 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Все верно. Вообще в мультипоточке при планировании тасок нельзя никогда расчитать точное время работы потока. Кстати технология fork-join на этом и основана. Мы никогда не спрогнозируем. Но эвристика деления рекурсивно всего объема задач на неравные чатси (по Паретто или по золотому сечению) гарантирует что будет N потоков непрерывно заряжены работой. И будет планировщик который обеспечит деление задачи примерно на не слишком разные части. Вот к примеру я запускаю в 2 потока Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Форк-джойн включен всегда. G_RATIO - это и есть золотое сечение. segmentsize = 2048 - это прямоугольник в пикселах который будет рекурсивно делится на под-прямоугольники до тех пор пока размер площади не будет меньше 2048. Я согласен что я потратил какое-то время разработки на стратегии деления растра на сегменты. Но это неизбежно. Если процессить по 1 пикселу то для классической мультипоточности это слишком мелко. Много времени потратим на техническое обслуживане потоков. Или странный эффект который мы наблюдали в Ubuntu 18.x.x/AMD где синхронизация заняла большую часть времени. Кажется это можно назвать когеррентностью (в части усложнения формулы Амадала). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 15:46 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Вот эта опция --drawseg просто рисует на картинке зеленой пунктирной линией сами сегменты. Это я для отладки делал. Можно их там по разному менять и смотреть какой будет эффект. Результаты пока еще актуальны для Ubuntu 18.x./Core i3 (это мой старый ноут) но скоро я перетещу всё на AMD. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 16:00 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TЗапушил обновление с заменой std::mutex на родной pthread_mutex, как время будет - затести на 1 (не 0) поток и 12. Я затещу все варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 16:03 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TЯ уже думал увеличить задание, например считать строку за раз, но это неспортивно, акторный фрэйморк отчасти нужен для того чтобы не заморачиваться этим вопросом. Я не знаю как ты дизайнил этот фреймворк. Но мне кажется что в реальности актор может делать достаточно объемистый кусок бизнес-действия. Например - сходить в микросервис и взять какие то данные по url. И это действие полюбому не укладывается в микросекунды. Тоесть действие достаточно увесистое. Не пиксел посчитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 16:10 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonВот эта опция --drawseg просто рисует на картинке зеленой пунктирной линией сами сегменты. Это я для отладки делал. Можно их там по разному менять и смотреть какой будет эффект. Результаты пока еще актуальны для Ubuntu 18.x./Core i3 (это мой старый ноут) но скоро я перетещу всё на AMD. Запушил вариант с разбивкой на N блоков. Не понял твой хитрый алгоритм деления, можно попробовать его добавить. Пока тупо разделил на равные блоки по N строк. Как и писал - время на блок разное получается, но с другой стороны параллельность полная и чем больше ядер, тем меньше это влияет. Затести на своих 12. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 17:01 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TmaytonВот эта опция --drawseg просто рисует на картинке зеленой пунктирной линией сами сегменты. Это я для отладки делал. Можно их там по разному менять и смотреть какой будет эффект. Результаты пока еще актуальны для Ubuntu 18.x./Core i3 (это мой старый ноут) но скоро я перетещу всё на AMD. Запушил вариант с разбивкой на N блоков. Не понял твой хитрый алгоритм деления, можно попробовать его добавить. Пока тупо разделил на равные блоки по N строк. Как и писал - время на блок разное получается, но с другой стороны параллельность полная и чем больше ядер, тем меньше это влияет. Затести на своих 12. Это не суть важно. Можно делить и на равные части. Просто наш рекурсивный трассировщик луча все равно разные сегменты картинки рендерит с разной скоростью. Тут можно угадывать плюс-минут 500%. Поэтому не принципиально как. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 17:10 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonDima TЗапушил обновление с заменой std::mutex на родной pthread_mutex, как время будет - затести на 1 (не 0) поток и 12. Я затещу все варианты. Смержил "Добавил распараллеливание расчетом N блоков" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:07 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Мне кажется тема этого топика более глубокая. По сути мы сравниваем примитивы синхронизации Windows/Linux. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:13 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TНадо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку.вообще не панацея, гораздо легче просто не создавать такие мелкие задачи, что бы транспорт не ломился в узкий канал ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:17 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonМне кажется тема этого топика более глубокая. По сути мы сравниваем примитивы синхронизации Windows/Linux. Все верно, я это в названии темы указал в скобках, и вдобавок есть особенности архитектуры Intel и AMD. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:18 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonDima TЯ уже думал увеличить задание, например считать строку за раз, но это неспортивно, акторный фрэйморк отчасти нужен для того чтобы не заморачиваться этим вопросом. Я не знаю как ты дизайнил этот фреймворк. Но мне кажется что в реальности актор может делать достаточно объемистый кусок бизнес-действия. Например - сходить в микросервис и взять какие то данные по url. И это действие полюбому не укладывается в микросекунды. Тоесть действие достаточно увесистое. Не пиксел посчитать. Да, в реальности мало задач где можно много что рапараллелить. Тут я взял максимально мелкую сущность, т.е. расчет одного пикселя. Можно безболезненно за раз делать расчет одной строки, тогда нагрузка на акторный фрэймворк резко снизится. Я пробовал считать строками - на моих компах я разницы почти не заметил, всего на пару процентов быстрее. Результат запуска у тебя сильно удивил, нашлось слабое место, надо поразбираться, надо понять почему так. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:28 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Dima TНадо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку.вообще не панацея, гораздо легче просто не создавать такие мелкие задачи, что бы транспорт не ломился в узкий канал В этой задаче интересно другое. Почему результат такой разный в матрице: Windows/Linux, Intell/AMD. Меня сейчас это тоже интересует и я не успокоюсь пока не разберу вместе с Димой на атомы эту проблему. По всей видимости мультипоточка в Linux - другая. И к ней нужны другие подходы. Мьютекс - или любой другой примитив завёрнутый в С++ библиотеки - уже сильная надстройка над примитивами. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:42 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Вот так. WindowsLinuxIntel Core i5AMD Ryzen 5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:44 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima Tmaytonпропущено... Я не знаю как ты дизайнил этот фреймворк. Но мне кажется что в реальности актор может делать достаточно объемистый кусок бизнес-действия. Например - сходить в микросервис и взять какие то данные по url. И это действие полюбому не укладывается в микросекунды. Тоесть действие достаточно увесистое. Не пиксел посчитать. Да, в реальности мало задач где можно много что рапараллелить. Тут я взял максимально мелкую сущность, т.е. расчет одного пикселя. Можно безболезненно за раз делать расчет одной строки, тогда нагрузка на акторный фрэймворк резко снизится. Я пробовал считать строками - на моих компах я разницы почти не заметил, всего на пару процентов быстрее. Результат запуска у тебя сильно удивил, нашлось слабое место, надо поразбираться, надо понять почему так. Давай почитаем про эту штуку https://en.wikipedia.org/wiki/Futex Подозреваю что для Windows она не очень нужна, но будет нужна для портирования твоих лайтовых акторов в Юнихи. Господа. Kealon, MasterZiv, Simargl, тоже буду рад вашим советам. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 18:53 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
mayton, Ну а что там разбираться, проц не напрямую лезет в память а сначала загружает её в кэш. С кэшем, который рядом ему работать очень быстро, постепенно сливая его изменения в память. Если в память лезет кто-то другой, кэш надо обновлять. При постоянной долбёжке памяти выходит, что проц работает с памятью напрямую, только и делая что обновляя кеш. И в этом случае всё фактически упирается в скрость шины данных между памятью и процем. Следую этому расуждению выходит что либо нужны какие-то схемы что бы разные процы использовали только свои участки памяти, либо сразу делали более весомый участок работ, т.е. выстраивались в очередь как со sleep ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 19:05 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Затестил на ноуте AMD A8-3510MXВиндовс Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Убунту 18 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Оказывается в нем 4 полноценных ядра с частотой 1.8-2.5 ГГц, а я его фотки смотреть покупал, он был лучший по цене )) ОС1 поток4 потокаWin756 392 msec16 729 msecUbuntu 1859 563 msec54 938 msec ХЗ как трактовать эти интересные цифры. Компиляторы разные, планирование потоков в ОС разное и т.д. PS Сейчас повторю эксперимент на ноуте с i3 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 19:19 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Dima TНадо для линукса что-то аналогичное виндовому Sleep(0). Но, думаю, и это не панацея когда несколько потоков начинает одновременно ставить блокировку.вообще не панацея, гораздо легче просто не создавать такие мелкие задачи, что бы транспорт не ломился в узкий канал Согласен, но интересно откуда такая гигантская разница? Выше писал 21859825 что укрупнение задачи почти не влияет на скорость на Intel+Win, хотелось бы повторить тенденцию в линуксе, точнее на AMD+Ubuntu. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 19:24 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TPS Сейчас повторю эксперимент на ноуте с i3 Похожая картина. В линуксе 1 и 4 потока одинаковы по времени, в виндовсе 4 потока вдвое быстрее. Точные цифры не показываю, т.к. с трудом загрузил линукс с флэшки, а оттуда логи не сохранились. Пока подозреваю что тормоза из-за использования линуксового мутекса, т.к. в винде спинлок. Я в акторах вижу архитектурную проблему: я добавил многопоточный актор для тех случаев когда у актора нет состояния, т.е. получил на вход сообщение, обсчитал, отправил на выход. По сути это N акторов с общей очередью входящих сообщений. Плюс в том что они извлекают сообщения из общей очереди по мере освобождения, минус в этом же, при одновременном освобождении конкуренция за извлечение сообщения из очереди. Можно сделать N одинаковых акторов, каждый со своей очередью, но тогда возникает проблема как их равномерно нагрузить 21859728 . Пока вижу что надо как-то организовать обратную связь от исполнителя к заказчику задания. Чтобы не как тут генерить кучу заданий, а потом ждать пока они выполнятся, а чтобы исполнитель как-то оповещал заказчика что он свободен. Заодно частично решается проблема неконтролируемого распухания очередей. Но тут тоже не все тривиально, т.к. если вызывать заказчика по освобождению исполнителя, то заказчик будет скакать с проца на проц для формирования очередного задания. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 20:35 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonДавай почитаем про эту штуку https://en.wikipedia.org/wiki/Futex Надо потестить. Поизучаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 20:36 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Ну а что там разбираться, проц не напрямую лезет в память а сначала загружает её в кэш. С кэшем, который рядом ему работать очень быстро, постепенно сливая его изменения в память. Если в память лезет кто-то другой, кэш надо обновлять. Для этих целей ввели несколько уровней кэша: кэш ядра, кэш проца. Железяка в итоге одна, т.е. данные между ядрами гоняются через общий кэш, а не через память. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 20:51 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Во первых. Перетестирую java-mt на количестве потоков от 1 до 12. Разумеется на борту у меня 6 ядер. 12 это гипер-трединг и как он маппится на вычислительные потоки хз. Тут много уровней абстракций. (потерянные 500 милисекунд - это время прогрева JVM. Тоесть по сути та дырка между тем как я в коде замеряю показания таймера и фактически временем пуска java-процесса с точки зрения операционки. Поэтому elapsed time фактически отличается от времени которое показывает утилита time) Я буду в табличке писать фактическое фремя которое намеряла утилтка тайм. Забавно. Но характер кривой не особо изменился по сравнению с 2х ядерным Intel Core i3. Наибольший перформанс - был где-то на 5 потоках. Дальше - деградация. У меня есть мысли как улучшить. Надо соптимизировать работу с коллециями на растровых операциях. Это финальная фаза где работа идет уже внутри мьютекса. Поэтому рост потоков не дает пользы. AMD Ryzen-5/Ubuntu 18.x.x LTS x64 Java-MT Threads Elapsed time111.665s26.515s35.315s43.928s53.879s63.767s73.752s83.623s95.433s106.865s117.070s127.247s Пот катом - лог Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 22:48 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
А вот скрин с сегментами. Сори за качество. Скруль сжимает PNG->JPG когда квота превышена. Так что линии могут быть слегка мутноваты. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 22:52 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Второе. Перейду к сям. Ого. Тут сразу 2 приложения. Акторное и обычное. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 23:03 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Готов акторный лог Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 23:21 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
И мультипоточный Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 23:23 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Картинка с графиком Java-MT: ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 23:31 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Хм... Хотел построить график для сей... и завис. А почему такое сильно разбегание времени для card-raytracer-cpp-mt.exe? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 23:38 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonХм... Хотел построить график для сей... и завис. А почему такое сильно разбегание времени для card-raytracer-cpp-mt.exe? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Надо было чем-то время замерить, в виндовсе для этого clock() подходит, он дает время в мс с момента запуска, а в линуксе он дает суммарное время работы всех ядер. Смотри на нижнее время, как понимаю real это фактическое время работы. Поправил, запушил. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 07:21 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonИ мультипоточный Код: 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. 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.
Похоже проблема не в коде. Тут до безобразия тупое решение, оставил только код касающийся распараллеливания: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Внутри потока никаких синхронизаций, только расчет. Исходник . Тут просто нечему тормозить. Расчет разбивается на thread_count частей и каждая часть считается в своем потоке. Единственный тормоз неравномерное разбиение на блоки, но все равно в 12 потоков должно быть быстрее чем в 1, а у тебя 1 поток за 9.6 сек считает, а 12 потоков 28.9 сек. Втрое медленнее быть не должно, в худшем случае должно быть чуть быстрее. Хотел написать что дело в проце, но глянул на твои замеры с java 21859984 и там видно что можно параллелить. Я не знаю где искать проблему. Может проблема в компиляторе? Попробуй -O3 заменить -O2 PS Глянул картинку, я накосячил немного, в обратном порядке в файл блоки пишутся, но на скорость расчета это не влияет. Поправлю попозже. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 08:03 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Можно залоггировать старт-стоп каждого потока? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 09:20 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonМожно залоггировать старт-стоп каждого потока? Можно. Добавлю. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 09:37 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 11:19 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonМожешь прокомментировать как ты делишь объём работ на каждый поток? Я делю строки на thread_count частей. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Можешь не вникать, я в вывод добавлю "Расчет блока: строки с ... по ..." ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 12:56 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Смержил. Тестирую. Пока решил делать от 1 до 4 потоков. Так быстрее. Баг с перевернутой мозаикой пока еще остался. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 13:22 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Время пофиксилось. Thanks. Но пользы от мультипоточки пока еще не видно. Надо курить дальше. Я думаю - что-то тривиальное. Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 13:25 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima T, слушай, а какой ГСЧ используешь? стандартын вроде как глобальные переменные использует, он то явно чаще вызывается чем переключение акторов ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 13:26 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Это мысль. В однопоточной Java я использовал один из линейных с изветными коэффициентами. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
В мультипоточке там встроенная функция Random::next() но она - dedicated для каждого узла ForkJoin и думаю что не пересекается в глобальном контексте нигде. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 13:35 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Dima T, слушай, а какой ГСЧ используешь? стандартын вроде как глобальные переменные использует, он то явно чаще вызывается чем переключение акторов Точно, вот я тормоз ))) Код: plaintext 1. 2. 3.
Сейчас переделаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 13:37 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Ну дай бох... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 13:42 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonВремя пофиксилось. Thanks. Но пользы от мультипоточки пока еще не видно. Надо курить дальше. Я думаю - что-то тривиальное. Там только вывод времени пофикшен. Запушил обновление с правильным порядком вывода блоков и отдельным ГСЧ для каждого потока. Сейчас интересно что получится. Мой результат на 4 ядрах с HT слева время в мс Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:00 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Dima T, слушай, а какой ГСЧ используешь? стандартын вроде как глобальные переменные использует, он то явно чаще вызывается чем переключение акторов Заменил на Код: plaintext 1. 2. 3. 4. 5.
Время работы не поменялось. Насколько я понимаю нынешние компиляторы все с многопоточным рантаймом, который при старте потока глобальные переменные библиотеки С++ размещает в TLS потока, т.е. свой rand() для каждого потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:10 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
В стек трассировщика поставь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:13 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TmaytonВремя пофиксилось. Thanks. Но пользы от мультипоточки пока еще не видно. Надо курить дальше. Я думаю - что-то тривиальное. Там только вывод времени пофикшен. Запушил обновление с правильным порядком вывода блоков и отдельным ГСЧ для каждого потока. Сейчас интересно что получится. Мой результат на 4 ядрах с HT слева время в мс Код: 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.
А можно как-то ID-потока получить? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:14 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonА можно как-то ID-потока получить? Можно. Добавил. Хотя там и так понятно по диапазону обрабатываемых строк. Так выглядит Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:32 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Почему такой долгий старт? Между стартом первого и последнего потока - почти полторы секунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:45 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Смержил. Но тестить буду вечером. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:46 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonПочему такой долгий старт? Между стартом первого и последнего потока - почти полторы секунды. Время не смотри, я тебе показал как id потока выглядит. Это 7 потоков в одноядерной виртуалке в под отладчиком MSVC. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:49 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Просто когда я разбираюсь с перформансом - смотрю на диаграмму событий во времени и пытаюсь понять что пошло не так. И где есть бутылочное горло. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:57 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Добавил расчет строками на акторах. Там всего 512 сообщений запускается, у меня стало быстрее на 0.1 сек. Затести card-raytracer-cpp-actor3.exe ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 18:50 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Классно. А можно регулировать размер порции данных для актора? К примеру я захочу по 2 строки толкать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 18:53 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonА можно регулировать размер порции данных для актора? К примеру я захочу по 2 строки толкать? Можешь, мой исходник бери и правь как тебе захочется. Там все просто и понятно. Но я не вижу смысла укрупнять: 512 строк за 10 сек это 19.5 мс на строку, это очень большой кусок. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 19:06 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Запустил в линуксе на моем i3-2310M Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
PS Забыл однопоточно запустить ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 19:25 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TДобавил расчет строками на акторах. Там всего 512 сообщений запускается, у меня стало быстрее на 0.1 сек. Затести card-raytracer-cpp-actor3.exe Merged in master. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 21:44 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TДобавил расчет строками на акторах. Там всего 512 сообщений запускается, у меня стало быстрее на 0.1 сек. Затести card-raytracer-cpp-actor3.exe Ты пишешь про card-raytracer-cpp-actor3.exe но в сборочном скрипте такого output нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 21:50 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Затестил. Мультипоточный вариант - уже очень хорошо. Акторный - пока хреновенько. Наращивание акторов не добавляет мощности к этому софту. Надо что-то кумекать архитектурно. Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 21:55 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Ага. Увидел. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 22:00 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Что-то кривенько было. Еще раз перетестил. Вроде лучше. Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 22:06 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
насколько помню, там параллелить надо было поперек, а не вдоль потому переписывать алгоритм на 100%. я не стал ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 22:14 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Я смотрю после 4 потока еще перформанс растет. Расширю до 12. Отлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office. Он какие-то стрёмные графики рисует. Так-что прошу кого-то выбрать цифирки и отобразить. Код: 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. 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. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 22:19 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Siemarglнасколько помню, там параллелить надо было поперек, а не вдоль потому переписывать алгоритм на 100%. я не стал Ты имеешь в виду векторизацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 22:20 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Обновил run-скрипты. Добавил скрипт для Виндовс. Обновитесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 22:54 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonЯ смотрю после 4 потока еще перформанс растет. Расширю до 12. kealon(Ruslan) был прав 21860492 тормозил rand() maytonОтлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office. Позже сделаю. Еще надо вернуть в акторы спинлок (который я на мутекс заменил) и перетестить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 06:12 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Ты boost-примитивы пробовал? В сравнении с std. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 09:01 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Интересный топик получился. Надо-бы что-то подобное поднять. На тему мультизадачности и кешей например. Только без карточного трассировщика. Он ограничен тем что не использует память. А надо найти что-то такое... хм. Чтоб долбануть по всем кешам сразу и из 4-8 ядер. Щас думаю об клеточных автоматах. Они очень просты в реализации. И хорошо параллелятся. https://en.wikipedia.org/wiki/Conway's_Game_of_Life ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 09:35 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TЕще надо вернуть в акторы спинлок (который я на мутекс заменил) и перетестить. А зачем нам два акторных релиза? Они отличаются.. ну 20 строками. Может их слить в одно приложение? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 10:13 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonОтлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office. Табличкой так получается, вторая колонка во сколько раз быстрее однопоточного ПотоковN блоковПопиксельноПострочно1866687878204255321.645861.942711.9341612.130852.829622.8435572.423763.722213.7526803.219484.517844.6624223.616795.214985.5720924.115685.614465.7821194.115185.814115.8919144.514925.913656.01017405.014236.213426.11117554.913646.412916.41216085.413486.512616.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 12:40 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonDima TЕще надо вернуть в акторы спинлок (который я на мутекс заменил) и перетестить. А зачем нам два акторных релиза? Они отличаются.. ну 20 строками. Может их слить в одно приложение? Для теста добавил, т.к. непонятно было в чем тормоз. Первый считает попиксельно, второй построчно. Какой оставить - не знаю, с точки зрения распараллеливания у второго меньше накладных расходов, думаю его надо оставить. Вернул обратно блокировку спинлоками. Обновись. Затести, потом удалим первый. maytonОбновил run-скрипты. Добавил скрипт для Виндовс. Обновитесь. Я со своим форком работаю, есть какая-то кнопка чтобы в него все твои изменения попали? Или удалить и форкнуть заново? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 13:08 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima Tmaytonпропущено... А зачем нам два акторных релиза? Они отличаются.. ну 20 строками. Может их слить в одно приложение? Для теста добавил, т.к. непонятно было в чем тормоз. Первый считает попиксельно, второй построчно. Какой оставить - не знаю, с точки зрения распараллеливания у второго меньше накладных расходов, думаю его надо оставить. Вернул обратно блокировку спинлоками. Обновись. Затести, потом удалим первый. maytonОбновил run-скрипты. Добавил скрипт для Виндовс. Обновитесь. Я со своим форком работаю, есть какая-то кнопка чтобы в него все твои изменения попали? Или удалить и форкнуть заново? Есть. В средах разработки которые поддерживают гит есть кнопка Merge -> from branch -> remote/master. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 14:14 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TmaytonОтлично! Теперь-бы эти 3 столбика цифр нарисовать в Экцселе. Тремя цветами. У меня дурацкий Libre-Office. Табличкой так получается, вторая колонка во сколько раз быстрее однопоточного ПотоковN блоковПопиксельноПострочно1866687878204255321.645861.942711.9341612.130852.829622.8435572.423763.722213.7526803.219484.517844.6624223.616795.214985.5720924.115685.614465.7821194.115185.814115.8919144.514925.913656.01017405.014236.213426.11117554.913646.412916.41216085.413486.512616.5 Не очень понятно почему построчно быстрее чем блочно. Возможно мы стоим в ожидании последнего блока и это объясняет потери. Неравномерность рендеринга. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 14:16 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonНе очень понятно почему построчно быстрее чем блочно. Возможно мы стоим в ожидании последнего блока и это объясняет потери. Неравномерность рендеринга. Не, блочно все стартуют одновременно, но каждый поток заканчивает в разное время, в логе же все видно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Четверный за 1141 мс отработал, а третий за 3642 мс. А итого по последнему, отсюда тормоза. В случае с акторами построчно: есть очередь с 512 заданиями (1 строка - 1 задание), есть N акторов, каждый актор берет задание из очереди, обсчитывает, берет следующее и т.д. Т.е. все потоки работают почти до конца. Затраты на извлечение из очереди незначительны. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 18:04 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Смержил. Это будет финальный вариант? Войдет в статистику? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 18:28 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonСмержил. Это будет финальный вариант? Войдет в статистику? Это исходный вариант библиотеки акторов, надеюсь будет финальным. Покажи лог его запуска у тебя. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 19:02 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
И все-таки я не могу понять почему у тебя rand() так все затормозил. Ты выше писал что у тебя Ubuntu 18.x.x LTS x64, я запускал у себя под Ubuntu 18.04.2 LTS x64 и проблема не повторялась. Хотя был странный результат 21859864 на ноуте с AMD, сейчас перемеряю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 20:59 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Ну.. если множество потоков владеют состоянием функции rand() то они требуют наложить volatile на переменную состояния этой функции. Это влечет за собой синхронизацию памяти кешей всех заинтересованных потоков. Выделение персональной переменной rand для каждого потока - решает эту проблему. Я так думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 21:12 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Переделал блочный режим. Добавил помощь отстающим потокам. По скорости у меня оно чуть-чуть отстает от акторов построчно. Обновись. Запусти у себя все три. Достаточно результатов 12-поточного запуска. Если будет близкое время - оставим блочный вариант, как самый понятный. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 17:23 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
OK. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 17:40 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Готово. Под катом логи. Код: 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. 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. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 17:44 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
mayton Код: sql 1.
Это невозможно, но как-то случилось ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 18:20 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Понял в чем ошибка. Поправил и акторы убрал. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 19:14 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TПонял в чем ошибка. Поправил и акторы убрал. Не могу смержить. Конфликтует файл cpp-mt/run.sh Это то куда я вносил изменения. Тебе надо снова смержится с мастером и применить изменения. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 21:18 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima TmaytonЯ смотрю после 4 потока еще перформанс растет. Расширю до 12. kealon(Ruslan) был прав 21860492 тормозил rand() ...Это еще три года назад было выяснено. Возьми реализацию ранда из моей топовой реализации (она не моя, какого то профи по шифрам). И утомили спамить коммитами....Тестите там на кошках сначала чтоле =) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 22:46 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Зяма привет. Ты чего такой злой сегодня? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2019, 22:53 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonDima TПонял в чем ошибка. Поправил и акторы убрал. Не могу смержить. Конфликтует файл cpp-mt/run.sh Это то куда я вносил изменения. Тебе надо снова смержится с мастером и применить изменения. У меня клиент TortoiseSVN, не нашел как смерживать с тобой. На сайте гитхаба тоже не нашел такой кнопки. Вобщем грохнул и форкнул заново. Переделал многопоточный вариант. Теперь все просто и быстро: добавил состояние строки, все потоки тупо перебирают все строки и считают каждую попавшуюся в состоянии "не обработано". По окончании всех потоков запись результата в файл. Запушил. PS На этом думаю можно остановиться. Можно еще запись в файл запараллелить, но она всего 10-15 мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2019, 08:18 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
Dima T, OK. Я смержу. Странно что ты выбрал тул который тебе не очень подходит. Смотри. Я уж лет 10 не работал в Вижуал Студии. Но подозреваю что ты в ней все время. Там есть поддержка гита. Вроде-бы тут пишут. https://docs.microsoft.com/en-us/azure/devops/repos/git/rebase?view=azure-devops&tabs=visual-studio Для смёрживания есть 2 стратегии. - merge (это когда ты вливаешь в себя изменения из главной ветки (неважно какой но обычно это master) - merge with rebase (это когда ты как-бы снова форкаешся от головной ревизии и применяешь шак за шагом к ней все коммиты. Попутно ресолвишь конфликты). Обе стратегии - правильные просто надо выбрать какая быстрее и удобнее. Еще попробуй посмотри в такие утилиты как GitGui (GitBash) обычно они идут в паре. GitBash это такое себе окружение баша в Windows. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2019, 10:53 |
|
Особенности многопоточности виндовса и линукса, AMD и Intel
|
|||
---|---|---|---|
#18+
maytonСтранно что ты выбрал тул который тебе не очень подходит. У меня в локалке Subversion SVN-сервер поднят уже лет 10 как, ну и клиент под него. Для работы хватает. Надо будет как-нибудь потестить git-клиента. Думаю они меж собой уживутся, если оба поставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2019, 12:26 |
|
|
start [/forum/topic.php?all=1&fid=16&tid=1339960]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
124ms |
get tp. blocked users: |
1ms |
others: | 240ms |
total: | 573ms |
0 / 0 |