Click here to Skip to main content
15,868,016 members
Articles / Programming Languages / C++
Article

IncrediBuild - Fast C/C++ Compilation

21 Nov 20026 min read 185.2K   10   60
IncrediBuild, integrated with Microsoft Visual C++, silently distributes compilation tasks across workstations in the network, cutting build times down by 90% and more.

This article is in the Product Showcase section for our sponsors at CodeProject. These articles are intended to provide you with information on products and services that we consider useful and of value to developers.

This is a continuation in our series of showcase reviews for our sponsors at CodeProject. These reviews are intended to provide you with information on products and services that we consider useful and of value to developers. They also allow you to discuss a product and interact with the manufacturer or provider on a one-to-one basis.

IncrediBuild Cuts C/C++ Build Time Down by 90%

How many times have you found yourself blankly staring at your screen monitor, waiting for MSVC to compile your latest code modifications? Are you familiar with that small pause of hesitation before making changes in a header file that you know will cause a near full rebuild of the project?

Slow compilation time has always been one of the C/C++ programming language's weakest spots. Whether it's a few hours wait for a full product build, or 10 minutes spent several times a day waiting for an incremental build to finish on a developer workstation - the effect is frustration, loss of productivity and wasted time.

Surprisingly, this has almost become a fact of life for most developers. Although the introduction of precompiled headers along with the improvement in P.C. hardware have improved the situation to some extent (thankfully, 5-10 hour builds are not the common case anymore), a medium to large scale software project typically wastes hundreds of precious developer hours yearly on compilation alone.

IncrediBuild, by Xoreax Software, introduces a unique and effective approach to this problem. Integrated with Microsoft Visual C++, it silently distributes compilation tasks across workstations in the network, cutting build times down by 90% and more.

Image 1

One of the views in IncrediBuild's "Build Monitor" visually displays the distributed compilation progress. Each file is colored according to its compiler message severity.

Distributed Compilation

IncrediBuild is based on a peer-to-peer model. An "Agent" component is installed on different machines in the network, while a central component called the "Coordinator" is responsible for managing the compilation workload. When a build is initiated by an IncrediBuild Agent user, Agents in remote machines are assigned as compilation resources for that build. Source files are then compiled by those Agents, and the build output is returned to the building machine. Linking is finally performed on the machine that initiated the build.

The task of assigning different Agents to currently running builds is performed by the Coordinator. Based on knowledge of each Agent computer's hardware specifications, current CPU availability and other parameters, the Coordinator sees that at each point in time, a build will utilize the strongest, most available Agents. Moreover, when several builds are running at one time, the Coordinator's job is to distribute the available computing power evenly among the building Agents.

When functioning as compilation resources for remote builds, Agents perform compilation tasks in a low priority process, in order to maintain the computer's level of responsiveness. This is made even more effective by the Coordinator's ability to take into account each machine's availability, effectively assigning busier machines last (in fact, the second a machine reaches a certain minimal level of activity, it will immediately cease any remote compilation activity). Finally, at any given time, an IncrediBuild Agent user can temporarily disable the Agent on his/her machine, keeping the machine's resources out of other Agents' reach.

Image 2

The IncrediBuild Coordinator application acts as a "control center" for the IncrediBuild environment. Any build activity taking place is displayed, along with other useful data.

Using IncrediBuild

IncrediBuild builds can be run from 3 distinct interfaces:
  • The Microsoft Visual C++ IDE - IncrediBuild adds an additional menu and toolbar to the IDE, allowing builds to be run directly from the development environment. Standard MSVC builds can still be run at any time, and IncrediBuild does not override any MSVC functionality.
  • The IncrediBuild command line interface - IncrediBuild features a strong command line interface that allows builds to be run from scripts, third party tools and console windows.
  • The IncrediBuild tray-icon menu - IncrediBuild's tray-icon menu allows for builds to be run without requiring the MS Visual C++ IDE to be open. Simply browse for a DSP/DSW file (or select one from the recent builds list) and start a build.

When running IncrediBuild builds, MSVC's standard output display is replaced by the IncrediBuild "Build Monitor". This unique display contains everything you need to monitor your build's progress and easily locate warning/error messages. A visual display of the distributed compilation process shows each compiled source file as a progress bar, colored according to the severity of compiler messages generated for that file. The build output can be displayed for the entire build as well as separately for each configuration (see below). To top it all off, extra features like a build progress bar and easy navigation to next/previous error message are there to make life even easier.

Image 3

When used from within the MSVC IDE, a docked Build Monitor window displays the build results. Shown here is the Build Monitor's per-project configuration output view, along with build progress bars for each configuration.

A Word on Reliability

One of the most common concerns new IncrediBuild users have is: "How can I be sure my builds will come out right?". This is particularly an issue when distributing compilation over machines with different environments, operating systems, DLLs and COM objects installed.

