From faf79fd26c438bfbf432be1ca000aeeb6060480e Mon Sep 17 00:00:00 2001 From: yeom Date: Thu, 18 Nov 2010 06:18:59 +0000 Subject: [PATCH] add flag "corepin" for core pinning --- Robust/src/Runtime/oooJava/trqueue.c | 12 ++++++++- Robust/src/Runtime/workschedule.c | 38 ++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Robust/src/Runtime/oooJava/trqueue.c b/Robust/src/Runtime/oooJava/trqueue.c index c3f1734a..864e4162 100644 --- a/Robust/src/Runtime/oooJava/trqueue.c +++ b/Robust/src/Runtime/oooJava/trqueue.c @@ -1,6 +1,8 @@ +#define _GNU_SOURCE #include "trqueue.h" #include "stdlib.h" #include "stdio.h" +#include #include "mlp_lock.h" #include #include "structdefs.h" @@ -63,8 +65,16 @@ void createTR() { ptr->head=0; ptr->tail=0; ptr->id=myid; +#if COREPIN + cpu_set_t cpuset; + CPU_ZERO(&cpuset); + CPU_SET(myid, &cpuset); + pthread_attr_setaffinity_np(&nattr, sizeof(cpuset), &cpuset); + printf("assign workerTR to core %d\n",myid); +#endif ptr->allHashStructures=createAndFillMasterHashStructureArray(); - int status=pthread_create( &thread, NULL, workerTR, (void *) ptr); + int status=pthread_create( &thread, &nattr, workerTR, (void *) ptr); + // int status=pthread_create( &thread, NULL, workerTR, (void *) ptr); if (status!=0) {printf("ERROR\n");exit(-1);} pthread_attr_destroy(&nattr); } diff --git a/Robust/src/Runtime/workschedule.c b/Robust/src/Runtime/workschedule.c index 94b3a17c..01e0124d 100644 --- a/Robust/src/Runtime/workschedule.c +++ b/Robust/src/Runtime/workschedule.c @@ -1,6 +1,9 @@ +#define _GNU_SOURCE #include #include #include +#include +#include #include "mem.h" #include "workschedule.h" @@ -18,6 +21,8 @@ #endif + + ////////////////////////////////////////////////// // // for coordination with the garbage collector @@ -317,6 +322,8 @@ void workScheduleInit( int numProcessors, #endif dqInit( &(deques[i]) ); } + +#ifndef COREPIN pthread_attr_init( &attr ); pthread_attr_setdetachstate( &attr, @@ -336,6 +343,37 @@ void workScheduleInit( int numProcessors, if( status != 0 ) { printf( "Error\n" ); exit( -1 ); } } +#else + int numCore=24; + cpu_set_t cpuset; + pthread_attr_t thread_attr[numWorkSchedWorkers]; + int idx; + + workerDataArray[0].id = 0; + CPU_ZERO(&cpuset); + CPU_SET(0, &cpuset); + sched_setaffinity(syscall(SYS_gettid), sizeof(cpuset), &cpuset); + + for(idx=1;idx