GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - Semptra/ParallelProgramming_Lab_3

BranchesTags
Open more actions menu

Latest commit

 

History

4 Commits
4 Commits

Folders and files

NameName
Last commit message
Last commit date
Lab3
Lab3
 
 
.gitignore
.gitignore
 
 
README.md
README.md
 
 

Repository files navigation

Використання SIMD команд при розробці програм

Мета роботи

Навчитися ефективно використовувати SIMD команди сучасних процесорів при складанні програм

Підготовка до роботи

  1. Вивчити класифікацію обчислювальних систем згідно Flynn. Вивчити типи SIMD команд на сучасних процесорах (лекція 1, 2).
  2. Вивчити методи визначення системної інформації про процесори, яка необхідна для визначення можливості використання різних типів SIMD команд (таблиця 3.1).

Таблиця 3.1 Параметри функції __cpuid для отримання інформації про процесор

Функція (b) Результат
0 a [0] – максимальный номер звичайної функции;
a [1], a [3], a [2] – тип процессора.
Для Intel повинні отримати рядок “GenuineIntel” – оригінальний Intel,
Для AMD повинні отримати рядок “AuthenticAMD”.
1 a [0] – додаткова інформація про тип процесора (тип, родина, модель,…);
a [1] – Біти 8-15 – розмір рядка кешу в 8 – байтових елементах;
Біти 16-23 – максимальна кількість ядер процесору;
a [2] – Біт 0 – підтримка SSE3;
a [2] – Біт 9 – підтримка SSSE3;
a [2] – Біт 19 – підтримка SSE4.1;
a [2] – Біт 20 – підтримка SSE4.2;
a [2] – Біт 26 – підтримка AVX;
a [2] – Біт 27 – підтримка AVX;
a [2] – Біт 28 – підтримка AVX;
a [3] – Біт 23 – підтримка MMX;
a [3] – Біт 25 – підтримка SSE;
a [3] – Біт 26 – підтримка SSE2;
a [3] – Біт 28 – підтримка HYPER Threading;
0x80000000 a [3] – Біт 31 – підтримка 3DNow! (AMD);
a [3] – Біт 30 – підтримка 3DNow!2 (AMD);
0x80000001 a [2] – Біт 6 – підтримка SSE4A;
a [2] – Біт 11 – підтримка SSE5;
0x80000002 - 0x80000004 a [0], a [1], a [2], a [3] - повна назва процесора та його тактова частота (INTEL, AMD).
  1. Вивчити призначення типів даних __m128, __m256, __m128d, __m128i. Дані довжиною 128 біт оброблюються тільки SSE командами. __m128 – дані з плавачою крапкою звичайної точності; __m128d – дані з плавачою крапкою подвіййної точності; __m128i – цілі дані. Компоненти довжиною 8, 16, 32, 64 біта. Дані довжиною 256 біт оброблюються тільки AVX командами.

  2. Навчитися використовувати SSE та AVX функції з використанням мови високого рівня (заголовний файл intrin.h і файли, які він підключає).

Порядок виконання лабораторної роботи

  1. Скласти функції для визначення типу процесору, а також можливості використання SSE та AVX команд різного типу.

  2. Скласти функції для обчислення: x[i] = |y[i]| + |z[i]| (i = 0.. n-1) для даних наступних типів без використання SIMD команд: (суми чичел за модулем)

    • цілі довжиною 8 біт;
    • цілі довжиною 16 біт;
    • цілі довжиною 32 біт;
    • цілі довжиною 64 біт;
    • з плаваючою крапкою звичайної точності;
    • з плаваючою крапкою подвійної точності.
  3. Порівняти обчислювальну складність для цих функцій для довжини масиву 4096 *4096.

  4. Результати виконання пунктів 2, 3 занести в таблицю.

  5. Зробити висновки по ефективності використання SIMD команд для виконання арифметичних операцій.

  6. Скласти функції для обчислення x[i] = √ (y[i]) (i = 0.. n-1) для даних з плаваючою крапкою звичайної та подвійної точності без використання та з використанням SIMD команд.

  7. Порівняти обчислювальну складність для цих функцій для довжини масиву 4096.

  8. Скласти функцію для обчислення x[i] = y[i] * z[i] з комплексними даними, компоненти яких дані типу float без та з використанням SIMD команд. Зробити висновки по ефективності.

  9. (Вищий балл) Дослідити ефективність команд зрушення (SSE) для зрушення даних довжиною 512 біт на 1 біт.

Зміст звіту

  1. Код програми з функціями відповідно завданню.
  2. Таблиця зі значеннями обчислювальної складності для усіх функцій.
  3. Висновки по ефективності використання SIMD команд для виконання арифметичних операцій і обчислення √.

Контрольні запитання і завдання

  1. Які типи обчислювальних систем згідно Flynn ви знаєте? До який типів відносяться сучасні процесори?
  2. Які недоліки мають MMX команди?
  3. Які недоліки мають 3DNow! команди?
  4. Які недоліки мають SSE команди?
  5. Вам треба обробляти дані типу __m128i. Яку перевірку необхідно обовязково виконати перед використанням команд для обробки даних цих типів?
  6. Як виділити пам'ять під масив довільної довжини таким чином, щоб можно було для цього масиву використовувати SSE команди?

About

No description, website, or topics provided.

Resources

Readme
Activity

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.