Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, ИМХУ это следствие. Закон Амдала никто не отменил. Все остальное - это следствие. Надо причину обходить. lock-free алгоритмы зацепили тем что без явной потребности синхронизации потоков они не потребляют (точнее минимально потребляют) лишние ресурсы. Взять тут же задачу топика: если не требуется одновременно писать и читать с одного буфера, то зачем тратить ресурсы на синхронизацию? Синхронизация она же не бесплатная. Как-то я тут проводил тесты разных мутексов и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 20:14 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
В нашем случае Амдал сдулся до 9 секунд. Будем штурмовать рубеж? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 20:27 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonВ нашем случае Амдал сдулся до 9 секунд. Будем штурмовать рубеж? К 9 бы надо прийти для начала. Потом уже с Амдалом спорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 20:36 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TТам нет С++11 C без плюсов достаточно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 21:50 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
парни, не бейти сильно, не читал обсуждение до конца, но делаю вброс :) наверное корутины самое то :) когда выполняется какое-либо условие, можно файл дальше не читать. если например, это произошло в начале файла, то сразу и готово! экономия почти 100% boost.org/libs/coroutine2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 11:54 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Какое еще условие бро? У нас нет ничего подобного. Надо прочитать 100 млрд текстовых строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 12:39 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonКакое еще условие бро? У нас нет ничего подобного. Надо прочитать 100 млрд текстовых строк. а потом что с ними делать? должно же быть хоть что-то нужное :) хотя если просто прочитать, то корутины только затормозят процесс - придется прыгать на контекст... но если строк 100 млрд, а прочитав 99 млрд можно остановиться, то корутины сильно укорят, наверное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 13:01 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Да не ко мне это вопрос. Но в общем случае, если афтор хочет гнать по ним аналитику то я в принципе не понимаю мотивации останавливаться. Или ты что-то другое хотел предложить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 13:33 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Доделал, вроде работает но не быстро :( Тестовый файл был 1 млрд. чисел. Файл 6 Гб. На i7 (4 ядра) RAM 32 Гб ТестВремя сек.Только чтение2.7Однопоточный разбор14.6Многопоточный12.9 На i5 (2 ядра + HT) RAM 4 Гб ТестВремя сек.Только чтение34.3Однопоточный разбор55.6Многопоточный69.8 Исходник (все три теста и генератор файла) Код: 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. С синхронизацией устал разбираться. Потоки догоняют друг-друга, один еще не успел в ожидание встать, второй уже все закончил и будит первого. Вчера был вариант с двумя эвентами. По одному на каждый поток. Так он и не заработал. В итоге сделал один эвент на двоих и пробуждение второго если он спит во время усыпления первого. Но и то какой-то изврат получился. Даже Sleep(1) пришлось воткнуть. Функции wait_one() и wake_up() Может кто идею подкинет как синхронизацию организовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 17:51 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima T, большое спасибо за бенчмарки. Сходу могу предположить что синхронизация происходит слишком часто. Возможно имеет смысл увеличить размер чанка (блока) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 17:58 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Размеры тут Код: plaintext 1. 2. BUF_COUNT кол-во буферов, BUF_SIZE размер одного Работает по кольцу: чтение заполняет по кругу пока на заполненный не наткнется, разбор - разбирает пока на пустой не наткнется. Забыл кол-во остановок (усыплений) добавить. Перетестил на i7 - оба потока по 4650 раз засыпали. Второй комп недоступен. Завтра только перемерю. ИМХУ надо эту корявость в синхронизации менять. Вопрос на что? С виду простая задачка, но весь мозг об нее сломал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 18:54 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, оптимальный размер блока будет когда время чтения блока = времени обработки этого блока (круглый) ЗЫ И это апсолютно не максимальный буффер!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 23:40 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Перемерил на i5: со 128 буферами по 8 Кб чтение засыпало 313 раз разбор 6286 сделал 128 по 64 Кб Вот лог трех запусков Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Все три варианта сравнялись )) Если в кэш не влазит и читается с HDD - время чтения величина переменная. Замерять тут что-то бесполезно. PS Синхронизация один раз сглючила. Остались там какие-то косяки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 07:34 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Понял в чем у меня проблема с синхронизацией. Думал что раз разбудили поток - значит ему есть что делать, а случаи если нечего - считал ошибкой. В общем самый первый вариант был правильный. Просто не хватало проверки после пробуждения. Результаты теста с буфером 64 Кб для МТ 128 буферов На i7 (4 ядра) RAM 32 Гб ТестВремя сек.Только чтение1.24Однопоточный разбор14.7Многопоточный13.6 Уходов в спячку: чтение - 1150, разбор - 5 На i5 (2 ядра + HT) RAM 4 Гб ТестВремя сек.Только чтение55Однопоточный разбор55Многопоточный55 Уходов в спячку: чтение - 0, разбор - 650 Исходник Код: 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. PS ИМХУ бесполезно последовательное чтение параллелить: если данные в кэше - быстро прочитается, если с диска - ОС сама фоном упреждающее чтение делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 11:56 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TPS ИМХУ бесполезно последовательное чтение параллелить: если данные в кэше - быстро прочитается, если с диска - ОС сама фоном упреждающее чтение делает. Есть мысли (только касамемо Windows) 1) Втопку упреждающее. 2) Покурить Джефри Рихтера. На тему Windows I/O 3) Отказаться от FILE*,fopen,fread и перейти к Windows-specific функциям которые описаны в MSDN. 4) Перетестировать заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 12:21 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Дима sorry я по прежнему озабочен чортовой пендосской медициной. Горят сроки. И не успеваю даже модерировать плюсы. Так что читать твои сорцы буду только в СБ-ВС. I think... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 12:28 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
ИМХУ быстрее не станет. Нечего тут больше оптимизировать. Забыл померить для второго случая (файл в кэш не влазит): Фар копирует в nul за 54 сек, тесты работают 55. Т.е. с учетом погрешностей примерно одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 12:52 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonDima TPS ИМХУ бесполезно последовательное чтение параллелить: если данные в кэше - быстро прочитается, если с диска - ОС сама фоном упреждающее чтение делает. Есть мысли (только касамемо Windows) 1) Втопку упреждающее. 2) Покурить Джефри Рихтера. На тему Windows I/O 3) Отказаться от FILE*,fopen,fread и перейти к Windows-specific функциям которые описаны в MSDN. 4) Перетестировать заново. Там флажки есть на опережающее чтение итп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 13:10 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Фух... заскочил на минутку. Челы качните http://www.hdtune.com/ и посмотрите sequential read/write speed Убежал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 14:37 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
идеи по парсеру Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 08:36 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
m_Slaуменьшаем кол-во умножений в 3 раза, но усложняется сам парсер ИМХУ не взлетит. Умножение целых не такая уж и тяжелая операция. Можно просто убрать умножение. Заменил n*10 на n<<3 + n<<1. Затестил. Вообще ничего не изменилось. Время было 13.51 сек, стало 13.49. Это погрешности измерения. Возможно оптимизатор сам заменил и умножения изначально не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:01 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
m_Slaуменьшаем кол-во умножений в 3 раза, ага, индексация многомерного массива без умножений обходится PS на интел архитектуре умножение на 10 обычно без команды умножения делается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:04 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропилага, индексация многомерного массива без умножений обходится В данном случае обойдется: *4 легко заменяется на <<2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:12 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропилm_Slaуменьшаем кол-во умножений в 3 раза, ага, индексация многомерного массива без умножений обходится PS на интел архитектуре умножение на 10 обычно без команды умножения делаетсятам два умножения на 16, делается сдвигами а на 10 как умножается, на lea ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:14 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
затестил, аппаратное умножение быстро работает Intel Pentium CPU G2020 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 10:01 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39118797&tid=2018695]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 180ms |

| 0 / 0 |
