Changeset: 023155cdff25 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=023155cdff25
Modified Files:
        gdk/gdk_system.c
        gdk/gdk_system.h
        gdk/gdk_utils.c
Branch: default
Log Message:

Prepare for cpu affinity testing


diffs (66 lines):

diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -749,3 +749,30 @@ GDKms(void)
        return (int) (GDKusec() / 1000);
 }
 
+#if !defined(HAVE_PTHREAD_H) && defined(_MSC_VER)
+void MT_init_cpu_set(){}
+int MT_set_affinity(int pid){ return 0;}
+void MT_unset_affinity(int cpu){}
+#else
+
+static cpu_set_t *cpu_set_mask;
+static size_t cpu_set_size;
+
+void MT_init_cpu_set(void)
+{
+       int nrcpus = MT_check_nr_cores_();
+       cpu_set_mask = CPU_ALLOC(nrcpus);
+       cpu_set_size = CPU_ALLOC_SIZE(nrcpus);
+}
+
+int MT_set_affinity(int pid){
+       int cpu = pid % MT_check_nr_cores();
+       //printf("#set affinity %d to %d out of %d\n", pid, cpu, 
MT_check_nr_cores());
+       sched_setaffinity(cpu, cpu_set_size, cpu_set_mask);
+       return cpu;
+}
+void MT_unset_affinity(int cpu){
+       //printf("#unset affinity %d \n", cpu);
+       CPU_CLR(cpu,cpu_set_mask);
+}
+#endif
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -233,4 +233,17 @@ gdk_export int MT_check_nr_cores(void);
  */
 gdk_export lng GDKusec(void);
 gdk_export int GDKms(void);
+
+#if !defined(HAVE_PTHREAD_H) && defined(_MSC_VER)
+gdk_export void MT_init_cpu_set(void);
+gdk_export int MT_set_affinity(int pid);
+gdk_export void MT_unset_affinity(int cpu);
+#else
+#define _GNU_SOURCE_
+#include <sched.h>
+gdk_export void MT_init_cpu_set(void);
+gdk_export int MT_set_affinity(int pid);
+gdk_export void MT_unset_affinity(int cpu);
+#endif
+
 #endif /*_GDK_SYSTEM_H_*/
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1298,6 +1298,7 @@ GDKinit(opt *set, int setlen)
        GDK_mmap_minsize = MIN( 1<<30 , (GDK_mem_maxsize_max/6) / 
(GDKnr_threads ? GDKnr_threads : 1) );
        /*    per op:  2 args + 1 res, each with head & tail  =>  (2+1)*2 = 6  
^ */
 #endif
+       //MT_init_cpu_set();
 
        if (!GDKembedded &&
            ((p = mo_find_option(set, setlen, "gdk_vmtrim")) == NULL ||
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to