|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Алексей К, какие возможности? приведите хоть один пример. написание драйверов? дак для этого высокоуровневый ассемблер существует. просто этот топик вакханалия безумных доморощенных программистов. 1 Ограничение на размер объекта, оно одинаковы для 32 и 64 2 Как снять это ограничение декларативно под 64 3 Что такое память процесса. 4 что такое оutоfмemory. оно не как не относится к оперативной памяти, ну разве что если все страницы памяти процессов помечены битом не выгружаемые, то вставить новую при прерывании загрузки страницы не получается (и то для юникс) и т.д. зы и ешо вы тут ассоциировали уборщика и оперативную память .. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2016, 21:39 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
void33Алексей К, какие возможности? приведите хоть один пример. написание драйверов? дак для этого высокоуровневый ассемблер существует. просто этот топик вакханалия безумных доморощенных программистов. 1 Ограничение на размер объекта, оно одинаковы для 32 и 64 2 Как снять это ограничение декларативно под 64 3 Что такое память процесса. 4 что такое оutоfмemory. оно не как не относится к оперативной памяти, ну разве что если все страницы памяти процессов помечены битом не выгружаемые, то вставить новую при прерывании загрузки страницы не получается (и то для юникс) и т.д. зы и ешо вы тут ассоциировали уборщика и оперативную память .. понос какой-то ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2016, 21:51 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Изопропил, обоснуй ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2016, 21:54 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
void33, п 3 - что сказать хотел? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2016, 22:15 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Изопропил, да хотя бы сколько памяти для процесса гарантирует виндовс ну хотя бы для 32 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2016, 22:27 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
void33Изопропил, да хотя бы сколько памяти для процесса гарантирует виндовс ну хотя бы для 32 памяти или адресного пространства? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2016, 22:36 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Изопропил, памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2016, 22:43 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
void33Изопропил, памяти 20 страниц (MinimumWorkingSetSize) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2016, 16:00 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
AR®Изопропилэксперименты с выносом счётной части в c/с++ я бы начинал только после написания оного на c# Да я считаю, что оно уже написано. По сравнению с использованием ConcurrentDictionary / bool[] время работы улучшилось примерно вдвое, и стала в принципе возможной работа на больших данных, для которой в исходных версиях не хватало памяти. Дальнейшая оптимизация, по моему разумению, возможна только в направлении накладывания более "узких" блокировок отдельными потоками, чтобы они меньше задерживали друг друга. Есть еще направление оптимизации: уменьшение количества блокировок, т.к. блокировка сама по себе тяжелая операция. Например мой пример выше при добавлении блокировок замедляется в разы, хотя ожиданий никаких не происходит т.к. работа в один поток. Тут надо строить алгоритм так чтобы было минимум вызовов блокировок, т.е. поток получил крупный кусок данных и дальше работает с ним, а блокировки только для получения этих кусков. Есть еще такой момент как синхронизация на уровне ядер проца: т.е. формально потоки обращаются к разным участкам памяти, но физически оба участка оказываются в одном блоке памяти (64 байта если не путаю) в итоге происходит постоянная синхронизация кэшей ядер, что замедляет оба потока. У Рихтера есть пример такого случая с замерами времени. Есть еще такой момент как кэши процессора: если большая часть данных большую часть времени оказывается в кэше (т.е. минимум подкачки из памяти), то ускорение будет до двух раз. Например можно проходить по большому массиву много раз от начала до конца (как в моем примере), а можно перестроить алгоритм и обрабатывать фрагментами по 8-16 Кб. Второй вариант будет заметно быстрее, но алгоритм усложнится. ИМХУ самое перспективное направление это именно адаптация алгоритма под многопоточность, а не попытка усовершенствовать блокировками однопоточный алгоритм. AR®Не под .net я писал на C лет 8 назад последний раз в VS98 (dll для Crystal Reports). Честно говоря, какая технология должна быть сейчас (VS2010 или VS2015), что бы родился не управляемый код, я не знаю. Как показали тесты выше - портированием на С/С++ большого прироста не получишь. 5-15% максимум. Но напишешься вдоволь, т.к. там разных граблей намного больше чем в C#. Если надо чтобы было быстрее, то компилятор лучше брать посвежее, т.к. все процессоры разные. Например VS98 по умолчанию компилирует под пентиум 1, а VS2015 под третий. Есть разница даже в процах одного года выпуска: например топовые версии процов Intel поддерживают набор команд AVX, код скомпилированный с их использованием работает быстрее, но вообще не работает если проц не поддерживает AVX. Ну и на компиляторах от МС жизнь не заканчивается. Есть другие, компиляция которыми может работать быстрее. И третий вариант: если добавление памяти ускоряет работу, то разобраться как задействовать максимум имеющейся памяти в режиме x64. Ну и памяти в комп докупить до максимума. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2016, 11:31 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Фанаты оптимизации оставили без внимания один немаловажный момент. Сделайте класс структуруй и повторите замер. можете ещё ~10% выигратъ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2016, 14:44 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
mikron, Какие структуры - битовый вектор обсуждаем ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2016, 23:09 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Как ни странно, но ускорение от структуры есть. class мсstruct мсДоля4000000272489%4000000034731490%4000000007041675696% Я как понимаю массивы это ссылочные типы, передачи самой структуры куда-либо в параметрах нет, т.е. тут применение структур не должно влиять на скорость, но ускорение есть. ХЗ почему. ИсходникЦеликом тут 19246254 Заменить Код: c# 1.
на Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 08:56 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
На моей мащине дало похти 2х кратное улутщение с 600мс на 230мс Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 11:32 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Таким образом отставание от С++ дол+но составлятъ не более 10% ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 11:39 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
mikronНа моей мащине дало похти 2х кратное улутщение с 600мс на 230мс Не повторяется у меня в два раза. Те же ~10% Твой код чуть отличается от моего. uint вместо int и [] не используются. У меня такие результаты class (мс)struct (мс)struct/classС++ (мс)C++/structC++ safe (мс)C++ safe/struct4000000262181%1676%21100%4000000033329187%24584%28899%4000000006539620395%549789%596596% C++ это без проверок выхода за пределы массива, C++ safe с проверками C++ safe ближе к реальному коду, тут и 10% не выжать. Исходник С++ Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 15:58 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima T, Safe сомнительный - исключение кидать нужно, а не подавлять ошибку ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 17:28 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
ИзопропилDima T, Safe сомнительный - исключение кидать нужно, а не подавлять ошибку Согласен отчасти. Я же честно написал "C++ safe ближе к реальному коду". Исключений тут точно не надо, иначе С++ проиграет C# по времени, а городить огород с кодами ошибок - испоганить весь пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 20:14 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TИсключений тут точно не надо, иначе С++ проиграет C# по времени не проиграет. как и в c# при нормальном исполнении наличие обработчиков никак не сказывается на производительности ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 20:30 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
ИзопропилDima TИсключений тут точно не надо, иначе С++ проиграет C# по времени не проиграет. как и в c# при нормальном исполнении наличие обработчиков никак не сказывается на производительности Проиграет, я попробовал. Лень табличку рисовать. Я тупо вставил else throw "error" и стало медленнее. Я не любитель исключений, для меня С++ это "С с классами". Исключения это удобно, но как все удобное - непрактично. Даже в книгах по C# рекомендуют не злоупотреблять там где этого не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 20:44 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
говнокод с проверкой результата в каждой строке и последующим разборов кода возврата и отсутствием ясного диагностического сообщения и сопутствующей информации - конечно практичнее ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2016, 21:16 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TКак показали тесты выше - портированием на С/С++ большого прироста не получишь. 5-15% максимум. Но напишешься вдоволь, т.к. там разных граблей намного больше чем в C#. Тут решил вернуться к прошлому лету :) , а то новое что-то очень не торопится наступить, и вместо многопоточности на C# изобразить всё то же самое в 1 потоке в приложениьице командной строки, но на C/C++. Внимание: Результат практически вдвое хуже , чем на C# в 1 потоке ! Как такое вообще возможно?? Содержательная часть кода идентична . ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 16:53 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Поясню немного. Содержательная часть кода - цикл, на который тратится почти всё время работы. Идентична - значит может быть скопирована из одного места и вставлена в другое (из C# в C++ и/или наоборот). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 17:08 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
AR®Результат практически вдвое хуже , чем на C# в 1 потоке ! Неплохо бы код тестов показать, прежде чем такие громкие заявления делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 18:11 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima Tтакие громкие заявления Так сам удивлён, мягко говоря, наблюдаемым результатам. Поэтому и "громкость". Повторяю: основной рабочий цикл идентичен, с точностью до пробелов слева. И это при том, что в варианте на C# ещё делается работа по помещению найденных в цикле результатов в упакованный массив, а в тестовом примере на C есть только счётчик количества найденного (чтобы косвенно оценить правильность алгоритма). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 09:38 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
AR®Повторяю: основной рабочий цикл идентичен, с точностью до пробелов слева. Наверно поэтому и тормозит. С/С++ и C# это разные ЯП, хоть и с похожим синтаксисом. Скорее всего что-то в коде было такое что пишется одинаково, но означает не одно и тоже. Например Код: c# 1.
С++ создаст копию s, а C# передаст ссылку. Второе намного быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 10:02 |
|
|
start [/forum/topic.php?fid=20&msg=39256226&tid=1399876]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 296ms |
total: | 434ms |
0 / 0 |