Mengoptimumkan __mm_add_epi32_inplace_purego Menggunakan Assembly
Soalan ini bertujuan untuk mengoptimumkan gelung dalaman bagi fungsi __mm_add_epi32_inplace_purego, yang melaksanakan tatasusunan populasi mengikut kedudukan. Matlamatnya adalah untuk meningkatkan prestasi dengan menggunakan arahan pemasangan.
Pelaksanaan Go asal bagi gelung dalaman:
__mm_add_epi32_inplace_purego(&counts[i], expand)
Penggunaan '&counts[i]' untuk menghantar alamat sesuatu elemen tatasusunan boleh menjadi tidak cekap. Untuk mengoptimumkan ini, kita boleh menghantar penuding kepada keseluruhan tatasusunan sebaliknya:
__mm_add_epi32_inplace_inplace_purego(counts, expand)
Pengubahsuaian ini mengurangkan overhed yang dikaitkan dengan menghantar tatasusunan sebagai argumen.
Selain itu, gelung dalam boleh lebih jauh dioptimumkan menggunakan arahan pemasangan. Kod pemasangan berikut ialah versi __mm_add_epi32_inplace_purego yang dilaksanakan dalam pemasangan:
// func __mm_add_epi32_inplace_asm(counts *[8]int32, expand *[8]int32) TEXT ·__mm_add_epi32_inplace_asm(SB),NOSPLIT,-16 MOVQ counts+0(FP), DI MOVQ expand+8(FP), SI MOVL 8*0(DI), AX // load counts[0] ADDL 8*0(SI), AX // add expand[0] MOVL AX, 8*0(DI) // store result in counts[0] MOVL 8*1(DI), AX // load counts[1] ADDL 8*1(SI), AX // add expand[1] MOVL AX, 8*1(DI) // store result in counts[1] MOVL 8*2(DI), AX // load counts[2] ADDL 8*2(SI), AX // add expand[2] MOVL AX, 8*2(DI) // store result in counts[2] MOVL 8*3(DI), AX // load counts[3] ADDL 8*3(SI), AX // add expand[3] MOVL AX, 8*3(DI) // store result in counts[3] MOVL 8*4(DI), AX // load counts[4] ADDL 8*4(SI), AX // add expand[4] MOVL AX, 8*4(DI) // store result in counts[4] MOVL 8*5(DI), AX // load counts[5] ADDL 8*5(SI), AX // add expand[5] MOVL AX, 8*5(DI) // store result in counts[5] MOVL 8*6(DI), AX // load counts[6] ADDL 8*6(SI), AX // add expand[6] MOVL AX, 8*6(DI) // store result in counts[6] MOVL 8*7(DI), AX // load counts[7] ADDL 8*7(SI), AX // add expand[7] MOVL AX, 8*7(DI) // store result in counts[7] RET
Kod pemasangan ini memuatkan elemen 'kiraan' dan 'mengembangkan' ke dalam daftar, melakukan penambahan dan menyimpan hasilnya semula ke dalam ' dikira'. Dengan mengelakkan keperluan untuk menghantar tatasusunan sebagai hujah dan dengan menggunakan arahan pemasangan yang cekap, kod ini meningkatkan prestasi gelung dalaman dengan ketara.
Ringkasnya, dengan menghantar penuding kepada tatasusunan dan bukannya alamat elemen dan dengan melaksanakan gelung dalaman dalam pemasangan, fungsi __mm_add_epi32_inplace_purego boleh dioptimumkan untuk mencapai prestasi yang lebih baik dalam operasi pengiraan populasi kedudukan.
Atas ialah kandungan terperinci Bagaimanakah fungsi __mm_add_epi32_inplace_purego boleh dioptimumkan menggunakan arahan pemasangan untuk prestasi yang lebih baik dalam operasi pengiraan populasi kedudukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!