Lines Matching full:mask

24   class Mask : public KMPAffinity::Mask {
25 hwloc_cpuset_t mask;
28 Mask() {
29 mask = hwloc_bitmap_alloc();
32 ~Mask() { hwloc_bitmap_free(mask); }
33 void set(int i) override { hwloc_bitmap_set(mask, i); }
34 bool is_set(int i) const override { return hwloc_bitmap_isset(mask, i); }
35 void clear(int i) override { hwloc_bitmap_clr(mask, i); }
36 void zero() override { hwloc_bitmap_zero(mask); }
37 bool empty() const override { return hwloc_bitmap_iszero(mask); }
38 void copy(const KMPAffinity::Mask *src) override {
39 const Mask *convert = static_cast<const Mask *>(src);
40 hwloc_bitmap_copy(mask, convert->mask);
42 void bitwise_and(const KMPAffinity::Mask *rhs) override {
43 const Mask *convert = static_cast<const Mask *>(rhs);
44 hwloc_bitmap_and(mask, mask, convert->mask);
46 void bitwise_or(const KMPAffinity::Mask *rhs) override {
47 const Mask *convert = static_cast<const Mask *>(rhs);
48 hwloc_bitmap_or(mask, mask, convert->mask);
50 void bitwise_not() override { hwloc_bitmap_not(mask, mask); }
51 bool is_equal(const KMPAffinity::Mask *rhs) const override {
52 const Mask *convert = static_cast<const Mask *>(rhs);
53 return hwloc_bitmap_isequal(mask, convert->mask);
55 int begin() const override { return hwloc_bitmap_first(mask); }
58 return hwloc_bitmap_next(mask, previous);
64 hwloc_get_cpubind(__kmp_hwloc_topology, mask, HWLOC_CPUBIND_THREAD);
79 hwloc_set_cpubind(__kmp_hwloc_topology, mask, HWLOC_CPUBIND_THREAD);
99 retval = hwloc_set_cpubind(__kmp_hwloc_topology, mask,
119 unsigned long first_32_bits = hwloc_bitmap_to_ith_ulong(mask, i * 2);
121 hwloc_bitmap_to_ith_ulong(mask, i * 2 + 1);
169 KMPAffinity::Mask *mask;
170 KMP_CPU_ALLOC_ON_STACK(mask);
171 KMP_CPU_ZERO(mask);
172 KMP_CPU_SET(which, mask);
173 __kmp_set_system_affinity(mask, TRUE);
174 KMP_CPU_FREE_FROM_STACK(mask);
176 KMPAffinity::Mask *allocate_mask() override { return new Mask(); }
177 void deallocate_mask(KMPAffinity::Mask *m) override { delete m; }
178 KMPAffinity::Mask *allocate_mask_array(int num) override {
179 return new Mask[num];
181 void deallocate_mask_array(KMPAffinity::Mask *array) override {
182 Mask *hwloc_array = static_cast<Mask *>(array);
185 KMPAffinity::Mask *index_mask_array(KMPAffinity::Mask *array,
187 Mask *hwloc_array = static_cast<Mask *>(array);
329 class Mask : public KMPAffinity::Mask {
339 mask_t *mask;
340 Mask() { mask = (mask_t *)__kmp_allocate(__kmp_affin_mask_size); }
341 ~Mask() {
342 if (mask)
343 __kmp_free(mask);
346 mask[i / BITS_PER_MASK_T] |= (ONE << (i % BITS_PER_MASK_T));
349 return (mask[i / BITS_PER_MASK_T] & (ONE << (i % BITS_PER_MASK_T)));
352 mask[i / BITS_PER_MASK_T] &= ~(ONE << (i % BITS_PER_MASK_T));
357 mask[i] = (mask_t)0;
362 if (mask[i] != (mask_t)0)
366 void copy(const KMPAffinity::Mask *src) override {
367 const Mask *convert = static_cast<const Mask *>(src);
370 mask[i] = convert->mask[i];
372 void bitwise_and(const KMPAffinity::Mask *rhs) override {
373 const Mask *convert = static_cast<const Mask *>(rhs);
376 mask[i] &= convert->mask[i];
378 void bitwise_or(const KMPAffinity::Mask *rhs) override {
379 const Mask *convert = static_cast<const Mask *>(rhs);
382 mask[i] |= convert->mask[i];
387 mask[i] = ~(mask[i]);
389 bool is_equal(const KMPAffinity::Mask *rhs) const override {
390 const Mask *convert = static_cast<const Mask *>(rhs);
393 if (mask[i] != convert->mask[i])
416 // This routine is only used to get the full mask.
423 // Set the mask with all CPUs that are available.
438 // we can bind the thread to CPUs specified by the mask not others.
483 syscall(__NR_sched_getaffinity, 0, __kmp_affin_mask_size, mask);
486 reinterpret_cast<cpuset_t *>(mask));
504 syscall(__NR_sched_setaffinity, 0, __kmp_affin_mask_size, mask);
507 reinterpret_cast<cpuset_t *>(mask));
526 KMPAffinity::Mask *allocate_mask() override {
527 KMPNativeAffinity::Mask *retval = new Mask();
530 void deallocate_mask(KMPAffinity::Mask *m) override {
531 KMPNativeAffinity::Mask *native_mask =
532 static_cast<KMPNativeAffinity::Mask *>(m);
535 KMPAffinity::Mask *allocate_mask_array(int num) override {
536 return new Mask[num];
538 void deallocate_mask_array(KMPAffinity::Mask *array) override {
539 Mask *linux_array = static_cast<Mask *>(array);
542 KMPAffinity::Mask *index_mask_array(KMPAffinity::Mask *array,
544 Mask *linux_array = static_cast<Mask *>(array);
554 class Mask : public KMPAffinity::Mask {
557 mask_t *mask;
560 Mask() {
561 mask = (mask_t *)__kmp_allocate(sizeof(mask_t) * __kmp_num_proc_groups);
563 ~Mask() {
564 if (mask)
565 __kmp_free(mask);
568 mask[i / BITS_PER_MASK_T] |= ((mask_t)1 << (i % BITS_PER_MASK_T));
571 return (mask[i / BITS_PER_MASK_T] & ((mask_t)1 << (i % BITS_PER_MASK_T)));
574 mask[i / BITS_PER_MASK_T] &= ~((mask_t)1 << (i % BITS_PER_MASK_T));
578 mask[i] = 0;
582 if (mask[i])
586 void copy(const KMPAffinity::Mask *src) override {
587 const Mask *convert = static_cast<const Mask *>(src);
589 mask[i] = convert->mask[i];
591 void bitwise_and(const KMPAffinity::Mask *rhs) override {
592 const Mask *convert = static_cast<const Mask *>(rhs);
594 mask[i] &= convert->mask[i];
596 void bitwise_or(const KMPAffinity::Mask *rhs) override {
597 const Mask *convert = static_cast<const Mask *>(rhs);
599 mask[i] |= convert->mask[i];
603 mask[i] = ~(mask[i]);
605 bool is_equal(const KMPAffinity::Mask *rhs) const override {
606 const Mask *convert = static_cast<const Mask *>(rhs);
608 if (mask[i] != convert->mask[i])
627 if (!SetProcessAffinityMask(GetCurrentProcess(), *mask)) {
640 // Check for a valid mask.
652 ga.Mask = mask[group];
665 if (!SetThreadAffinityMask(GetCurrentThread(), *mask)) {
690 (ga.Mask == 0)) {
693 mask[ga.Group] = ga.Mask;
721 *mask = retval;
731 if (mask[i] == 0)
744 KMPAffinity::Mask *allocate_mask() override { return new Mask(); }
745 void deallocate_mask(KMPAffinity::Mask *m) override { delete m; }
746 KMPAffinity::Mask *allocate_mask_array(int num) override {
747 return new Mask[num];
749 void deallocate_mask_array(KMPAffinity::Mask *array) override {
750 Mask *windows_array = static_cast<Mask *>(array);
753 KMPAffinity::Mask *index_mask_array(KMPAffinity::Mask *array,
755 Mask *windows_array = static_cast<Mask *>(array);
984 bool restrict_to_mask(const kmp_affin_mask_t *mask);