IncrediBuild tackles this issue with the concept of a "Virtual Environment". When compiling for a remote Agent, IncrediBuild runs the compilation within a protected mirror image of the building machine's environment. This has several pluses. For a start, whenever the compiler references a source file, type library, registry entry, etc. - it is guaranteed to operate identically to a similar operation on the building machine. This also means that IncrediBuild requires no manual configuration whatsoever to work, since it will always use the building machine's environment. Another benefit is that IncrediBuild does not use the machine's file system to store remote source files, but rather uses its own source file caching mechanism, saving the trouble of worrying about different source file versions appearing in your folders.

Just to give an example that stresses how far the "Virtual environment" concept has been taken: Even the compiler version used for remote compilations is mirrored from the building machine. In fact, in order to use an IncrediBuild Agent on a machine used solely as a compilation resource (and not to initiate builds), there's no need for MS Visual C++ to be installed, since IncrediBuild will always disregard the locally installed version and use the mirrored version.

Closing Words

IncrediBuild offers the chance to instantly improve development productivity and the quality of code. Depending on the length of your project builds, the effect can be anything from a substantial improvement to a radical boost of a development team's effectiveness. The fully functional 30-day trial version available for download on the Xoreax Software web site offers you the chance to try it out for yourself (setup is a matter of minutes).

For more details, the IncrediBuild download page and order information visit http://www.xoreax.com.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Israel Israel
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generaldistcc Pin
geoffrey_atkinso@hotmail.com5-May-05 16:16
geoffrey_atkinso@hotmail.com5-May-05 16:16 
GeneralJetFrog vs. Incredibuild Pin
Malcolm Wilkins7-Jun-04 4:03
Malcolm Wilkins7-Jun-04 4:03 
QuestionUses LZO? Pin
compiler2-Mar-04 12:37
compiler2-Mar-04 12:37 
Generalgmake Pin
Anonymous26-Jul-03 22:53
Anonymous26-Jul-03 22:53 
GeneralRe: gmake Pin
Uri Mishol27-Jul-03 4:25
Uri Mishol27-Jul-03 4:25 
QuestionSymbian? Pin
Saty15-Jul-03 0:48
Saty15-Jul-03 0:48 
AnswerRe: Symbian? Pin
SteveyP27-Aug-03 3:14
SteveyP27-Aug-03 3:14 
GeneralThere is another tool. Pin
Eugene Solovey25-Jun-03 15:55
sussEugene Solovey25-Jun-03 15:55 
GeneralRe: There is another tool. Pin
araud17-Apr-05 23:15
araud17-Apr-05 23:15 
their site is dead where to find it?

"7 You shall have no other gods before me. 8 You shall not make an images in order to bow down to them or serve them. 11 You shall not take the name of the LORD your God in vain. 12 Observe the sabbath day 16 Honor your father and your mother, that your days may be prolonged. 17 You shall not kill. 18 Neither shall you commit adultery. 19 Neither shall you steal. 20 Neither shall you bear false witness against your neighbor. 21 Neither shall you covet anything that's your neighbor's." Your God
GeneralXCode Pin
Anonymous25-Jun-03 9:37
Anonymous25-Jun-03 9:37 
QuestionCan I suggest a new name for this product? Pin
Anonymous8-Jun-03 4:10
Anonymous8-Jun-03 4:10 
AnswerRe: Can I suggest a new name for this product? Pin
John M. Drescher7-Jul-03 13:09
John M. Drescher7-Jul-03 13:09 
GeneralRe: Can I suggest a new name for this product? Pin
DanPetitt22-Jul-03 9:20
DanPetitt22-Jul-03 9:20 
GeneralRe: Can I suggest a new name for this product? Pin
mikejt425-Oct-07 23:40
mikejt425-Oct-07 23:40 
GeneralProblem with VC 6.0 Pin
dhoacz27-May-03 2:24
dhoacz27-May-03 2:24 
GeneralIncrediBuild for MSVC .NET Released! Pin
Uri Mishol16-Apr-03 4:30
Uri Mishol16-Apr-03 4:30 
GeneralReading all responces, I'm confused... Pin
igor196011-Apr-03 11:14
igor196011-Apr-03 11:14 
GeneralRe: Reading all responces, I'm confused... Pin
EpicBoy14-Apr-03 5:02
EpicBoy14-Apr-03 5:02 
GeneralRe: Reading all responces, I'm confused... Pin
igor196014-Apr-03 5:58
igor196014-Apr-03 5:58 
GeneralGood but not as good as it should be Pin
Anonymous9-Apr-03 5:28
Anonymous9-Apr-03 5:28 
QuestionCodeWarrior? Pin
Livid8-Apr-03 20:18
Livid8-Apr-03 20:18 
GeneralIncrediBuild v1.14 Beta Released Pin
Uri Mishol7-Jan-03 5:10
Uri Mishol7-Jan-03 5:10 
GeneralSeems to work very well Pin
pfrants3-Jan-03 2:32
pfrants3-Jan-03 2:32 
GeneralSome Problems Pin
Holger Gothan14-Oct-02 21:36
Holger Gothan14-Oct-02 21:36 
GeneralRe: Some Problems Pin
Anonymous16-Oct-02 6:30
Anonymous16-Oct-02 6:30 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.