Rumah >Peranti teknologi >industri IT >Panduan GCC untuk pemproses ampere

Panduan GCC untuk pemproses ampere

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌asal
2025-02-08 12:23:09475semak imbas

Panduan GCC untuk pemproses ampere

Artikel ini pada asalnya diterbitkan oleh pengkomputeran ampere.

Makalah ini menerangkan cara menggunakan pilihan GNU Compiler Collection (GCC) dengan berkesan untuk membantu mengoptimumkan prestasi aplikasi pada pemproses ampere.

Apabila cuba mengoptimumkan aplikasi, adalah penting untuk mengukur jika pengoptimuman yang berpotensi meningkatkan prestasi. Ini termasuk pilihan pengkompil. Menggunakan pilihan pengkompil lanjutan boleh mengakibatkan prestasi runtime yang lebih baik, berpotensi dengan kos peningkatan masa kompilasi, lebih banyak kesukaran debug, dan sering meningkatkan saiz binari. Kenapa pilihan pengkompil mempengaruhi prestasi adalah di luar skop kertas ini, walaupun jawapan pendek ialah penjanaan kod, seni bina pemproses moden dan bagaimana mereka berinteraksi sangat rumit! Satu lagi perkara penting ialah pemproses yang berbeza mungkin mendapat manfaat daripada pilihan pengkompil yang berbeza kerana variasi seni bina komputer, dan mikroarchitecture tertentu. Eksperimen berulang dengan pengoptimuman adalah kunci kejayaan prestasi.

Bagaimana untuk mengukur prestasi aplikasi untuk menentukan faktor -faktor yang mengehadkan, serta strategi pengoptimuman telah diliputi dalam artikel yang diterbitkan sebelumnya. Kertas ini, 10 soalan pertama yang akan dijawab semasa berjalan pada contoh berasaskan Ampere Altra, menerangkan data prestasi untuk mengumpul untuk memahami prestasi keseluruhan sistem. Metodologi analisis prestasi untuk mengoptimumkan pemproses keluarga Ampere Altra menerangkan bagaimana untuk mengoptimumkan dengan berkesan & cekap menggunakan pendekatan yang didorong oleh data.

Kertas ini mula -mula meringkaskan pilihan GCC yang paling biasa dengan penerangan bagaimana pilihan ini mempengaruhi aplikasi. Perbincangan kemudian bertukar kepada kajian kes yang menggunakan pilihan GCC untuk meningkatkan prestasi perisian pengekodan video VP9 dan pangkalan data MySQL untuk pemproses AMPERE. Strategi yang sama telah digunakan dengan berkesan untuk mengoptimumkan perisian tambahan yang dijalankan pada pemproses ampere.

Cadangan GCC

pengkompil GCC menyediakan banyak pilihan yang dapat meningkatkan prestasi aplikasi. Lihat laman web GCC untuk maklumat lanjut. Untuk menjana kod yang mengambil kesempatan daripada semua ciri prestasi yang terdapat dalam pemproses Ampere, gunakan pilihan GCC -MCPU.

Untuk menggunakan pilihan GCC -MCPU, sama ada tetapkan model CPU atau beritahu GCC untuk menggunakan model CPU berdasarkan mesin yang GCC berjalan di VIA -MCPU = NATIVE. Nota mengenai sistem berasaskan Legacy x86, GCC -MCPU adalah sinonim yang tidak ditetapkan untuk -MTUNE, manakala GCC -MCPU disokong sepenuhnya pada sistem berasaskan ARM. Lihat Panduan ARM untuk bendera penyusun di seluruh arkitek: -march, -mtune, dan -mcpu untuk butirannya.

Ringkasnya, apabila mungkin, gunakan sahaja -MCPU dan elakkan -march dan -mtune apabila menyusun lengan. Berikut adalah kajian kes yang menonjolkan keuntungan prestasi dengan menetapkan pilihan GCC -MCPU dengan perisian pengekodan video VP9.

Menetapkan pilihan -MCPU:

  • -mcpu = ampere1: Menjana kod yang akan dijalankan pada pemproses ampereOne. AmpereOne adalah generasi pemproses asli awan dari Ampere, memperluaskan keluarga pemproses berprestasi tinggi kepada jumlah teras utama industri baru. Perhatikan, ini boleh menjana kod yang tidak akan dijalankan pada pemproses Ampere Altra dan Altra Max. Pilihan ini pada mulanya boleh didapati dalam versi GCC 12.1 dan kemudian, kemudian disiarkan semula ke GCC 10.5 dan GCC 11.3.

  • -mcpu = neoverse-n1: Menjana kod yang akan dijalankan di Ampere Altra, Ampere Altra Max serta Ampere AmpereOne. Semasa menggunakan pilihan ini untuk kod yang akan dijalankan di Ampere AmpereOne disokong, ia berpotensi tidak memanfaatkan semua ciri prestasi baru yang tersedia. Perhatikan, versi GCC 9.1 atau lebih tinggi diperlukan untuk membolehkan penalaan khusus CPU untuk pemproses Ampere Altra dan Ampere Altra Max.

  • -mcpu = Native: Menjana tetapan kod Model CPU berdasarkan CPU GCC sedang berjalan. Perhatikan, versi GCC 9.1 atau lebih tinggi diperlukan untuk membolehkan penalaan khusus CPU untuk pemproses Ampere Altra dan Ampere Altra Max.

Menggunakan -Mcpu = Native berpotensi untuk digunakan, walaupun ia mempunyai masalah yang berpotensi jika perpustakaan, perpustakaan yang dikongsi, atau fail objek digunakan pada sistem yang berbeza. Sekiranya binaan itu dilakukan pada pemproses ampereon ampere, kod itu tidak boleh dijalankan pada pemproses Ampere Altra atau Altra Max kerana kod yang dihasilkan mungkin termasuk arahan ARMV8.6 yang disokong pada pemproses ampere ampere. Jika binaan itu dilakukan pada pemproses Ampere Altra atau Altra Max, GCC tidak akan memanfaatkan penambahbaikan prestasi terkini yang terdapat pada pemproses Ampere AmpereOne. Ini adalah isu umum apabila membina kod untuk memanfaatkan ciri -ciri prestasi untuk sebarang seni bina.

Jadual berikut menyenaraikan versi GCC yang menyokong nilai -nilai pemproses ampere.

pemproses -mcpu nilai GCC 9 GCC 10 GCC 11 GCC 12 GCC 13 Ampere Altra Neoverse-N1 ≥ 9.1 Semua Semua Semua Semua Ampere Altra Max Neoverse-N1 ≥ 9.1 Semua Semua Semua Semua Ampereone ampere1 N/a ≥ 10.5 ≥ 11.3 ≥ 12.1 Semua

Cadangan kami adalah menggunakan pilihan GCC -MCPU dengan nilai yang sesuai yang diterangkan di atas (-mcpu = ampere1, -mcpu = neoverse -n1 atau -mcpu = native) dengan -O2 untuk menubuhkan garis dasar untuk prestasi, kemudian terokai tambahan Pilihan pengoptimuman dan mengukur jika pilihan yang berbeza meningkatkan prestasi berbanding dengan garis dasar.

Ringkasan Pilihan GCC Biasa:

  • -MCPU disyorkan apabila membina pemproses ampere untuk membolehkan penalaan dan pengoptimuman spesifik pemproses. (Lihat perbincangan "Menetapkan pilihan -mcpu pilihan" di atas untuk butiran.)

  • -OS mengoptimumkan untuk mengurangkan saiz kod, berpotensi jika aplikasi anda terhad dengan mengambil arahan.

  • -O2 mempertimbangkan pilihan pengoptimuman GCC standard dan baik untuk digunakan sebagai garis dasar untuk dibandingkan dengan pilihan GCC yang lain.

  • -O3 menambah pengoptimuman tambahan untuk menghasilkan kod yang lebih cekap untuk gelung, berguna untuk mencuba jika prestasi aplikasi anda dikuasai oleh masa yang dihabiskan di gelung.

  • Pengoptimuman berpandu profil (PGO): -frofile -generate & -fprofile -guna. Menjana data profil yang akan digunakan oleh pengkompil untuk berpotensi membuat keputusan yang lebih baik mengenai pengoptimuman seperti inlining, pengoptimuman gelung dan cawangan lalai. Ini dianggap sebagai pengoptimuman lanjutan kerana ia memerlukan perubahan pada sistem binaan, lihat di bawah.

  • Pengoptimuman masa pautan (LTO): -flto. Dayakan pengoptimuman masa pautan, yang membolehkan pengkompil mengoptimumkan fail sumber individu. Ini membolehkan fungsi digariskan di seluruh fail sumber di antara pengoptimuman pengkompil lain. Ini juga dianggap sebagai pengoptimuman lanjutan dan berpotensi memerlukan perubahan kepada sistem binaan. Pilihan ini meningkatkan masa membina keseluruhan, yang boleh dramatik untuk aplikasi besar. Adalah mungkin untuk menggunakan LTO hanya pada fail sumber kritikal prestasi untuk berpotensi mengurangkan masa binaan.

vp9 pengekodan video kajian kes dengan gcc -mcpu

VP9 adalah format pengekodan video yang dibangunkan oleh Google. LIBVPX adalah pelaksanaan perisian rujukan sumber terbuka untuk codec video VP8 dan VP9 dari Google dan Perikatan untuk Media Terbuka (AOMEDIA). LIBVPX memberikan peningkatan yang ketara dalam pemampatan video ke atas x264 dengan perbelanjaan masa pengiraan tambahan. Maklumat tambahan mengenai VP9 dan Libvpx boleh didapati di Wikipedia.

Dalam kajian kes ini, binaan VP9 dikonfigurasikan untuk menggunakan pilihan GCC -MCPU = Native untuk meningkatkan prestasi. Seperti yang disebutkan di atas, gunakan pilihan -MCPU apabila menyusun pada pemproses ampere untuk membolehkan penalaan dan pengoptimuman khusus CPU. Pada mulanya libvpx dibina menggunakan konfigurasi lalai dan kemudian dibina semula menggunakan -mcpu = asli. Untuk menilai prestasi VP9, ​​fail video input 1080p, original_videos_sports_1080p_sports_1080p-0063.mkv dari dataset kandungan pengguna YouTube yang digunakan. Lihat Panduan FFMPEG Tuning dan Membina Ampere untuk butiran mengenai cara membina FFMPEG dan pelbagai codec termasuk VP9 untuk pemproses Ampere.

libvpx liber binaan:

$ git clone https://chromium.googlesource.com/webm/libvpx
$ cd libvpx/
$ export CFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdeclaration-after-statement -Wdisabled-optimization -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wimplicit-function-declaration -Wmissing-declarations -Wmissing-prototypes -Wuninitialized -Wunused -Wextra -Wundef -Wframe-larger-than=52000 -std=gnu89"
$ export CXXFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdisabled-optimization -Wextra-semi -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wmissing-declarations -Wuninitialized -Wunused -Wextra -Wno-psabi -Wc++14-extensions -Wc++17-extensions -Wc++20-extensions -std=gnu++11 -std=gnu++11"
$ ./configure
$ make verbose=1 
$ ./vpxenc --codec=vp9 --profile=0 --height=1080 --width=1920 --fps=25/1 --limit=100 -o output.mkv /home/joneill/Videos/original_videos_Sports_1080P_Sports_1080P-0063.mkv --target-bitrate=2073600 --good --passes=1 --threads=1 –debug

bagaimana untuk mengoptimumkan libvpx membina dengan -mcpu = native

$ # rebuild with -mcpu=native
$ make clean
$ export CFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdeclaration-after-statement -Wdisabled-optimization -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wimplicit-function-declaration -Wmissing-declarations -Wmissing-prototypes -Wuninitialized -Wunused -Wextra -Wundef -Wframe-larger-than=52000 -std=gnu89"
$ export CXXFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdisabled-optimization -Wextra-semi -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wmissing-declarations -Wuninitialized -Wunused -Wextra -Wno-psabi -Wc++14-extensions -Wc++17-extensions -Wc++20-extensions -std=gnu++11 -std=gnu++11"
$ ./configure 
$ make verbose=1 
# verify the build uses the sdot dot product instruction:
$ objdump -d vpxenc | grep sdot | wc -l
128
$ ./vpxenc --codec=vp9 --profile=0 --height=1080 --width=1920 --fps=25/1 --limit=100 -o output.mkv /home/joneill/Videos/original_videos_Sports_1080P_Sports_1080P-0063.mkv --target-bitrate=2073600 --good --passes=1 --threads=1 --debug

Penyiasatan menggunakan Linux Perf untuk mengukur bilangan kitaran CPU dalam fungsi yang mengambil masa yang paling termasuk fungsi vpx_convolve8_horiz_neon dan vpx_convolve8_vert_neon. Repositori libvpx git menunjukkan fungsi-fungsi ini dioptimumkan oleh ARM untuk menggunakan arahan ARMV8.6-A USDOT (Product-Product-Product) yang disokong oleh pemproses ampere.

Kitaran CPU yang dibelanjakan dalam vpx_convolve8_horiz_neon dikurangkan dari 6.07E 11 hingga 2.52E 11 menggunakan GCC -MCPU = Native untuk membolehkan pengoptimuman produk DOT pada pemproses altra ampere, mengurangkan kitaran CPU oleh faktor 2.4x.

Untuk vpx_convolve8_vert_neon, kitaran CPU dikurangkan dari 2.46E 11 hingga 2.07E 11, untuk pengurangan 16%.

secara keseluruhan, menggunakan -mcpu = asli untuk membolehkan arahan produk DOT melancarkan transcoding fail original_videos_sports_1080p_sports_1080p -0063.mkv sebanyak 7% pada pemproses altra ampere dengan memperbaiki aplikasi melalui. Jadual berikut menunjukkan data yang dikumpulkan menggunakan Rekod Perf dan Laporan Perf Laporan untuk mengukur kitaran dan arahan CPU yang bersara.

Bina konfigurasi Simbol kitaran (%) Cycles Arahan (%) Arahan Binaan lalai vpx_convolve8_horiz_neon 8.72 6.07E 11 7.52 1.13E 12 vpx_convolve8_vert_neon 3.53 2.46 E11 2.51 3.78E 11 Keseluruhan permohonan 100 6.97E 10 100 1.48E 11 -mcpu = asli vpx_convolve8_horiz_neon 3.89 2.52E 11 3.87 5.71E 11 vpx_convolve8_vert_neon 3.19 2.07 E11 3.29 4.86E 11 Keseluruhan permohonan 100 6.48E 10 100 1.48E 11

pengoptimuman berpandu profil GCC

Bahagian ini memberikan gambaran keseluruhan mengenai pengoptimuman berpandu profil GCC (PGO) dan kajian kes mengoptimumkan MySQL dengan PGO. Pengoptimuman Panduan Profil membolehkan GCC membuat keputusan pengoptimuman yang lebih baik, termasuk mengoptimumkan cawangan, penyusunan semula blok kod, fungsi inlining dan pengoptimuman gelung melalui gelung bingkai, mengelupas gelung dan vektorisasi. Menggunakan PGO memerlukan mengubah suai persekitaran membina untuk membuat binaan 3-bahagian.

  1. Bina aplikasi dengan pengoptimuman berpandu profil, GCC -fprofile -generate.
  2. Jalankan aplikasi pada beban kerja perwakilan untuk menghasilkan data profil.
  3. membina semula aplikasi menggunakan data profil, gcc -fprofile -guna.

Cabaran menggunakan PGO adalah overhead prestasi yang sangat tinggi dalam langkah 2 di atas. Oleh kerana prestasi perlahan yang menjalankan aplikasi yang dibina dengan GCC -fprofile -generate, ia mungkin tidak praktikal untuk menjalankan sistem yang beroperasi dalam persekitaran pengeluaran. Lihat bahagian Pilihan Instrumentasi Program Manual GCC untuk membina aplikasi dengan instrumentasi run-time dan pilihan seksyen yang mengawal pengoptimuman untuk membina semula menggunakan maklumat profil yang dihasilkan untuk butiran tambahan.

seperti yang diterangkan dalam manual GCC, -fprofile-update = atomik disyorkan untuk aplikasi multi-threaded, dan dapat meningkatkan prestasi dengan mengumpul data profil yang lebih baik.

bila menggunakan pgo?

Dengan PGO, GCC dapat mengoptimumkan aplikasi dengan lebih baik dengan menyediakan maklumat tambahan seperti mengukur cawangan yang diambil berbanding tidak diambil dan mengukur bilangan perjalanan gelung. PGO adalah pengoptimuman yang berguna untuk mencuba dan melihat apakah ia meningkatkan prestasi. Tandatangan prestasi di mana PGO boleh membantu memasukkan aplikasi dengan peratusan yang signifikan dari salah laku cawangan, yang boleh diukur menggunakan utiliti perf untuk membaca unit pemantauan prestasi CPU (PMU) BR_MIS_PRED_RETIRED. Sebilangan besar misprediksi cawangan membawa kepada peratusan yang tinggi dari gerai depan, yang boleh diukur oleh kaunter PMU Stall_frontend. Permohonan dengan kadar Miss Cache Arahan L2 yang tinggi juga boleh mendapat manfaat daripada PGO, mungkin berkaitan dengan cawangan yang salah. Ringkasnya, peratusan besar cawangan mispredictions, gerai akhir depan CPU dan cache arahan L2 yang terlepas adalah tandatangan prestasi di mana PGO dapat meningkatkan prestasi.

Pangkalan Data MySQL GCC PGO Kajian Kes

MySQL adalah pangkalan data sumber terbuka yang paling popular di dunia dan kerana saiz binari MySQL yang besar, adalah calon yang ideal untuk menggunakan pengoptimuman PGO GCC. Tanpa maklumat PGO, adalah mustahil bagi GCC untuk meramalkan dengan betul banyak laluan kod yang berlainan yang dilaksanakan. Menggunakan PGO sangat mengurangkan misprediksi cawangan, L2 Arahan Cache Miss Rate dan CPU FRONT END STOLS ON AMPERE ALTRA MAX Processor.

meringkaskan bagaimana MySQL dioptimumkan menggunakan GCC PGO:

  1. Sysbench digunakan untuk menilai prestasi MySQL
  2. GCC PGO dilatih menggunakan suite ujian MySQL MTR (MySQL-Test-RUN)
  3. ujian oltp_point_select sysbench dan oltp_read_only digunakan untuk mengukur prestasi dengan binaan PGO berbanding dengan binaan lalai
  4. Bilangan benang yang digunakan kemudiannya diubah dari 1 hingga 1024, memberikan kelajuan purata 29% untuk oltp_point_select dan 20% untuk ujian oltp_read_only pada pemproses ampere altra max m128-30
  5. Dengan 64 benang, PGO meningkatkan prestasi sebanyak 32% dengan meningkatkan throughput MySQL

Butiran tambahan boleh didapati di laman web pemaju Ampere dalam panduan penalaan MySQL.

Ringkasan

Mengoptimumkan aplikasi memerlukan percubaan dengan strategi yang berbeza untuk menentukan apa yang paling sesuai. Makalah ini menyediakan cadangan untuk pengoptimuman pengkompil GCC yang berbeza untuk menjana aplikasi berprestasi tinggi yang berjalan pada pemproses Ampere. Ia menyoroti menggunakan pilihan -MCPU sebagai cara paling mudah untuk menghasilkan kod yang mengambil kesempatan daripada semua ciri yang disokong oleh pemproses asli Ampere Cloud. Dua kajian kes, untuk pangkalan data MySQL dan pengekod video VP9, ​​tunjukkan penggunaan pilihan GCC untuk mengoptimumkan aplikasi ini di mana prestasi adalah kritikal.

Dibina untuk pengkomputeran awan yang mampan, pemproses asli awan pertama Ampere memberikan prestasi tinggi, skalabilitas platform, dan kecekapan kuasa yang belum pernah terjadi sebelumnya dalam industri. Kami menjemput anda untuk mengetahui lebih lanjut mengenai usaha pemaju kami dan mencari amalan terbaik di pemaju.ampereComputing.com dan menyertai perbualan di Community.ampereComputing.com.

Atas ialah kandungan terperinci Panduan GCC untuk pemproses ampere. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn