Rumah >pembangunan bahagian belakang >C++ >Bolehkah Arahan SIMD pada CPU Intel Meningkatkan Prestasi Algoritma Jumlah Awalan dengan ketara?
Jumlah Awalan SIMD pada Pemproses Intel
Pengenalan
Algoritma jumlah awalan mencari jumlah terkumpul daripada tatasusunan yang diberikan. Operasi ini dihadapi dalam pelbagai masalah pengiraan dan memerlukan prestasi tinggi untuk pemprosesan yang cekap. Dalam artikel ini, kami membincangkan sama ada arahan SIMD pada CPU Intel boleh meningkatkan prestasi algoritma jumlah awalan.
Jumlah Awalan Selari dengan SIMD
Satu algoritma jumlah awalan selari melibatkan melakukan operasi dalam dua hantaran. Dalam hantaran pertama, jumlah separa dikira secara selari, diikuti dengan pengumpulan jumlah keseluruhan bagi setiap jumlah separa. Hantaran kedua menambah jumlah keseluruhan jumlah separa kepada yang seterusnya. Menggunakan berbilang benang melalui OpenMP untuk selari dan arahan SIMD untuk hantaran kedua boleh meningkatkan kecekapan.
Kod untuk Jumlah Awalan SIMD
Berikut ialah contoh kod untuk di atas algoritma:
__m128 scan_SSE(__m128 x) { x = _mm_add_ps(x, _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(x), 4))); x = _mm_add_ps(x, _mm_shuffle_ps(_mm_setzero_ps(), x, 0x40)); return x; } void pass1_SSE(float *a, float *s, const int n) { __m128 offset = _mm_setzero_ps(); #pragma omp for schedule(static) nowait for (int i = 0; i < n / 4; i++) { __m128 x = _mm_load_ps(&a[4 * i]); __m128 out = scan_SSE(x); out = _mm_add_ps(out, offset); _mm_store_ps(&s[4 * i], out); offset = _mm_shuffle_ps(out, out, _MM_SHUFFLE(3, 3, 3, 3)); } float tmp[4]; _mm_store_ps(tmp, offset); return tmp[3]; } void pass2_SSE(float *s, __m128 offset, const int n) { #pragma omp for schedule(static) for (int i = 0; i<n/4; i++) { __m128 tmp1 = _mm_load_ps(&s[4 * i]); tmp1 = _mm_add_ps(tmp1, offset); _mm_store_ps(&s[4 * i], tmp1); } }
Perbincangan
Pengoptimuman ini membolehkan peningkatan prestasi yang ketara untuk operasi jumlah awalan pada tatasusunan besar. Menggunakan SIMD untuk kedua-dua pas meningkatkan lagi kecekapan, mengurangkan masa pengiraan. Kod yang disediakan menggunakan SIMD untuk hantaran kedua dan mencapai peningkatan prestasi kira-kira 7x pada sistem empat teras.
Atas ialah kandungan terperinci Bolehkah Arahan SIMD pada CPU Intel Meningkatkan Prestasi Algoritma Jumlah Awalan dengan ketara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!