Premiär! Fyndchans i SweClockers Månadens Drop

Kompilera C++ kod på extern maskin

Permalänk
Medlem

Kompilera C++ kod på extern maskin

Jag har en fråga rörande kompilering av C++-kod på en extern maskin. På jobbet har vi en väldigt komplicerad markovmodell som vi utvecklat under en längre tid och som nu ligger i C++. Jag utvecklar/underhåller den med hjälp av min jobblaptop. Modellen tar dock lite väl långt tid att kompilera ihop och köra på den och eftersom den är så komplex behöver vi testköra den ganska ofta.

Jag funderade därför på om det fanns nåt smidigt sätt att kunna utveckla den på en extern maskin som har lite mer kraft? Säg att jag kan skriva klart koden jag ska ändra på min vanliga maskin, tanka upp koden på GitHub eller liknande och sen kompilera och köra koden på den externa (stationära) maskinen. Finns det smidiga lösningar där ute för detta som funkar bra med Visual studio?

Jag sitter som i princip ensam C++-utvecklare på jobbet - så har inte så mycket input internt att ta till mig.

Permalänk
Medlem

Jag kan ingenting om det här men kan du specificera "extern maskin"?

Är hela poängen att du enbart har den hårdvara du har, vill att det ska gå snabbare, men du och/eller din arbetsgivare tycker inte att det är rimligt att investera i mer kraftfull hårdvara?

Permalänk
Medlem

"funkar bra med Visual studio"

Krav att det ska byggas via VS? Om ni klarar av att uppfylla samma krav på en Linuxmaskin så är det ju rätt jäkla smidigt att trycka koden mot en git rep, och köra en auto-builder på Linuxmaskinen som bygger det automagiskt åt er vid en bestämd trigger, t.ex. vid en master branch push.

Ovan är hur vi kör på jobbet. Byggmaskinerna är rejäla CPU- och minnesmonster med snabba Optane-SSD:er som tuggar igenom allt rätt friskt. Arbetet kan därför ske lätt på en laptop, medan bygget sker på servern.

Permalänk
Datavetare

Kan komma på två sätt direkt.

1. SSH:ar du bara till en fetare maskin. Är ofta så jag jobbar, sitter typiskt med en bärbar dator som driver webbläsare, office etc. Från den SSH:ar eller kör CI/CD via webbläsaren till väsentligt fetare maskiner, endera egna stationära eller molntjänster som AWS, Azure.

Fungerar bra med Visual Studio Code i alla fall. Riktigt bra faktiskt!

2. Om du kör någon form av *NIX, sätt upp distcc. D.v.s. använd flera maskiner på ditt LAN (du vill nog inte köra distcc över WAN) som en virtuell multicore maskin. Detta kombineras med fördel med ccache för att göra så lite som möjligt.

Faktum är att du kanske ska starta med ccache, rätt ofta kan byggen gå från att vara CPU-bundna utan ccache cache till att mest bli I/O-bundna med detta. Gäller fall där man ofta ändra väldigt lokala saker i riktigt stora byggen och av någon anledning ändå måste bygga den från scratch.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Visual studio code har stöd för detta.
https://code.visualstudio.com/docs/remote/remote-overview

