Bagaimana cara membiarkan tugas-tugas yang dikirimkan xg lain berbagi CPU dengan tugas-tugas pembuatan studio visual?

Saya dapat menggunakan incredibuild sebagai paket ekstensi visual studio untuk membuat kode saya menggunakan banyak CPU.

Saya juga bisa menggunakan perintah xgconsole msbuild ....

Tetapi jika saya ingin menambahkan beberapa tugas lain bersama dengan vc build secara bersamaan. Jadi saya mencobanya dengan beberapa cara:

  1. Gunakan konfigurasi batch.bat:

    xgSubmit /command task1
    xgSubmit /command task2
    msbuild  ***.sln /t:rebuild
    

Kemudian gunakan perintah

xgConsole /command="config.bat" /profile=pro.xml

Pro.xml saya sebagai berikut:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
<Tools>
    <Tool Filename="MSBuild" AllowIntercept="true" />
    <Tool Filename="Tracker" AllowIntercept="true" />
    <Tool Filename="CL" AllowIntercept="true" />
    <Tool Filename="Tracker" AllowRemote="true" />
    <Tool Filename="CL" AllowRemote="false" />
</Tools>
</Profile>

Namun masalahnya, proses pelacak membuat proses cl, kemudian proses cl membuat banyak proses cl lainnya. Jadi saya menetapkan cl sebagai AllowIntercept dan AllowRemote di file konfigurasi xml. Tetapi dengan konfigurasi xml ini, xgconsole tidak dapat mengirimkan proses cl ke CPU lain, cukup laporkan kesalahan.

  1. Jadi saya mencoba cara lain: Saya mengganti nama Visual Studio cl.exe menjadi clChild.exe, dan membuat cadangan yang lain, beri nama clorigin.exe.

Lalu saya mendesain cl.exe saya sendiri. Di cl.exe saya sendiri, saya memeriksa apakah proses induknya adalah tracker.exe, Kemudian saya memulai clorigin.exe, dan mentransfer para perintah ke sana, lalu menunggu clorigin.exe berhenti; jika proses induknya cl.exe, maka saya mulai clchild.exe.

Namun cara ini juga tidak ada gunanya. Sederhananya, Anda mungkin menganggap itu tidak ada gunanya.

Jadi menurut saya mungkin sebaiknya saya tidak memulai clorigin.exe oleh StartProcess API, yang hanya memulai proses lain; mungkin saya harus melakukannya sebagai execute api di unix, ketika memulai proses anak, di taskmanager hanya dapat melihat proses induk, yang berarti hanya proses induk untuk menyelesaikan tugas exe lain, tetapi tidak membuat id proses baru ?

Mungkin yang menurut saya salah, tetapi bagaimana cara membiarkan tugas lain dibagikan dan dikirim ke banyak CPU dengan tugas kompilasi visual studio pada saat yang bersamaan?


person dltigles    schedule 06.12.2014    source sumber


Jawaban (1)


Menggunakan plugin IncrediBuild Visual Studio (atau perintah BuildConsole) adalah cara termudah dan paling optimal (dari segi kinerja) untuk menjalankan solusi Anda menggunakan IncrediBuild. Jika Anda lebih memilih untuk mengeksekusi pembangunan menggunakan profil khusus Anda, profile.xml Anda akan terlihat sebagai berikut (harap perhatikan bahwa Pelacak tidak boleh disebutkan dalam profil):

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <Profile FormatVersion="1"> <Tools> <Tool Filename="MSBuild" AllowIntercept="true" /> <Tool Filename="cl" AllowRemote="True" DeriveCaptionFrom="lastparam" VCCompiler="True" VCCompilerUnbatch="True" /> <Tool Filename="link" AllowRemote="false" DeriveCaptionFrom="firstparam" VCLinker="True" MonitorFileChanges="true" />

</Tools> </Profile>

(Penulis bekerja di IncrediBuild)

person Dori    schedule 05.04.2015