From owner-freebsd-smp@FreeBSD.ORG Wed Oct 17 17:31:07 2007 Return-Path: Delivered-To: freebsd-smp@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 98D6316A419 for ; Wed, 17 Oct 2007 17:31:07 +0000 (UTC) (envelope-from kris@FreeBSD.org) Received: from weak.local (hub.freebsd.org [IPv6:2001:4f8:fff6::36]) by mx1.freebsd.org (Postfix) with ESMTP id 1B06813C457; Wed, 17 Oct 2007 17:31:05 +0000 (UTC) (envelope-from kris@FreeBSD.org) Message-ID: <471646D9.5090508@FreeBSD.org> Date: Wed, 17 Oct 2007 19:31:05 +0200 From: Kris Kennaway User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: "B. Estrade" References: <20071017164204.GG76582@bc1.hpc.lsu.edu> In-Reply-To: <20071017164204.GG76582@bc1.hpc.lsu.edu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-smp Subject: Re: multi-threading with gcc43 openmp on dual core X-BeenThere: freebsd-smp@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: FreeBSD SMP implementation group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Oct 2007 17:31:07 -0000 B. Estrade wrote: > I am messing around with gcc43's openmp capabilities on an IBM Thinkcentre, which has a dual core Intel vPro. I am running FreeBSD 6.2 with SMP. > > At this stage in the game I am trying to push around the limits of the systems capabilities, and I was wondering if FreeBSD attempts to offload some of the threads to the 2nd core. I admittedly don't know the chip architecure or how FreeBSD handles man threads in SMP, but I'd like too, which is why I am playing with this. > > As the number of threads increases, one core seems to be oversubscribed according to top (i.e., wcpu > 100%) yet the system is said to be 50% idle (+/- a few points). The load average also seems to not get much higher than 1.0. While I am happy with the load handling, I am wondering: > > 1. why are threads not evenly distributed b/w CPU0 and CPU1 > 2. is there a way to explicitly facilitate this thread balancing (don't know if this is related to CPU affinity) > 3. what is a good way to push the system? > > The program I am running spawns an increasing number of threads from 1 to OMP_NUM_THREADS, where each thread has its own loop that simply assigns the sum of j and i to k. My OpenMP-foo is not advanced, but it's steadily getting there. > > Here is the code I am using right now: > > #include > int main (int argc, char *argv[]) { > int i,j,k,m,n; > int MAX=500; > n=omp_get_max_threads(); > for (m=1;m<=n;m++) { > k=0; > omp_set_num_threads(m); > #pragma omp parallel private(i,j) shared(MAX) reduction(+:k) > { for (i=0;i for (j=0;j k = j+i; > } > #pragma omp barrier > } > } > printf("%8d threads: %d\n",m,k); > } > return 0; > } > > It is compiled and executed with the following command: > > % gcc43 -fopenmp test.c && export OMP_NUM_THREADS=1500 && ./a.out > > Any thoughts? > > Once I get familiar with what 6.x is doing, I plan on putting 7.0 on this system to see how it compares. Ultimately, I'd like to a straightforward code I can use to evaluate how a particular SMP system running FreeBSD scales. I know it is not a "real" workload, but it would give /me some information that I'd find useful. > > TIA && Cheers, > Brett > FreeBSD uses all CPUs for running processes and threads. This relies on your program being sufficiently parallel though. I don't know enough about openmp but maybe it is not able to parallelize your workload very well. Kris