Om du har mandat att ändra kan du ju dumpa visual studio-beroendet och köra mot en headless linux-maskin, gissar på att det är typ CMake som gäller då (https://cmake.org/), det är någorlunda plattformsoberoende. Byggmaskiner är också najs, som Soir föreslår i inlägget ovan, speciellt om ni skall utöka teamet för att kunna köra automatiserade tester.

Permalänk
Medlem

Är det kompileringen eller länkningen som tar tid? Inkrementell kompilering borde gå snabbt, men... jag har aldrig kodat C++ seriöst med Visual Studio, men i C# så är de inkrementella byggena inte direkt optimala.

Man får anta att ni har automatiserat testerna?

Azure DevOps och Github går att sätta upp så att man får kompilering körd och tester körda vid incheckning. Däremot brukar det vara ganska långsamt, så det är inte så säkert att det passar ditt användningsfall. I ditt fall kanske det är bättre att betala för en fläskig moln-VM som kan vara avslagen den mesta av tiden, eller en riktig arbetsstation som du kan RDP:a till och utveckla på.

Men det kan nog vara läge att fundera på om byggmiljön (Visual Studio) är den rätta och om den är optimalt konfigurerad. Är koden strukturerad så att den fungerar bra att bygga inkrementellt?

Permalänk
Medlem

Vi använde IncrediBuild för ett -antal- år sedan och jag vill minnas att den fungerade ypperligt

Visa signatur

{|XSX|PS3|PS4|}

Permalänk
Medlem
Skrivet av Wixner:

Vi använde IncrediBuild för ett -antal- år sedan och jag vill minnas att den fungerade ypperligt

Jag satt precis och försökte minnas vilket verktyg det var jag använde, det kan ha varit det.

Microsoft själva har ju också viss dokumentation för "Gör det själv"-aren:

https://docs.microsoft.com/en-us/visualstudio/ide/walkthrough...

Råkade också snubbla över en artikel om parallellisering på sin egen PC men det kanske är att slå in öppna dörrar här:

https://helgeklein.com/blog/2019/12/enabling-multi-processor-...

Permalänk

Du kan kika på https://code.visualstudio.com/docs/remote/remote-overview. Jag har kollegor som jobbar enligt den modellen.

Själv gör jag liknande saker med emacs tramp mode ibland.

Permalänk
Medlem
Skrivet av Olegh:

Jag kan ingenting om det här men kan du specificera "extern maskin"?

Är hela poängen att du enbart har den hårdvara du har, vill att det ska gå snabbare, men du och/eller din arbetsgivare tycker inte att det är rimligt att investera i mer kraftfull hårdvara?

En stationär dator med rejält med kraft.

Skrivet av Soir:

"funkar bra med Visual studio"

Krav att det ska byggas via VS? Om ni klarar av att uppfylla samma krav på en Linuxmaskin så är det ju rätt jäkla smidigt att trycka koden mot en git rep, och köra en auto-builder på Linuxmaskinen som bygger det automagiskt åt er vid en bestämd trigger, t.ex. vid en master branch push.

Ovan är hur vi kör på jobbet. Byggmaskinerna är rejäla CPU- och minnesmonster med snabba Optane-SSD:er som tuggar igenom allt rätt friskt. Arbetet kan därför ske lätt på en laptop, medan bygget sker på servern.

Inte ett krav, men det vore bra om det gick. Jag behöver windows på datorn jag bygger grejerna på - men inte på den externa maskinen egentligen.

Skrivet av Yoshman:

Kan komma på två sätt direkt.

1. SSH:ar du bara till en fetare maskin. Är ofta så jag jobbar, sitter typiskt med en bärbar dator som driver webbläsare, office etc. Från den SSH:ar eller kör CI/CD via webbläsaren till väsentligt fetare maskiner, endera egna stationära eller molntjänster som AWS, Azure.

Fungerar bra med Visual Studio Code i alla fall. Riktigt bra faktiskt!

2. Om du kör någon form av *NIX, sätt upp distcc. D.v.s. använd flera maskiner på ditt LAN (du vill nog inte köra distcc över WAN) som en virtuell multicore maskin. Detta kombineras med fördel med ccache för att göra så lite som möjligt.

Faktum är att du kanske ska starta med ccache, rätt ofta kan byggen gå från att vara CPU-bundna utan ccache cache till att mest bli I/O-bundna med detta. Gäller fall där man ofta ändra väldigt lokala saker i riktigt stora byggen och av någon anledning ändå måste bygga den från scratch.

Ska kika på detta.

Skrivet av cp_:

Visual studio code har stöd för detta.
https://code.visualstudio.com/docs/remote/remote-overview

Om du har mandat att ändra kan du ju dumpa visual studio-beroendet och köra mot en headless linux-maskin, gissar på att det är typ CMake som gäller då (https://cmake.org/), det är någorlunda plattformsoberoende. Byggmaskiner är också najs, som Soir föreslår i inlägget ovan, speciellt om ni skall utöka teamet för att kunna köra automatiserade tester.

Jag har mandat att ändra, men problemet med en linux-maskin är att jag blir den enda på företaget som kan använda den... Vi är egentligen nationalekonomer, så väldigt få kan programmera ordentligt där.

Skrivet av KAD:

Är det kompileringen eller länkningen som tar tid? Inkrementell kompilering borde gå snabbt, men... jag har aldrig kodat C++ seriöst med Visual Studio, men i C# så är de inkrementella byggena inte direkt optimala.

Man får anta att ni har automatiserat testerna?

Azure DevOps och Github går att sätta upp så att man får kompilering körd och tester körda vid incheckning. Däremot brukar det vara ganska långsamt, så det är inte så säkert att det passar ditt användningsfall. I ditt fall kanske det är bättre att betala för en fläskig moln-VM som kan vara avslagen den mesta av tiden, eller en riktig arbetsstation som du kan RDP:a till och utveckla på.

Men det kan nog vara läge att fundera på om byggmiljön (Visual Studio) är den rätta och om den är optimalt konfigurerad. Är koden strukturerad så att den fungerar bra att bygga inkrementellt?

Kompileringen tar tid, att testa går fortare eftersom vi kan köra små sample över korta tidsperioder genom modellen. Testerna är inte automatiserade, vi har 2000-3000 inputparametrar och jag är mer eller mindre ensam kodare på modellen idag.

Koden skulle nog behöva lite jobb för att få mer effektiv - men det kommer ta väldigt långt tid att fixa det med tanke på modellens storlek.

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Du kan kika på https://code.visualstudio.com/docs/remote/remote-overview. Jag har kollegor som jobbar enligt den modellen.

Själv gör jag liknande saker med emacs tramp mode ibland.

Såg denna efter jag svarat på resten. Det låter helt klart väldigt intressant! Tack.

Permalänk
Medlem

Github + google cloud build ?

Sätt up en schysst ci/cd pipeline