|
Особенности многопоточности виндовса и линукса, 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 |
|
|
start [/forum/topic.php?fid=16&startmsg=39800207&tid=1339960]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
269ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 655ms |
0 / 0 |