2015-08-17 13:57 GMT+02:00 Antti Kantee <[email protected]>: > > I want to run different established performance benchmarking tools (e.g. >> STREAM) and real world applications used in web application stacks on >> Rumprun unikernel. At the end I want to compare the measurement results of >> these tools/applications to other platforms (e.g. OSv,Linux Native, >> Docker, >> ...) for a recommendation matrix for what kind of workload which platform >> is most suitable in a cloud/backend application context. Many of these >> application I want to use are utilizing OpenMP to fork new threads for >> each >> core and join the results at the end. >> > > What does OpenMP use for transport on the cloud? sockets? > > What do you expect to be dominating factor in your benchmark? (e.g. data > transfer, guest bootstrap overhead, ...)?
OpenMP has in this case nothing to do with communication between multiple machines but is a convenient way of programming parallel applications using compiler pragmas. See https://en.wikipedia.org/wiki/OpenMP for a good explanation and some simple examples. > > I assume that you have to fetch the sources of the compiler that you're >>> using and crosscompile libgomp first. I also assume that libgomp is tied >>> to the compiler version, so not sure how much we can automate that, >>> unless >>> we provide a default compiler (which has sort of been an explicit no-no >>> in >>> our design so far -- you should be able to use any compiler you want to >>> build rump kernels). >>> >>> >> What is the difference between x86_64-rumprun-netbsd-gcc in the app-tools >> folder and my standard gcc (4.9) on my system which can compile OpenMP >> applications, when there is no complier supplied by rumprun itself? >> > > The C compiler frontend does essentially two things: > 1) compiles C for the correct target architecture > 2) sets the correct paths and defaults for headers/libs/cppmacros for the > target system > > So, we want "1" as-is, but "2" we need to adjust to be correct for our use > with the wrappers. You can't use libgomp from your system (*) because it's > compiled against your system. It's the same reason that you can't use > pretty much any system-interfacing library on another system, even though > they might share the same "1". > > *) ok, you might, if your system is NetBSD, but I'd assume the gcc > versions need to match too. > > IOW, I still think you need to get gcc 4.9 sources and crosscompile > libgomp for Rumprun from there. If that works, we can think further about > how to "productize" the availability of libgomp for Rumprun. > > I noticed today that x86_64-rumprun-netbsd-gcc is just a wrapper shell script around the gcc installed on my system. I got the gcc 4.9 sources but is it possible to cross-compile single modules / components from it without compiling the complete gcc again? My current approach is the following: - Clone GCC 4.9 sources from Github to folder <gcc> - Mkdir additional GCC Build folder called <gcc-build> - Execute configure (GNU Autotools) from new Build Folder with relative path to GCC lgomp Source Folder gcc-build/$ /gcc/lgomp/configure --target=x86_64-rump kernel-netbsd - Execute Makefile created by configure I run into following error during the execution of the Makefile: /tmp/gcc/libgomp/oacc-init.c: In function ‘acc_on_device’: > /tmp/gcc/libgomp/oacc-init.c:627:3: error: implicit declaration of > function ‘__builtin_acc_on_device’ [-Werror=implicit-function-declaration] > return __builtin_acc_on_device (dev); > ^ > cc1: all warnings being treated as errors > make[2]: *** [oacc-init.lo] Error 1 > make[2]: Leaving directory `/tmp/gcc-build' > make[1]: *** [all-recursive] Error 1 > make[1]: Leaving directory `/tmp/gcc-build' > make: *** [all] Error 2 Does anyone have experience with compiling single components from GCC source? Can anyone point me to further material that could help me in my current situation? Thanks! :) Cheers, Vincent
