Сообщение Re: Про варианты многопоточного взаимодействия... от 21.10.2023 0:07
Изменено 21.10.2023 0:52 _ilya_
Re: Про варианты многопоточного взаимодействия...
Здравствуйте, Shmj, Вы писали:
S>Доступ к переменным всегда из одного потока — нет возможности раздвоить как в C++. Т.е. ты можешь не беспокоиться о том, что кто-то левый изменит переменную и произойдет конфликт. 100% гарантия безопасности.
А теперь возьми задачу, которая требует максимальной производительности... САУ, сводится к перемножению матриц. Это в чем суперкомпьютеры состязаются по производительнсти. Перемножение матриц это туча операций и записи конкурирующих потоков в одну ячейку, это скорее уже изученный этап, но оптиимзаци там будет до бесконечности.
Вроде как просто — перемножить матрицы, но когда у тебя N ядер, и еще скорость зависит от обращений в память, а это зависит от данных в кеш — в итоге будет чет нетривиальное (Intel® Math Kernel Library (Intel® MKL)). И даже на копеечных древних процессорах крайне близко к 1 TFLOPS (800 GFLOPS выдает один Xeon 2696v4 — можете свои процы затестить — версия древняя, но все еще рабочая AVX2 https://github.com/sanekgusev/LinX-old/releases/tag/0.6.5, но такие процессоры стаятся парой и запросто преодолевают рубеж в 1 TFLOPS). Хочешь многопоток, много процов и дичайшую производительность ну чуть хуже ThreadRipper, Китайцы распродают по запчастям свои устаревшие суперкомпьютеры. ЭЭЭ, 18 ядерный 2696v3 стоит 4тыс. руб? и он ставится парой, и тогда будет дикое > 1 TFLOPS.
Современные десктоп процы (i9) уже тоже перешагнули за 1 TFLOPS, ну а суперкомпьютеры там на PFLOPS идут.
Ествественно там вся логика рассчитана, а не только многопоток, все нюансы — как кэш работает. В реальных математических задачах показать производительность примерно равную теоретически заложенной в железке — тупо количество ядер помножить на чатоту и число операций за такт. Если это сходится с заявленным для процессора и такие вычислительные мощности подтверждаются на практике — это радует, что процессор как заявленно работает и софт максимально опимально написан (увы, кто пишет софт сейчас скорее могут быть полные неучи в многопроцессорорных задачах, вплоть не монимают что разные потоки с разной скоростью выполнятся могут и не иметь понятия, что при стыке двух потоков будут проблемы).
S>Доступ к переменным всегда из одного потока — нет возможности раздвоить как в C++. Т.е. ты можешь не беспокоиться о том, что кто-то левый изменит переменную и произойдет конфликт. 100% гарантия безопасности.
А теперь возьми задачу, которая требует максимальной производительности... САУ, сводится к перемножению матриц. Это в чем суперкомпьютеры состязаются по производительнсти. Перемножение матриц это туча операций и записи конкурирующих потоков в одну ячейку, это скорее уже изученный этап, но оптиимзаци там будет до бесконечности.
Вроде как просто — перемножить матрицы, но когда у тебя N ядер, и еще скорость зависит от обращений в память, а это зависит от данных в кеш — в итоге будет чет нетривиальное (Intel® Math Kernel Library (Intel® MKL)). И даже на копеечных древних процессорах крайне близко к 1 TFLOPS (800 GFLOPS выдает один Xeon 2696v4 — можете свои процы затестить — версия древняя, но все еще рабочая AVX2 https://github.com/sanekgusev/LinX-old/releases/tag/0.6.5, но такие процессоры стаятся парой и запросто преодолевают рубеж в 1 TFLOPS). Хочешь многопоток, много процов и дичайшую производительность ну чуть хуже ThreadRipper, Китайцы распродают по запчастям свои устаревшие суперкомпьютеры. ЭЭЭ, 18 ядерный 2696v3 стоит 4тыс. руб? и он ставится парой, и тогда будет дикое > 1 TFLOPS.
Современные десктоп процы (i9) уже тоже перешагнули за 1 TFLOPS, ну а суперкомпьютеры там на PFLOPS идут.
Ествественно там вся логика рассчитана, а не только многопоток, все нюансы — как кэш работает. В реальных математических задачах показать производительность примерно равную теоретически заложенной в железке — тупо количество ядер помножить на чатоту и число операций за такт. Если это сходится с заявленным для процессора и такие вычислительные мощности подтверждаются на практике — это радует, что процессор как заявленно работает и софт максимально опимально написан (увы, кто пишет софт сейчас скорее могут быть полные неучи в многопроцессорорных задачах, вплоть не монимают что разные потоки с разной скоростью выполнятся могут и не иметь понятия, что при стыке двух потоков будут проблемы).
Re: Про варианты многопоточного взаимодействия...
Здравствуйте, Shmj, Вы писали:
S>Доступ к переменным всегда из одного потока — нет возможности раздвоить как в C++. Т.е. ты можешь не беспокоиться о том, что кто-то левый изменит переменную и произойдет конфликт. 100% гарантия безопасности.
А теперь возьми задачу, которая требует максимальной производительности... САУ, сводится к перемножению матриц. Это в чем суперкомпьютеры состязаются по производительнсти. Перемножение матриц это туча операций и записи конкурирующих потоков в одну ячейку, это скорее уже изученный этап, но оптиимзаци там будет до бесконечности.
Вроде как просто — перемножить матрицы, но когда у тебя N ядер, и еще скорость зависит от обращений в память, а это зависит от данных в кеш — в итоге будет чет нетривиальное (Intel® Math Kernel Library (Intel® MKL)). И даже на копеечных древних процессорах крайне близко к 1 TFLOPS (800 GFLOPS выдает один Xeon 2696v4 — можете свои процы затестить — версия древняя, но все еще рабочая AVX2 https://github.com/sanekgusev/LinX-old/releases/tag/0.6.5, но такие процессоры стаятся парой и запросто преодолевают рубеж в 1 TFLOPS). Хочешь многопоток, много процов и дичайшую производительность ну чуть хуже ThreadRipper, Китайцы распродают по запчастям свои устаревшие суперкомпьютеры. ЭЭЭ, 18 ядерный 2696v3 стоит 4тыс. руб? и он ставится парой, и тогда будет дикое > 1 TFLOPS.
Современные десктоп процы (i9) уже тоже перешагнули за 1 TFLOPS, ну а суперкомпьютеры там на PFLOPS идут.
Ествественно там вся логика рассчитана, а не только многопоток, все нюансы — как кэш работает. В реальных математических задачах показать производительность примерно равную теоретически заложенной в железке — тупо количество ядер помножить на чатоту и число операций за такт. Если это сходится с заявленным для процессора и такие вычислительные мощности подтверждаются на практике — это радует, что процессор как заявленно работает и софт максимально опимально написан (увы, кто пишет софт сейчас скорее могут быть полные неучи в многопроцессорорных задачах, вплоть не понимают что разные потоки с разной скоростью выполняться могут и не имеют понятия, что при стыке двух потоков будут проблемы).
S>Доступ к переменным всегда из одного потока — нет возможности раздвоить как в C++. Т.е. ты можешь не беспокоиться о том, что кто-то левый изменит переменную и произойдет конфликт. 100% гарантия безопасности.
А теперь возьми задачу, которая требует максимальной производительности... САУ, сводится к перемножению матриц. Это в чем суперкомпьютеры состязаются по производительнсти. Перемножение матриц это туча операций и записи конкурирующих потоков в одну ячейку, это скорее уже изученный этап, но оптиимзаци там будет до бесконечности.
Вроде как просто — перемножить матрицы, но когда у тебя N ядер, и еще скорость зависит от обращений в память, а это зависит от данных в кеш — в итоге будет чет нетривиальное (Intel® Math Kernel Library (Intel® MKL)). И даже на копеечных древних процессорах крайне близко к 1 TFLOPS (800 GFLOPS выдает один Xeon 2696v4 — можете свои процы затестить — версия древняя, но все еще рабочая AVX2 https://github.com/sanekgusev/LinX-old/releases/tag/0.6.5, но такие процессоры стаятся парой и запросто преодолевают рубеж в 1 TFLOPS). Хочешь многопоток, много процов и дичайшую производительность ну чуть хуже ThreadRipper, Китайцы распродают по запчастям свои устаревшие суперкомпьютеры. ЭЭЭ, 18 ядерный 2696v3 стоит 4тыс. руб? и он ставится парой, и тогда будет дикое > 1 TFLOPS.
Современные десктоп процы (i9) уже тоже перешагнули за 1 TFLOPS, ну а суперкомпьютеры там на PFLOPS идут.
Ествественно там вся логика рассчитана, а не только многопоток, все нюансы — как кэш работает. В реальных математических задачах показать производительность примерно равную теоретически заложенной в железке — тупо количество ядер помножить на чатоту и число операций за такт. Если это сходится с заявленным для процессора и такие вычислительные мощности подтверждаются на практике — это радует, что процессор как заявленно работает и софт максимально опимально написан (увы, кто пишет софт сейчас скорее могут быть полные неучи в многопроцессорорных задачах, вплоть не понимают что разные потоки с разной скоростью выполняться могут и не имеют понятия, что при стыке двух потоков будут проблемы).