Продолжаем ковырять SSE/AVX, но тут кажется мне не помешала бы пояснительная бригада. Для поиска элемента в
До 2048 (8 КБ данных) всё работает более менее - х1.5-2 для Vector128 и ещё больше для Vector256. Однако дальше Vector128 проседает по скорости до обычного цикла на 2048 элементов (8 КБ данных) и становится медленее, чем простой цикл для 4096+ (32 КБ данных) элементов.
Vector256 проседает попозже - начиная с 5120 (20 КБ данных) элементов он сравнивается со скоростью простого цикла.
Vector128 становится медленее всех, начиная с 3072 (12 КБ данных) элементов
Пока что у меня два объяснения:
🔸 влияние L2 кэша, он насыщается и за счёт того, что данные берутся из RAM скорость резко падает
🔸 процессор уходит в throttling, однако неясно почему Vector128 становица хуже чем простой цикл (хотя возможно JIT делает loop unroll и за счёт этого получается обычный цикл быстрее)
Второй вариант я попробовал исключить, переключив режим проца в Turbo (специальной утилитой Asus), скорости чуть-чуть подросли (буквально на 4-5%), но тренды не поменялись.
С ushort ситуация выглядит другим образом - самым быстрым практически везде является
gist_int gist_ushort #sse #simd #dotnet
int[]
используется Sse2.CompareEqual
, которая может сравнивать 4 (Vector128
) или 8 (Vector256
) элементов.До 2048 (8 КБ данных) всё работает более менее - х1.5-2 для Vector128 и ещё больше для Vector256. Однако дальше Vector128 проседает по скорости до обычного цикла на 2048 элементов (8 КБ данных) и становится медленее, чем простой цикл для 4096+ (32 КБ данных) элементов.
Vector256 проседает попозже - начиная с 5120 (20 КБ данных) элементов он сравнивается со скоростью простого цикла.
Vector128 становится медленее всех, начиная с 3072 (12 КБ данных) элементов
Пока что у меня два объяснения:
🔸 влияние L2 кэша, он насыщается и за счёт того, что данные берутся из RAM скорость резко падает
🔸 процессор уходит в throttling, однако неясно почему Vector128 становица хуже чем простой цикл (хотя возможно JIT делает loop unroll и за счёт этого получается обычный цикл быстрее)
Второй вариант я попробовал исключить, переключив режим проца в Turbo (специальной утилитой Asus), скорости чуть-чуть подросли (буквально на 4-5%), но тренды не поменялись.
С ushort ситуация выглядит другим образом - самым быстрым практически везде является
Vector128<ushort>
😳 однако разрыв по скорости в разы - только <=2048 элементов (4 КБ данных), дальше разрыв крайне незначительный.gist_int gist_ushort #sse #simd #dotnet
Очень простой пример реализации паттерна Mediator :)
Не идеальный с точки зрения красоты кода (особенно в районе метода
#dotnet
Не идеальный с точки зрения красоты кода (особенно в районе метода
AddMediator
), но функциональный и понятный.#dotnet
Steven-Giesel
Create your own Mediator (like Mediatr)
In this blog post, I'll show you the fundamentals of the Mediator pattern and how to implement it in your application from scratch. And yes, we basically implement the famous MediatR library.
🔥2
Имел неосторожност опубликовать в mastodon вопрос про SIMD - там где Vector128 был медленее Vector256, на что пришёл Alexandre Mutel (Director C#/.NET Tech Group at Unity) и потыкал меня носом в разные места этого кода. После чего он родил статью "10x Performance with SIMD Vectorized Code in C#/.NET"
#dotnet #simd #sse
#dotnet #simd #sse
👍7
Маленькие хитрости #docker - как подождать пока postgres (или любой другой сервис) придёт в норму после старта. У Postgres к примеру это занимает несколько секунд на холодный старт (=инициализация контейнера с созданием БД)
повнимательней господа, Moq апдейтнул версию и подключил либу SponsorLink, которая делает разное.
тред на Reddit
Альтернативы
* https://github.com/nsubstitute/NSubstitute
* https://fakeiteasy.github.io/
тред на Reddit
Альтернативы
* https://github.com/nsubstitute/NSubstitute
* https://fakeiteasy.github.io/
Forwarded from devdigest // dot net
Moq, начиная с версии 4.20, включает в себя анализатор .NET, который сканирует вашу локальную конфигурацию git при сборке, получает ваш адрес электронной почты и отправляет его в какую-либо службу, размещенную в Azure, чтобы проверить, действительно ли вы спонсор.
🔗 https://devdigest.today/goto/2260
👉🏻 Наш канал | 💬 Наш чат
Please open Telegram to view this post
VIEW IN TELEGRAM
Reddit
From the dotnet community on Reddit: Does Moq in it's latest version extract and send my email to the cloud via SponsorLink?
Explore this post and more from the dotnet community
Чятики принесли отличную книгу на 114 страниц в PDF "What every programmer should know about memory".
Там действительно все что надо бы знать про low level память и кэш.
Там действительно все что надо бы знать про low level память и кэш.
This media is not supported in your browser
VIEW IN TELEGRAM
Introduction of CSS transforms - я не знал что такое можно делать чисто на CSS :) #css
An introduction to graph theory
(Darij Grinberg, 2023 год, 422 страницы PDF) #books
(Darij Grinberg, 2023 год, 422 страницы PDF) #books
👍2
Про токены, JSON Web Tokens (JWT), аутентификацию и авторизацию - для начинающих самое то (на русском языке)
👍4❤1🔥1
Кто-то где-то спрашивал, где бесплатно захостить приложение, вот вспомнилось
https://fly.io/docs/about/pricing
#hosting
https://fly.io/docs/about/pricing
#hosting
🔥2
нейронка SeamlessM4T для перевода text-text/text-speech/speech-text/speech-speech, есть ссылка на гитхаб #ai
huggingface.co
Seamless M4T - a Hugging Face Space by facebook
Discover amazing ML apps made by the community
Onova is a lightweight auto-update framework for desktop applications (github) - интересный фреймворк для автообновлений софта под Windows. Умеет тянуть файлы с любого вебсервера, github релизов, из nuget и из других мест. #dotnet
This media is not supported in your browser
VIEW IN TELEGRAM
Удобный (вроде бы) сервис JSONHERO для ковыряния JSON-ов в онлайне.
Я, правда, обычно использую https://jsonviewer.stack.hu
Я, правда, обычно использую https://jsonviewer.stack.hu
👍2