From owner-freebsd-smp@FreeBSD.ORG Wed Oct 17 16:59:31 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 D5B8816A417 for ; Wed, 17 Oct 2007 16:59:31 +0000 (UTC) (envelope-from estrabd@gmail.com) Received: from bc1.hpc.lsu.edu (bc1.hpc.lsu.edu [130.39.198.6]) by mx1.freebsd.org (Postfix) with ESMTP id 877A113C44B for ; Wed, 17 Oct 2007 16:59:31 +0000 (UTC) (envelope-from estrabd@gmail.com) Received: from bc1.hpc.lsu.edu (localhost.hpc.lsu.edu [127.0.0.1]) by bc1.hpc.lsu.edu (8.14.1/8.13.8) with ESMTP id l9HGg4Vh083167; Wed, 17 Oct 2007 16:42:04 GMT (envelope-from estrabd@gmail.com) Received: (from estrabd@localhost) by bc1.hpc.lsu.edu (8.14.1/8.13.8/Submit) id l9HGg4hu083166; Wed, 17 Oct 2007 16:42:04 GMT (envelope-from estrabd@gmail.com) X-Authentication-Warning: bc1.hpc.lsu.edu: estrabd set sender to estrabd@gmail.com using -f Date: Wed, 17 Oct 2007 16:42:04 +0000 From: "B. Estrade" To: freebsd-smp Message-ID: <20071017164204.GG76582@bc1.hpc.lsu.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.3i mailed-by: estrabd@lsu.edu Subject: 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 16:59:31 -0000 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