ΠΠ°Π²ΡΠΈΡΠΈΡΡ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ SIMD ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΡΡΠ°ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΠ² ΠΏΡΠΈ ΡΠΊΠ»Π°Π΄Π°Π½Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌ
- ΠΠΈΠ²ΡΠΈΡΠΈ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ ΠΎΠ±ΡΠΈΡΠ»ΡΠ²Π°Π»ΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌ Π·Π³ΡΠ΄Π½ΠΎ Flynn. ΠΠΈΠ²ΡΠΈΡΠΈ ΡΠΈΠΏΠΈ SIMD ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° ΡΡΡΠ°ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°Ρ (Π»Π΅ΠΊΡΡΡ 1, 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). |
-
ΠΠΈΠ²ΡΠΈΡΠΈ ΠΏΡΠΈΠ·Π½Π°ΡΠ΅Π½Π½Ρ ΡΠΈΠΏΡΠ² Π΄Π°Π½ΠΈΡ __m128, __m256, __m128d, __m128i. ΠΠ°Π½Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 128 Π±ΡΡ ΠΎΠ±ΡΠΎΠ±Π»ΡΡΡΡΡΡ ΡΡΠ»ΡΠΊΠΈ SSE ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. __m128 β Π΄Π°Π½Ρ Π· ΠΏΠ»Π°Π²Π°ΡΠΎΡ ΠΊΡΠ°ΠΏΠΊΠΎΡ Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΎΡ ΡΠΎΡΠ½ΠΎΡΡΡ; __m128d β Π΄Π°Π½Ρ Π· ΠΏΠ»Π°Π²Π°ΡΠΎΡ ΠΊΡΠ°ΠΏΠΊΠΎΡ ΠΏΠΎΠ΄Π²ΡΠΉΠΉΠ½ΠΎΡ ΡΠΎΡΠ½ΠΎΡΡΡ; __m128i β ΡΡΠ»Ρ Π΄Π°Π½Ρ. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 8, 16, 32, 64 Π±ΡΡΠ°. ΠΠ°Π½Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 256 Π±ΡΡ ΠΎΠ±ΡΠΎΠ±Π»ΡΡΡΡΡΡ ΡΡΠ»ΡΠΊΠΈ AVX ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.
-
ΠΠ°Π²ΡΠΈΡΠΈΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ SSE ΡΠ° AVX ΡΡΠ½ΠΊΡΡΡ Π· Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½ΡΠΌ ΠΌΠΎΠ²ΠΈ Π²ΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠ²Π½Ρ (Π·Π°Π³ΠΎΠ»ΠΎΠ²Π½ΠΈΠΉ ΡΠ°ΠΉΠ» intrin.h Ρ ΡΠ°ΠΉΠ»ΠΈ, ΡΠΊΡ Π²ΡΠ½ ΠΏΡΠ΄ΠΊΠ»ΡΡΠ°Ρ).
-
Π‘ΠΊΠ»Π°ΡΡΠΈ ΡΡΠ½ΠΊΡΡΡ Π΄Π»Ρ Π²ΠΈΠ·Π½Π°ΡΠ΅Π½Π½Ρ ΡΠΈΠΏΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡ, Π° ΡΠ°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎΡΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ SSE ΡΠ° AVX ΠΊΠΎΠΌΠ°Π½Π΄ ΡΡΠ·Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΡ.
-
Π‘ΠΊΠ»Π°ΡΡΠΈ ΡΡΠ½ΠΊΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡΠ»Π΅Π½Π½Ρ: x[i] = |y[i]| + |z[i]| (i = 0.. n-1) Π΄Π»Ρ Π΄Π°Π½ΠΈΡ Π½Π°ΡΡΡΠΏΠ½ΠΈΡ ΡΠΈΠΏΡΠ² Π±Π΅Π· Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ SIMD ΠΊΠΎΠΌΠ°Π½Π΄: (ΡΡΠΌΠΈ ΡΠΈΡΠ΅Π» Π·Π° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ)
- ΡΡΠ»Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 8 Π±ΡΡ;
- ΡΡΠ»Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 16 Π±ΡΡ;
- ΡΡΠ»Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 32 Π±ΡΡ;
- ΡΡΠ»Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 64 Π±ΡΡ;
- Π· ΠΏΠ»Π°Π²Π°ΡΡΠΎΡ ΠΊΡΠ°ΠΏΠΊΠΎΡ Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΎΡ ΡΠΎΡΠ½ΠΎΡΡΡ;
- Π· ΠΏΠ»Π°Π²Π°ΡΡΠΎΡ ΠΊΡΠ°ΠΏΠΊΠΎΡ ΠΏΠΎΠ΄Π²ΡΠΉΠ½ΠΎΡ ΡΠΎΡΠ½ΠΎΡΡΡ.
-
ΠΠΎΡΡΠ²Π½ΡΡΠΈ ΠΎΠ±ΡΠΈΡΠ»ΡΠ²Π°Π»ΡΠ½Ρ ΡΠΊΠ»Π°Π΄Π½ΡΡΡΡ Π΄Π»Ρ ΡΠΈΡ ΡΡΠ½ΠΊΡΡΠΉ Π΄Π»Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΈ ΠΌΠ°ΡΠΈΠ²Ρ 4096 *4096.
-
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΈ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ ΠΏΡΠ½ΠΊΡΡΠ² 2, 3 Π·Π°Π½Π΅ΡΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΡ.
-
ΠΡΠΎΠ±ΠΈΡΠΈ Π²ΠΈΡΠ½ΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ SIMD ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π»Ρ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΡΠΉ.
-
Π‘ΠΊΠ»Π°ΡΡΠΈ ΡΡΠ½ΠΊΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡΠ»Π΅Π½Π½Ρ x[i] = β (y[i]) (i = 0.. n-1) Π΄Π»Ρ Π΄Π°Π½ΠΈΡ Π· ΠΏΠ»Π°Π²Π°ΡΡΠΎΡ ΠΊΡΠ°ΠΏΠΊΠΎΡ Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΎΡ ΡΠ° ΠΏΠΎΠ΄Π²ΡΠΉΠ½ΠΎΡ ΡΠΎΡΠ½ΠΎΡΡΡ Π±Π΅Π· Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ ΡΠ° Π· Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½ΡΠΌ SIMD ΠΊΠΎΠΌΠ°Π½Π΄.
-
ΠΠΎΡΡΠ²Π½ΡΡΠΈ ΠΎΠ±ΡΠΈΡΠ»ΡΠ²Π°Π»ΡΠ½Ρ ΡΠΊΠ»Π°Π΄Π½ΡΡΡΡ Π΄Π»Ρ ΡΠΈΡ ΡΡΠ½ΠΊΡΡΠΉ Π΄Π»Ρ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΈ ΠΌΠ°ΡΠΈΠ²Ρ 4096.
-
Π‘ΠΊΠ»Π°ΡΡΠΈ ΡΡΠ½ΠΊΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡΠ»Π΅Π½Π½Ρ x[i] = y[i] * z[i] Π· ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΈΠΌΠΈ Π΄Π°Π½ΠΈΠΌΠΈ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΡΠΊΠΈΡ Π΄Π°Π½Ρ ΡΠΈΠΏΡ float Π±Π΅Π· ΡΠ° Π· Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½ΡΠΌ SIMD ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠΎΠ±ΠΈΡΠΈ Π²ΠΈΡΠ½ΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ.
-
(ΠΠΈΡΠΈΠΉ Π±Π°Π»Π») ΠΠΎΡΠ»ΡΠ΄ΠΈΡΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π·ΡΡΡΠ΅Π½Π½Ρ (SSE) Π΄Π»Ρ Π·ΡΡΡΠ΅Π½Π½Ρ Π΄Π°Π½ΠΈΡ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΎΡ 512 Π±ΡΡ Π½Π° 1 Π±ΡΡ.
- ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π· ΡΡΠ½ΠΊΡΡΡΠΌΠΈ Π²ΡΠ΄ΠΏΠΎΠ²ΡΠ΄Π½ΠΎ Π·Π°Π²Π΄Π°Π½Π½Ρ.
- Π’Π°Π±Π»ΠΈΡΡ Π·Ρ Π·Π½Π°ΡΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠ±ΡΠΈΡΠ»ΡΠ²Π°Π»ΡΠ½ΠΎΡ ΡΠΊΠ»Π°Π΄Π½ΠΎΡΡΡ Π΄Π»Ρ ΡΡΡΡ ΡΡΠ½ΠΊΡΡΠΉ.
- ΠΠΈΡΠ½ΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ SIMD ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π»Ρ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΡΠΉ Ρ ΠΎΠ±ΡΠΈΡΠ»Π΅Π½Π½Ρ β.
- Π―ΠΊΡ ΡΠΈΠΏΠΈ ΠΎΠ±ΡΠΈΡΠ»ΡΠ²Π°Π»ΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌ Π·Π³ΡΠ΄Π½ΠΎ Flynn Π²ΠΈ Π·Π½Π°ΡΡΠ΅? ΠΠΎ ΡΠΊΠΈΠΉ ΡΠΈΠΏΡΠ² Π²ΡΠ΄Π½ΠΎΡΡΡΡΡΡ ΡΡΡΠ°ΡΠ½Ρ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ?
- Π―ΠΊΡ Π½Π΅Π΄ΠΎΠ»ΡΠΊΠΈ ΠΌΠ°ΡΡΡ MMX ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ?
- Π―ΠΊΡ Π½Π΅Π΄ΠΎΠ»ΡΠΊΠΈ ΠΌΠ°ΡΡΡ 3DNow! ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ?
- Π―ΠΊΡ Π½Π΅Π΄ΠΎΠ»ΡΠΊΠΈ ΠΌΠ°ΡΡΡ SSE ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ?
- ΠΠ°ΠΌ ΡΡΠ΅Π±Π° ΠΎΠ±ΡΠΎΠ±Π»ΡΡΠΈ Π΄Π°Π½Ρ ΡΠΈΠΏΡ __m128i. Π―ΠΊΡ ΠΏΠ΅ΡΠ΅Π²ΡΡΠΊΡ Π½Π΅ΠΎΠ±Ρ ΡΠ΄Π½ΠΎ ΠΎΠ±ΠΎΠ²ΡΠ·ΠΊΠΎΠ²ΠΎ Π²ΠΈΠΊΠΎΠ½Π°ΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π»Ρ ΠΎΠ±ΡΠΎΠ±ΠΊΠΈ Π΄Π°Π½ΠΈΡ ΡΠΈΡ ΡΠΈΠΏΡΠ²?
- Π―ΠΊ Π²ΠΈΠ΄ΡΠ»ΠΈΡΠΈ ΠΏΠ°ΠΌ'ΡΡΡ ΠΏΡΠ΄ ΠΌΠ°ΡΠΈΠ² Π΄ΠΎΠ²ΡΠ»ΡΠ½ΠΎΡ Π΄ΠΎΠ²ΠΆΠΈΠ½ΠΈ ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ, ΡΠΎΠ± ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΠΈΠ²Ρ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ SSE ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ?