Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00017 #ifndef HWLOC_GLIBC_SCHED_H
00018 #define HWLOC_GLIBC_SCHED_H
00019
00020 #include <hwloc.h>
00021 #include <hwloc/helper.h>
00022 #include <assert.h>
00023
00024 #if !defined _GNU_SOURCE || !defined _SCHED_H || !defined CPU_SETSIZE
00025 #error Please make sure to include sched.h before including glibc-sched.h, and define _GNU_SOURCE before any inclusion of sched.h
00026 #endif
00027
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033
00034 #ifdef HWLOC_HAVE_CPU_SET
00035
00036
00049 static inline int
00050 hwloc_cpuset_to_glibc_sched_affinity(hwloc_topology_t topology , hwloc_const_cpuset_t hwlocset,
00051 cpu_set_t *schedset, size_t schedsetsize)
00052 {
00053 #ifdef CPU_ZERO_S
00054 unsigned cpu;
00055 CPU_ZERO_S(schedsetsize, schedset);
00056 hwloc_bitmap_foreach_begin(cpu, hwlocset)
00057 CPU_SET_S(cpu, schedsetsize, schedset);
00058 hwloc_bitmap_foreach_end();
00059 #else
00060 unsigned cpu;
00061 CPU_ZERO(schedset);
00062 assert(schedsetsize == sizeof(cpu_set_t));
00063 hwloc_bitmap_foreach_begin(cpu, hwlocset)
00064 CPU_SET(cpu, schedset);
00065 hwloc_bitmap_foreach_end();
00066 #endif
00067 return 0;
00068 }
00069
00077 static inline int
00078 hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology , hwloc_cpuset_t hwlocset,
00079 const cpu_set_t *schedset, size_t schedsetsize)
00080 {
00081 #ifdef CPU_ZERO_S
00082 int cpu, count;
00083 #endif
00084 hwloc_bitmap_zero(hwlocset);
00085 #ifdef CPU_ZERO_S
00086 count = CPU_COUNT_S(schedsetsize, schedset);
00087 cpu = 0;
00088 while (count) {
00089 if (CPU_ISSET_S(cpu, schedsetsize, schedset)) {
00090 hwloc_bitmap_set(hwlocset, cpu);
00091 count--;
00092 }
00093 cpu++;
00094 }
00095 #else
00096
00097
00098
00099 int cpu;
00100 assert(schedsetsize == sizeof(cpu_set_t));
00101 for(cpu=0; cpu<CPU_SETSIZE; cpu++)
00102 if (CPU_ISSET(cpu, schedset))
00103 hwloc_bitmap_set(hwlocset, cpu);
00104 #endif
00105 return 0;
00106 }
00107
00111 #endif
00112
00113
00114 #ifdef __cplusplus
00115 }
00116 #endif
00117
00118
00119 #endif