[edit # 2] Jika ada orang dari VMWare yang dapat memukul saya dengan salinan VMWare Fusion, saya akan dengan senang hati melakukan hal yang sama dengan perbandingan VirtualBox vs VMWare. Entah bagaimana saya menduga hypervisor VMWare akan lebih baik disetel untuk hyperhreading (lihat jawaban saya juga)
Saya melihat sesuatu yang aneh. Ketika saya meningkatkan jumlah core pada mesin virtual Windows 7 x64 saya, waktu kompilasi keseluruhan meningkat bukannya menurun. Kompilasi biasanya sangat cocok untuk pemrosesan paralel seperti di bagian tengah (post dependency mapping) Anda cukup memanggil instance kompiler pada masing-masing file .c / .cpp / .cs / apa pun yang Anda buat untuk membuat objek parsial yang dapat diambil oleh linker. lebih. Jadi saya akan membayangkan bahwa kompilasi sebenarnya akan berskala sangat baik dengan # core.
Tapi yang saya lihat adalah:
- 8 core: 1,89 detik
- 4 core: 1,33 detik
- 2 core: 1,24 detik
- 1 inti: 1,15 detik
Apakah ini hanya sebuah artefak desain karena implementasi hypervisor vendor tertentu (type2: virtualbox dalam kasus saya) atau sesuatu yang lebih meresap di lebih banyak VM untuk membuat implementasi hypervisor lebih sederhana? Dengan begitu banyak faktor, saya sepertinya bisa membuat argumen untuk dan menentang perilaku ini - jadi jika seseorang mengetahui lebih banyak tentang ini daripada saya, saya ingin tahu untuk membaca jawaban Anda.
Terima kasih Sid
[ edit: menangani komentar ]
@ MartinBeckett: Kompilasi dingin dibuang.
@MonsterTruck: Tidak dapat menemukan proyek opensource untuk dikompilasi secara langsung. Akan bagus tapi tidak bisa mengacaukan dev dev saya sekarang.
@Mr Lister, @philosodad: Memiliki 8 hw utas, menggunakan VirtualBox, jadi seharusnya pemetaan 1: 1 tanpa emulasi
@ Torbjorn: Saya memiliki 6.5GB untuk VM dan proyek VS2012 yang bertubuh kecil - sangat tidak mungkin saya menukar file halaman.
@All: Jika seseorang dapat menunjuk ke proyek VS2010 / VS2012 open source, itu mungkin referensi komunitas yang lebih baik daripada proyek VS2012 (milik) saya. Orchard dan DNN tampaknya membutuhkan penyesuaian lingkungan untuk dikompilasi dalam VS2012. Saya benar-benar ingin melihat apakah seseorang dengan VMWare Fusion juga melihat ini (untuk kompartementalisasi VMWare vs VirtualBox)
Detail tes:
- Perangkat keras: Macbook Pro Retina
- CPU: Core i7 @ 2.3Ghz (quad core, hyper threaded = 8 core di windows task manager)
- Memori: 16 GB
- Disk: SSD 256GB
- Host OS: Mac OS X 10.8
- Tipe VM: VirtualBox 4.1.18 (tipe 2 hypervisor)
- OS Tamu: Windows 7 x64 SP1
- Kompiler: VS2012 mengkompilasi solusi dengan 3 proyek Azure C #
- Kompilasi pengukuran waktu dengan plugin VS2012 yang disebut 'VSCommands'
- Semua tes berjalan 5 kali, 2 run pertama dibuang, 3 rata-rata terakhir
sumber
Jawaban:
Jawaban: Itu tidak melambat, itu naik dengan # core CPU. Proyek yang digunakan dalam pertanyaan awal adalah 'terlalu kecil' (sebenarnya satu ton pengembangan tetapi kecil / dioptimalkan untuk kompiler) untuk menuai manfaat dari beberapa core. Tampaknya alih-alih merencanakan bagaimana menyebarkan pekerjaan, menelurkan beberapa proses kompiler dll, pada skala kecil ini yang terbaik adalah memalu pada pekerjaan secara seri langsung dari kelelawar.
Ini didasarkan pada percobaan baru yang saya lakukan berdasarkan komentar pada pertanyaan (dan keingintahuan pribadi saya). Saya menggunakan proyek VS yang lebih besar - kode sumber Umbraco CMS karena itu besar, bersumber terbuka dan seseorang dapat langsung memuat file solusi dan membangun kembali (petunjuk: memuat
umbraco_675b272bb0a3\src\umbraco.sln
dalam VS2010 / VS2012).SEKARANG, apa yang saya lihat adalah apa yang saya harapkan, yaitu kompilasi ditingkatkan !! Nah, ke titik tertentu sejak saya menemukan:
Takeaways:
Poin terakhir itu menyebabkan saya memantau sejarah CPU di semua inti melalui 'Activity Monitor' (sejarah CPU) dan apa yang saya temukan adalah
Takeaways:
Pada satu inti VM, aktivitas tersebut tampaknya melompati 4 core HW. Masuk akal, untuk mendistribusikan panas secara merata di tingkat inti.
Bahkan pada 4 core Virtual (dan 27 thread VirtualBox OS X atau keseluruhan ~ 800 OS X thread), hanya bahkan thread HW (0,2,4,6) hampir jenuh sedangkan benang HW aneh (1,3,5,7) hampir 0%. Lebih mungkin scheduler berfungsi dalam hal core HW dan BUKAN HW threads jadi saya berspekulasi mungkin OSX 64bit kernel / scheduler tidak dioptimalkan untuk CPU hyper threaded? Atau melihat pengaturan inti 8VM, mungkin mulai menggunakannya pada utilisasi CPU% tinggi? Sesuatu yang lucu sedang terjadi ... well, itu pertanyaan terpisah untuk beberapa pengembang Darwin ...
[Sunting]: Saya ingin mencoba yang sama di VMWare Fusion. Kemungkinannya tidak akan seburuk ini. Saya ingin tahu apakah mereka memamerkan ini sebagai produk komersial ...
Footer:
Jika gambar pernah hilang, kompilasi tabel waktu adalah (teks, jelek!)
sumber
Hanya ada satu alasan yang memungkinkan terjadinya hal ini, yaitu overhead Anda melebihi keuntungan Anda.
Anda mungkin meniru beberapa core, daripada menugaskan core aktual atau bahkan proses atau bahkan utas dari mesin host. Itu tampaknya cukup bagi saya, dan jelas akan memberi Anda percepatan negatif.
Kemungkinan lain adalah bahwa proses itu sendiri tidak dapat diparalelkan dengan baik, dan bahkan mencoba untuk memparalelasinya akan lebih mahal dalam biaya komunikasi daripada yang Anda peroleh.
sumber
your overhead is exceeding your gains
: Benar tapi itu cukup banyak mencakup semuanya tanpa mengetahui apa yang sebenarnya menyebabkannya :) ... Saya menggunakan VirtualBox dan memiliki inti fisik, jadi diasumsikan pemetaannya harus 1: 1 tanpa emulasi. Saya akan mencari sumber terbuka BESAR VS2012 sehingga orang lain dapat referensi juga ... brbAnda tidak sendiri ...
Hal yang sama terjadi pada saya sebelumnya dengan Java menggunakan Maven 3.x untuk mengkompilasi pada i3. Membiarkannya default ke utas "4" jauh lebih lambat, mendekati 50% lebih lambat, daripada mengatakannya secara eksplisit hanya menggunakan 2 core.
Saya pikir itu ada hubungannya dengan konteks hyper-threading switching dan tumpang tindih I / O.
Masuk akal ketika Anda mulai memikirkannya. Anda dapat membuktikan apa yang menyebabkan penurunan hasil dengan alat profil sistem luas yang baik.
sumber