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

Reply via email to