bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] Multi-core functions


From: Elias Mårtenson
Subject: Re: [Bug-apl] Multi-core functions
Date: Fri, 4 Apr 2014 22:15:27 +0800

Cool, thanks for this!

Can you clarify one thing: If you don't specify anything on the command line, and also not specify anything at runtime, what will the default be?

Casually, I'd expect it to be set to OMP enabled, with the core count = the number of cores on the machine.

Regards,
Elias


On 4 April 2014 21:58, Juergen Sauermann <address@hidden> wrote:
Hi,

I have added a few functions to support multi-core/open MP programming
for GNU APL, (see SVN 184.

1. ./configure

You can now ./configure static and dynamic core counts:


./configure CORE_COUNT_WANTED=N with N>0

static maximum core count. Will

#define MULTICORE 1
#define STATIC_CORE_COUNT N


./configure CORE_COUNT_WANTED=0

no openMP support. Will

#undef MULTICORE
#define STATIC_CORE_COUNT 1


./configure CORE_COUNT_WANTED=-1 or =all

dynamic core count using all available cores. Will

#define MULTICORE 1
#undef STATIC_CORE_COUNT


./configure CORE_COUNT_WANTED=-2 or =argv

dynamic core count set by command line option --cc N.
Same as =all if --cc is not given. Will

#define MULTICORE 1
#undef STATIC_CORE_COUNT


./configure CORE_COUNT_WANTED=-3 or =syl

dynamic core count set in APL by ⎕SYL Will

#define MULTICORE 1
#undef STATIC_CORE_COUNT

The interpreter is started with core count 1.
Eg. ⎕SYL[26]←2 will set core count to 2.

⎕SYL[24;] is the core count used in in ./configure (read-only)
⎕SYL[25;] is the core count detected by pthread_getaffinity_np() (read-only)
⎕SYL[26;] is the current core count (read-only unless CORE_COUNT_WANTED=syl)

---------------------------------------------------------------------------------

In the interpreter code, the above #defines become available by:

#include "Common.hh"

That also declares the following functions/macros:

CoreCount core_count() // return number of cores that will be used
CoreCount max_cores() // return number of cores detected by pthread_getaffinity_np()
CoreCount setup_cores(CoreCount new_count) // set new core count, return min ( new_count, max_cores )

if STATIC_CORE_COUNT is #defined then core_count() is a macro expanding to max ( CORE_COUNT_WANTED, 1).
In that case, max_cores() cores will be used and not core_count() cores!

./configure checks for presence of omp.h and libgomp and sets CXX flags in Makefiles.

omp.h is #included by Common.hh if present and needed (ie. if MULTICORE is 1)


/// Jürgen






reply via email to

[Prev in Thread] Current Thread [Next in Thread]