If you have a single machine, usually you would do (for a quad-core machine) something like:
make -j4
This command will generate four compilation jobs and distribute to your CPU cores, compiling the jobs in parallel.
But if you have another machine in your local network, Icecc let you use the cores of this other machine too. If this other machine is dual core, you could run:
make -j6
How it works?
When you call make -jN, instead of calling the classic GNU Gcc, we will "trick" the make so it will call another "Gcc" binary defined by the Icecc (by changing the PATH).
The make command will generate the jobs and call the Icecc Gcc that will send the source files to the scheduler that will forward the jobs to the remote machines (or to him self or to the machine who started the compilation).
How to setup the network?
Easy on Ubuntu:
* Do the following commands in every computer in the network:
$ sudo apt-get install icecc
$ export PATH=/usr/lib/icecc/bin:$PATH
Check if the gcc in the /usr/lib/icecc is being used:
$ which gcc
/usr/lib/icecc/bin/gcc
Let say that the IP address of the machine you chose to be the scheduler is 192.168.0.34. Edit the file /etc/icecc/icecc.conf and change the follow variables (still in all the machines in the network):
ICECC_NETNAME="icecc_net"
ICECC_ALLOW_REMOTE="yes"
ICECC_SCHEDULER_HOST="192.168.0.34"
Reset the Icecc Deamon
sudo service iceccd restart
* Do the following command in the the scheduler machine 192.168.0.34:
sudo service icecc-scheduler start
How can I know if it works?
Install and Run the monitor:
$ sudo apt-get install icecc icecc-monitor
$ sudo apt-get install icecc icecc-monitor
$ icemon -n icecc_net
You should see all machines and an indicator saying that the network is online:
In this case I have 3 machines, the first two have four cores and the last one just one core.
When I compile something with make -j9 I see the Jobs number growing and the slots being filled.
CCache with Icecc (edited):
To speed up even more your compilation time, you can setup CCache (explained in the last post).
The general ideia is: check in a local cache first (using CCache) if the source files have been already compiled, if not, then give the job to Icecc.
When using with CCache, you don't need to add Icecc in the PATH, we use CCACHE_PREFIX instead:
$ export
CCACHE_PREFIX=icecc
$ echo $PATH
/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ which gcc
/usr/lib/ccache/gcc
Wow I didn't know that! What a nice hack.Thanks Helen.
ReplyDeleteYou are welcome, thank you for the comment :)
DeleteAwesome blog.
ReplyDeletehow to hack casino online