[fpc-pascal] number of cpu cores

Marco van de Voort marcov at stack.nl
Sat Nov 29 19:14:39 CET 2008

In our previous episode, Michalis Kamburelis said:
[ Charset ISO-8859-1 unsupported, converting... ]
> Florian Klaempfl wrote:
> > Mattias Gaertner schrieb:
> >> I need a default value of the number of maximum threads.
> >> Is there already some RTL function that can be used for that?
> >>
> >> For example if the program runs on a 2 x quad core it would be nice to
> >> get 8.
> >> Hyperthreading multipliers should be applied.
> > 
> > No, but having some functions returning information about the CPUs would
> > be nice.
> Blender (http://www.blender.org/) source code has function to do that
> (they needed this to set the default number of threads for renderer). So
> you could try converting to Pascal the code of "BLI_system_thread_count"
> function from:
> https://svn.blender.org/svnroot/bf-blender/trunk/blender/source/blender/blenlib/intern/threads.c
> Doesn't seem that complicated on 1st look. It's basically appropriate
> GetSystemInfo call on Windows, sysctl on Mac OS, and sysconf (from Libc)
> call on most Unixes.

Sysconf is not standarized yet. Unit libc is linux/x86 only.

On freebsd, the sysctl modeled works, but note the typecast. (probably a K&R
void* <-> char* problem)

uses ctypes,sysctl;

var mib : array[0..1] of cint;
    t :cint;
	mib[0] := CTL_HW;
        mib[1] := HW_NCPU;
        len := sizeof(t);
        fpsysctl(pchar(@mib), 2, @t, @len, Nil, 0);
	writeln(t); // prints 2 on our dual CPU (Athlon MPs)

More information about the fpc-pascal mailing list