Acovea

Software screenshot:
Acovea
Rincian Software:
Versi: 1.0.1
Tanggal Upload: 3 Jun 15
Pengembang: Scott Robert Ladd
Lisensi: Gratis
Popularitas: 76

Rating: 3.0/5 (Total Votes: 2)

Acovea mengimplementasikan algoritma genetika untuk menemukan "terbaik" pilihan untuk menyusun program dengan GCC C dan C ++ compiler.
ACOVEA (Analisis Compiler Options melalui Evolutionary Algorithm) menerapkan algoritma genetika untuk menemukan "terbaik" pilihan untuk menyusun program dengan GNU Compiler Collection (GCC) C dan compiler C ++.
"Terbaik", dalam konteks ini, didefinisikan sebagai orang-orang pilihan yang menghasilkan program executable tercepat dari kode sumber yang diberikan. Acovea adalah kerangka C ++ yang dapat diperpanjang untuk menguji bahasa pemrograman lain dan kompiler non-GCC.
Saya membayangkan Acovea sebagai alat optimasi, yang hampir sama dengan profil. Tradisional fungsi tingkat profiling mengidentifikasi algoritma yang paling berpengaruh dalam kinerja sebuah program; Acovea kemudian diterapkan kepada mereka algoritma untuk menemukan bendera compiler dan pilihan yang menghasilkan kode tercepat.
Acovea juga berguna untuk menguji kombinasi dari bendera untuk interaksi pesimis, dan untuk menguji keandalan compiler.
Perangkat lunak modern sulit untuk memahami dan memverifikasi dengan cara tradisional. Jutaan baris kode menghasilkan aplikasi yang berisi interaksi yang rumit, menentang deskripsi sederhana atau brute force penyelidikan.
Sebuah dipandu, pendekatan deterministik untuk pengujian bergantung pada penguji manusia untuk membayangkan setiap kemungkinan kombinasi tindakan - proposisi realistis mengingat kompleksitas perangkat lunak. Namun, meskipun begitu kompleksitas, kita perlu jawaban atas pertanyaan penting tentang modern, perangkat lunak skala besar.
Apa jenis pertanyaan penting? Pertimbangkan GNU Compiler Collection. Saya menulis artikel yang generasi kode patokan, tugas penuh dengan kesulitan karena pilihan segudang disediakan oleh kompiler yang berbeda. Untuk benchmark saya untuk memiliki arti apapun, saya perlu tahu mana kombinasi pilihan menghasilkan kode tercepat untuk aplikasi tertentu.
Menemukan "terbaik" set pilihan terdengar seperti tugas yang sederhana, mengingat luasnya dokumentasi GCC dan kebijaksanaan konvensional komunitas pengembang GCC. Ah, jika hanya begitu mudah! Dokumentasi GCC, sementara luas, juga jujur ​​tidak tepat.
Saya menghargai gaya dokumentasi; tidak seperti banyak vendor komersial, yang membuat pernyataan mutlak tentang "kualitas" dari produk mereka, documenters GCC mengakui ketidakpastian dalam bagaimana berbagai pilihan mengubah kode. Memang, generasi kode sepenuhnya tergantung pada jenis aplikasi yang dikompilasi dan platform target. Sebuah pilihan yang menghasilkan kode dieksekusi cepat untuk satu kode sumber dapat merugikan kinerja program lain.
"Kebijaksanaan konvensional" tiba di inbox saya setiap kali saya menerbitkan artikel baru. Mulai dari sopan ke ngotot dengan kasar, ini e-mail berisi saran bertentangan untuk memproduksi kode cepat.
Dalam sebagian besar kasus, pernyataan anekdot seperti kekurangan bukti formal validitas mereka, dan, lebih sering daripada tidak, menyarankan "perbaikan" yang tidak efektif atau merugikan. Hal ini telah menjadi semakin jelas bahwa tidak ada satu --myself termasuk - tahu persis bagaimana semua pilihan ini GCC bekerja sama dalam menghasilkan kode program.
Saya mencari Holy Grail Optimization - tapi persis apa yang optimasi? Memahami masalah adalah langkah pertama dalam menemukan solusi.
Optimasi upaya untuk menghasilkan "terbaik" kode mesin dari kode sumber. "Terbaik" berarti hal yang berbeda untuk aplikasi yang berbeda; sebuah sekop Database potongan informasi, sementara aplikasi ilmiah berkaitan dengan hasil yang cepat dan akurat; perhatian pertama untuk sistem embedded mungkin ukuran kode.
Dan sangat mungkin bahwa kode kecil cepat, atau kode cepat akurat. Optimasi masih jauh dari ilmu pasti, mengingat keragaman hardware dan software konfigurasi.
Algoritma optimasi mungkin sesederhana menghilangkan lingkaran invarian, atau serumit memeriksa program untuk menghilangkan seluruh sub-ekspresi umum global. Banyak optimasi mengubah apa programmer menulis menjadi bentuk yang lebih efisien, menghasilkan hasil yang sama saat mengubah rincian yang mendasari untuk efisiensi; lainnya "optimasi" menghasilkan kode yang menggunakan karakteristik khusus dari hardware, seperti set instruksi khusus.
Arsitektur memori, jaringan pipa, cache on-dan off-chip - semua mempengaruhi kinerja kode dengan cara yang tidak jelas untuk programmer menggunakan bahasa tingkat tinggi. Optimasi yang mungkin tampak untuk menghasilkan kode yang lebih cepat mungkin, pada kenyataannya, membuat kode besar yang menyebabkan lebih banyak cache misses, kinerja sehingga merendahkan.
Bahkan yang terbaik kode tangan-tuned C mengandung daerah penafsiran; tidak ada yang mutlak, satu-ke-satu antara C pernyataan dan instruksi mesin. Hampir setiap urutan kode sumber dapat dikompilasi ke dalam yang berbeda - tetapi secara fungsional setara - instruksi mesin sungai dengan ukuran yang berbeda dan karakteristik kinerja.
Inlining fungsi adalah contoh klasik dari fenomena ini: mengganti panggilan ke fungsi dengan kode sendiri fungsi dapat menghasilkan program yang lebih cepat, tetapi juga dapat meningkatkan ukuran program. Peningkatan ukuran program, mungkin, pada gilirannya, mencegah algoritma dari pas dalam kecepatan tinggi memori cache, sehingga memperlambat program karena cache misses.
Perhatikan saya gunakan kata musang "mungkin" - inlining fungsi kecil kadang-kadang memungkinkan algoritma optimasi lainnya kesempatan untuk lebih meningkatkan kode untuk kondisi lokal, memproduksi lebih cepat dan kode yang lebih kecil.
Optimasi tidak sederhana atau jelas, dan kombinasi dari algoritma dapat menyebabkan hasil yang tidak diharapkan. Yang membawa saya kembali ke pertanyaan: Untuk setiap aplikasi yang diberikan, apa pilihan optimasi yang paling efektif?
Apa yang Baru di Release ini:
· Perubahan kecil dalam lisensi non-bebas.
· Dukungan telah ditambahkan untuk versi terbaru dari libcoyotl dan libevocosm.

Software yang serupa

jstestnetlib
jstestnetlib

20 Feb 15

importchecker
importchecker

15 Apr 15

calltree
calltree

3 Jun 15

Perangkat lunak lain dari pengembang Scott Robert Ladd

Acovea/GTK
Acovea/GTK

3 Jun 15

Komentar untuk Acovea

Komentar tidak ditemukan
Tambahkan komentar
Aktifkan gambar!