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