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