From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <4CC20803.3060003@domain.hid> Date: Fri, 22 Oct 2010 23:54:11 +0200 From: Gilles Chanteperdrix MIME-Version: 1.0 References: <4CC206AE.5010704@domain.hid> In-Reply-To: <4CC206AE.5010704@domain.hid> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Xenomai-help] SMP load List-Id: Help regarding installation and common use of Xenomai List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Simon Leonard Cc: xenomai@xenomai.org Simon Leonard wrote: > I sort of have a newbie problem regarding getting multiple threads > running on multiple cores (quad core). It did work on my previous system > (2.5-rc1) but I can't get it to work with 2.5.5.2 (or 2.5.5.1, 2.5.4). > Here's my small example: > > #include > void* thread( void* ){ > unsigned long long i=0; > while( 1 ) i++; > return NULL; > } > > int main(){ > > pthread_t tid1, tid2, tid3, tid4; > pthread_attr_t at1, at2, at3, at4; > > pthread_attr_init( &at1 ); > pthread_attr_init( &at2 ); > pthread_attr_init( &at3 ); > pthread_attr_init( &at4 ); > > pthread_create( &tid1, &at1, thread, NULL ); > pthread_create( &tid2, &at2, thread, NULL ); > pthread_create( &tid3, &at3, thread, NULL ); > pthread_create( &tid4, &at4, thread, NULL ); > > pthread_join( tid1, NULL ); > > return 0; > } > > If I compile with > g++ main.cpp -lpthread > and run I get 400% load (4 cores) > > If I compile with > g++ main.cpp `/usr/xenomai/bin/xeno-config --skin posix --cflags` > `/usr/xenomai/bin/xeno-config --skin posix --ldflags` > I only get 100% load (1 core) You need to use sched_setaffinity to set the cpu on which each thread should run. Xenomai does not do any load balancing because threads migrations introduce latencies. By the way, if you do that with this test program, your computer will be frozen unless you enable Xenomai watchdog. -- Gilles.