Skip to content

Semptra/ParallelProgramming_Lab_3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 

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

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages