Saya mengkompilasi aplikasi C ++ saya menggunakan GCC 4.3. Alih-alih memilih secara manual flag optimasi yang saya gunakan -march=native
, yang secara teori harus menambahkan semua flag optimisasi yang berlaku untuk perangkat keras yang saya kompilasi. Tetapi bagaimana saya bisa memeriksa flag mana yang sebenarnya digunakan?
165
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512
-v
opsi, meskipun sebagai bagian daricc1
baris perintah ...-march=native
dan akan bekerja di mana-mana hanya mengikuti:gcc -Q --help=target
.Untuk melihat bendera baris perintah, gunakan:
Jika Anda ingin melihat definisi compiler / precompiler yang ditetapkan oleh parameter tertentu, lakukan ini:
sumber
native
sebenarnya sama dengan.Seharusnya (
-###
mirip dengan-v
):Untuk menampilkan bendera asli "asli" untuk gcc.
Anda dapat membuatnya tampak lebih "jelas" dengan perintah:
dan Anda dapat menyingkirkan flag dengan -mno- * dengan:
sumber
Jika Anda ingin mengetahui cara mengatur kompilasi lintas non-asli, saya menemukan ini berguna:
Di mesin target,
Kemudian gunakan ini pada mesin build:
sumber
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
tetapi ukuran cache sepertinya tidak ada.Saya akan melemparkan dua sen saya ke pertanyaan ini dan menyarankan perpanjangan jawaban elias yang sedikit lebih verbal. Pada gcc 4.6, menjalankan
gcc -march=native -v -E - < /dev/null
memancarkan jumlah spam yang meningkat dalam bentuk-mno-*
bendera berlebihan . Berikut ini akan menghapus ini:Namun, saya hanya memverifikasi kebenaran ini pada dua CPU yang berbeda (Intel Core2 dan AMD Phenom), jadi saya sarankan juga menjalankan skrip berikut untuk memastikan bahwa semua
-mno-*
bendera ini dapat dilucuti dengan aman.Saya belum menemukan perbedaan antara
gcc -march=native -v -E - < /dev/null
dangcc -march=native -### -E - < /dev/null
selain beberapa parameter yang dikutip - dan parameter yang tidak mengandung karakter khusus, jadi saya tidak yakin dalam keadaan apa ini membuat perbedaan nyata.Akhirnya, perhatikan itu
--march=native
diperkenalkan di gcc 4.2, yang sebelumnya hanya merupakan argumen yang tidak diakui.sumber