1 Востаннє редагувалося ch0r_t (15.01.2021 21:07:50)

Тема: Про позитивний досвід з бібл.(на Асм. )для високошвидк. калькуляцій.

Невелика бібліотека розроблена Agner Fog, Ph.D. що експлуатує відносно недавно представлені набори інструкцій для сучасних процесорів з  AVX, AVX2, AVX512. може виявитися корисною де швидкість і ефективність критично важлива  - можете розглянути, без вагань, бібліотеку доктора Агнера Фога - дуже зручна і гнучка.
    Позбавляє мігреней і марнувань часу звично пов'язаних з кодуванням асемблеру і включення його в С++ код "в ручну", - звичною і простою абстракцією для мов високорівневого програмування.
Вихідний код відкритий і доступний для завантаження з сайту професора. https://agner.org
Розділ "Software optimization resources" і рубрика "C++ vector class library".

     *Зверніть увагу вебсайт має багато інших цікавих документів і рекомендацій щодо оптимізації С++ і інших напрацювань.
Також представлено дуже лаконічну і доступно написану самим розробником документацію, у pdf форматі, ось пряме посилання на документ: https://www.agner.org/optimize/vcl_manual.pdf

     *Зверніть увагу що вказівки у документі щодо перемикачів компілятора є не просто рекомендованими а обов'язковими (mandatory) для успішної компіляції. (наприклад: "g++ -O3 -mtune=native -mfma -msse4.2 -mavx2 -fabi-version=0 -fno-trapping-math -fno-math-errno -ffast-math -fprefetch-loop-arrays -std=c++20 -I"./шлях_до_теки_vectorclas2" *або -std=c++17 для старіших компіляторів).

Edit:
Пряме посилання вказує на застарілий мануал, використовуйте новішу версію документації з ґіт-у: https://github.com/vectorclass/version2/releases

Подякували: Chemist-i, 0xDADA11C7, leofun013

2 Востаннє редагувалося ch0r_t (30.12.2020 18:37:29)

Re: Про позитивний досвід з бібл.(на Асм. )для високошвидк. калькуляцій.

//як зразок коду:
Vec8f vals_X(1.0f,2.0f,3.0f,4.0f,5.0f,6.0f,7.0f,8.0f); // init. 2 vectors
Vec8f vals_Y(9.9f,97.0f,9.0f,92.0f,93.0f,9.60f,9.0f,99.0f);
//перемноження векторів з восьми значень в "один клік" і присвоєння на місці.
vals_Y *= vals_X;