Gnu C++ & Open MP

burlen burlen@apollo.sr.unh.edu
Wed Jan 9 09:29:00 GMT 2008


Tom St Denis wrote:
> burlen wrote:
>> Hi,
>> I notice some strange result when I use Gnu OpenMP, I have an 
>> existing C++ serial code which has some time consuming for loops 
>> where some calculations are made on a large arrays of doubles,(12 
>> arrays of length 1E6 for example) and also some of these arrays are 
>> copied to create a vector field(also an array of doubles). This 
>> particular for loop is where the code takes 90% of its time and 
>> typically can take 1 or 2 minutes here.  What I notice is that when I 
>> run open MP its actually slower than the serial code! Not by much but 
>> still slower. Here I use the command 'time' to compare. Also I notice 
>> by watching top, that in both cases only 1 core is taxed, while in 
>> the OpenMP build memory usage doubles(actually a second core goes up 
>> from 0% to about 10%). I have a quad core system(dual cpu dual core, 
>> and 4G of ram), so this result is totally unexpected. In my code I 
>> explicitly set the number of threads to 4. I was expecting to see all 
>> 4 cores running at 80-90%. I have verified that 4 threads are being 
>> launched by runing the OpenMP build in GDB. What is going on here? 
>> how can I figure what the problem is?
>> Thanks Burlen
>
> What's the affinity of the threads?  IIRC by default at least with 
> pthreads they attach to the CPU that issued the thread so you have to 
> set the affinity to 0xF or -1 [all].
>
> Tom
Thanks for the tip, google'ing I found there is, or rather will be an 
environment variable, GOMP_CPU_AFFINITY, in a later release(its not in 
4.2) I have little desire to configure and build gcc, so I am wondering 
is there an alternate approach? Can I extrenal to OpenMP, control how 
threads are mapped to cpus?





More information about the Gcc-help mailing list