Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melaksanakan atoi dengan cekap menggunakan arahan SIMD?
Bagaimana untuk melaksanakan atoi menggunakan SIMD?
Masalah:
Saya ingin mencuba menulis atoi pelaksanaan menggunakan arahan SIMD, untuk disertakan dalam RapidJSON. Algoritma yang saya hasilkan adalah seperti berikut:
Algoritma saya betul? Adakah terdapat cara yang lebih baik? Adakah terdapat pelaksanaan rujukan untuk atoi menggunakan mana-mana set arahan SIMD?
Jawapan:
Algoritma adalah betul dan lengkap. Ia berfungsi untuk int dan uint, daripada MIN_INT=-2147483648 hingga MAX_INT=2147483647 dan dari MIN_UINT=0 hingga MAX_UINT=4294967295.
Pelaksanaan rujukan disediakan, ditulis dalam GNU Assembler>
intel Assembler. 🎜>Sifat-sifat ini kod adalah seperti berikut:PHADDD dicontohi oleh 2(PSHUFD PADDD)
Hasil Analisis Throughput Intel-IACA untuk Haswell 32-bit:
Laporan Analisis LaluanHasil Sekatan: 16.10 Kitaran Throughput Bottleneck: InterIterationN - nombor port atau bilangan kitaran konflik sumber menyebabkan kelewatan, DV - Paip pembahagi (pada port 0)
D - Paip pengambilan data (pada port 2 dan 3), CP - pada laluan kritikal
F - Gabungan Makro dengan arahan sebelumnya berlaku
arahan micro-ops tidak terikat pada port
^ - Micro Fusion berlaku
@ - Arahan SSE mengikut arahan AVX256, berpuluh-puluh kitaran penalti adalah dijangka
! - arahan tidak disokong, tidak diambil kira dalam Analisis
| Bilangan | Tekanan pelabuhan dalam kitaran | |
| 0* | | | | | | | | | | xor eax, eax
| 0* | | | | | | | | | | xor ecx, ecx
| 0* | | | | | | | | | | xor edx, edx
| 1 | | 0.1 | | | | | 0.9 |
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan atoi dengan cekap menggunakan arahan SIMD?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!