I bump into cilk that is much like OpenMP this week, and give it a try on Arch Linux
:
(1) Follow the Quick start to build Tapir-Meta
:
$ git clone --recursive https://github.com/wsmoses/Tapir-Meta.git
$ cd Tapir-Meta/
$ ./build.sh release
$ source ./setup-env.sh
Please note gcc
is the default compiler on Arch Linux
, and there is a compile error of using gcc
. So I switch to clang
:
$ CC=clang CXX=claang++ ./build.sh release
The setup-env.sh is simple, just make Tapir/LLVM
compilers as the default ones:
$ which clang
/home/xiaonan/Tapir-Meta/tapir/build/bin/clang
$ which clang++
/home/xiaonan/Tapir-Meta/tapir/build/bin/clang++
(2) Build libcilkrts (please refer this issue: “/usr/bin/ld: cannot find -lcilkrts” error).
(3) Write a simple program:
$ cat test.c
#include <unistd.h>
#include <cilk/cilk.h>
int main(void)
{
cilk_spawn sleep(100);
cilk_spawn sleep(100);
cilk_spawn sleep(100);
cilk_sync;
return 0;
}
Build it:
$ clang -L/home/xiaonan/cilkrts/build/install/lib -fcilkplus test.c
$ ldd a.out
linux-vdso.so.1 (0x00007ffdccd32000)
libcilkrts.so.5 => /home/xiaonan/cilkrts/build/install/lib/libcilkrts.so.5 (0x00007f1fe4d60000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f1fe4b48000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f1fe478c000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f1fe4588000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f1fe436a000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f1fe3fe1000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f1fe3c4c000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f1fe4f7e000)
From ldd
output, we can see it links the ibcilkrts
library. Execute the program:
$ ./a.out &
[1] 25530
[xiaonan@tesla-p100 ~]$ ps -T 25530 | wc -l
105
We can see a.out
spawns many threads.