|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Блин, я же забыл матрицу сделать размера 9. Теперь результаты одинаковые: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Я, правда, не уверен, что <chrono> честно считает время. А прикручивать QPC мне лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:46 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab кстати, для тестов хорошо подходят единичные матрицы ( а также матрицы со всеми одинаковыми элементами ) думаю что для бенчмарков тоже подойдут Нет. Не подойдет. Единичную матрицу можно свести к функции которая продуцирует единички или нули а это сводит на нет все предыдущие достижения по памяти например. Тоесть вы поиграетесь с полиморзимом но его результаты можно будет натянуть только на единичные матрицы но никак не на общие (real-world matrix). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:48 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab просто для начинающего алгоримы было бы проще начать изучать на Питоне (а не на С или С++) для начинающего лучше сразу на C++, чтобы понять, как и что работает кроме того, только на нём ты получаешь ровно тот результат, который ожидаешь ты точно знаешь, где какой байт за что отвечает без сюрпризов. это важно. нужен только правильный Учитель. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:19 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Сообщения-же компилляции которые выдает С++ - поражают воображение объемом трафика особнно когда не сматчились паттерны процессора шаблонов есть такая штука: -Wfatal-errors оставит 1 строчку ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... Мой первый язык это был Бейсик для Электроника БК 10. И первый софт я не написал а содрал с книжки 1 в 1. Вот такое было обучение. Это не круто. Программируемый калькулятор МК-52 круче, ассемблер и машинный код. Я на нём программировал даже в поезде на втором "этаже". А ещё мама приносила из института перфокарты и я умел их расшифровывать. Но первый софт я написал на советском лунаходе . и у нас есть победитель! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:27 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Алексей Роза mayton Сообщения-же компилляции которые выдает С++ - поражают воображение объемом трафика особнно когда не сматчились паттерны процессора шаблонов есть такая штука: -Wfatal-errors оставит 1 строчку Смысл же не в том чтобы оставить строчку. А в том чтобы месседж об ошибке нес смысл для newcomer-а который только вчера взялся изучать С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:30 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Алексей Роза petrav пропущено... Это не круто. Программируемый калькулятор МК-52 круче, ассемблер и машинный код. Я на нём программировал даже в поезде на втором "этаже". А ещё мама приносила из института перфокарты и я умел их расшифровывать. Но первый софт я написал на советском лунаходе . и у нас есть победитель! Не завидуй так громко. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:34 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Алексей Роза пропущено... есть такая штука: -Wfatal-errors оставит 1 строчку Смысл же не в том чтобы оставить строчку. А в том чтобы месседж об ошибке нес смысл для newcomer-а который только вчера взялся изучать С++. ну так он и получит инфу о последней ошибке, а не простыню на 8 экранов 1 ошибку пофиксит, получит инфу по следующей... ...и заряд оптимизма ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:35 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Сорямба. Я только щас добрался до компа. И то не до мощной рабочей станции а до Corei3 ноутбучика. Из хорошего. Помимо OpenMP есть еще другая библиотечка. Называется OpenACC. Поддерживается в GCC, и для Clang. И мы ее попробуем для "туза бубей". Из вопросов. У кого из вас есть учётка в github? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 22:50 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
По OpenMP, OpenAAC, OpenCL может отдельный топик создать? Тут как-то цели никакой не поставлено. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 23:40 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton - Игры с разрядностью. С компиллятором. С железом. И еще забыл. SIMD. Это конечно уже далеко от С++ но - тоже машинный аспект. IMHO. Надо попробовать SIMD. Может подойдет а может и нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 11:09 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab я тоже свою версию написала (С) :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Давай - еще короче. Два цикла - обычно связанны зависимостью. Если предположить что они - разряды системы счисления с основанием SIZE. Заменим циклы на итерацию по всему диапазону двухзначного числа (SIZE,SIZE) А внутри по сути идет проверка что координата ограничена четырьмя гипер-прямыми под 45 градусов. Этот алгоритм будет не очень быстрый - зато самый короткий. У нас в топике два совревнования. В одном два чела выжимают скорость из С++ с ОпенМП. В другом мы будем сокращать функцию до брейнфака. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 12:55 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Я, правда, не уверен, что <chrono> честно считает время. А прикручивать QPC мне лень. Добрался до i5 с детерминированным TSC и сделал свой платформозависимый бенчмарк для GNUC'а. Результат использования OpenMP для маленьких массивов просто катастрофический даже с "прогревом" OpenMP - хуже в тысячу раз!!! Но на массиве размером в гигабайт твой же распараллеленный алгоритм обгоняет однопоточный примерно в 1.3 раза. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Benchmark Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 13:38 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Давай - еще короче. это будет нечитабельно и неэффективно. я потренируюсь лучше бенчмарки делать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 13:54 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab mayton Давай - еще короче. это будет нечитабельно и неэффективно. я потренируюсь лучше бенчмарки делать :) Хорошо. Потренируйся. Но этот синтетический тест - не особо показателен. Его эффективность мало зависит от алгоритма а больше предварительного состояния кешей и количества threads процессора которые в этом участвуют. Вобщем я к тому что резултаты этого теста сложно будет на что-то другое натянуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 14:44 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, главное, разобраться как это делается покa что, функция умножения матриц Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
по матрицам в С: мне бы хотелось работать с элементами матрицы, типа mtx[ i ][ j ], но не я понимаю как это сделать, и можно ли это вообще сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:00 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev petrav Я, правда, не уверен, что <chrono> честно считает время. А прикручивать QPC мне лень. Ваши слова натолкнули меня на мысль, что я вообще по-дибильному время считаю. Я генерирую маленькую матрицу, подсчитываю время одного вызова функции и так в цикле суммирую. Время, понятно, крайне маленькое. И библиотека <chrono> не справляется. По сути я суммирую некие минимально доступные кванты времени. Я переделал на сначала генерацию большого количества маленьких матриц. И теперь замеряю суммирование сразу их всех N раз. Теперь на маленьких матрицах вариант № 1 обгоняет вариант № 2 в 1.2 раза. Это не потому что я пытаюсь письками мерятся, как вы предположили. Я вообще (точнее почти) не думал о производительности когда код писал. Да я и о бенчмарке особо не думал. rdb_dev Добрался до i5 с детерминированным TSC и сделал свой платформозависимый бенчмарк для GNUC'а. Ну WinAPI QPC вроде как тоже возвращает значение некоего аппаратного счётчика. MS пишет про точность 10 -6 сек. rdb_dev Результат использования OpenMP для маленьких массивов просто катастрофический даже с "прогревом" OpenMP - хуже в тысячу раз!!! Прикольно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:01 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Наверное OpenMP на старт-стоп потоков тратит накладные расходы. Их в коде не видно но они-же где-то стоят. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, про "прогрев" я упомянул, но дело даже не в этом. Просто получается очень маленькая "зернистость" и скорость выполнения каждого зерна выше, чем скорость синхронизации результатов через барьеры и атомарные функции (по крайней мере на том компе, где я тестировал, так как реальная скорость зависит от скорости шины памяти или от скорости FSB на предыдущих поколениях процессоров). Соответственно, реальный выигрыш получается только на очень больших массивах - свыше 1 Гб, но такие массивы пихать целиком в адресное пространство процесса как-то некомильфо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:26 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Их в коде не видно но они-же где-то стоят. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:29 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Я-ж про это писал. Настоящую мощь этих оптимизаций можно почувствовать только на больших данных. Какой смысл др04ить параллелизм когда 5х5 целых чисел сложатья быстрее чем мы подготовим потоки и диспетчер их успеет форкнуть и менеджер ОС успеет их разложить по ядрам и они в ядрах успеют получить в L1 нужный им срез матрицы. Этож не зелёные мать их потоки как в Java. И не корутины. Это реальные потоки операционки. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:30 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, это понятно, но я не ожидал таких огромных накладных расходов, увеличивающих время выполнения более чем в тысячу раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:33 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Кстати - в тему Java - самый убойный вопрос на собеседовании - как сделать kill для JavaThread. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:50 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
А в чём, собственно, проблема? Регулярно проверяем состояние прерывания и, при необходимости, выходим, делая нужную очистку. Насколько я понимаю, оно везде так, не только в Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:59 |
|
|
start [/forum/topic.php?fid=57&msg=39962402&tid=2017415]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 161ms |
0 / 0 |