Skip to content

Commit 1382605

Browse files
densamoilovvpirogov
authored andcommitted
common: make threading functions static
The threading file is included in gtests and benchdnn. When the functions are not static it can cause a crash in gtests and benchdnn on macOS with Intel 2021 compiler. Therefore making them static.
1 parent c3b1dcd commit 1382605

File tree

1 file changed

+47
-36
lines changed

1 file changed

+47
-36
lines changed

src/common/dnnl_thread.hpp

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ inline int adjust_num_threads(int nthr, dim_t work_amount) {
285285
#endif
286286
}
287287

288-
inline void parallel(int nthr, const std::function<void(int, int)> &f) {
288+
static inline void parallel(int nthr, const std::function<void(int, int)> &f) {
289289
nthr = adjust_num_threads(nthr, INT64_MAX);
290290
#if DNNL_CPU_THREADING_RUNTIME == DNNL_RUNTIME_SEQ
291291
for (int i = 0; i < nthr; ++i) {
@@ -367,15 +367,22 @@ inline void parallel(int nthr, const std::function<void(int, int)> &f) {
367367
#endif
368368
}
369369

370+
// XXX: IMPORTANT!!!
371+
// Keep the functions below static.
372+
//
373+
// The threading file is included in gtests and benchdnn. When
374+
// the functions are not static it can cause a crash in gtests and
375+
// benchdnn on macOS with Intel 2021 compiler.
376+
370377
/* for_nd section */
371-
inline void for_nd(const int ithr, const int nthr, dim_t D0,
378+
static inline void for_nd(const int ithr, const int nthr, dim_t D0,
372379
const std::function<void(dim_t)> &f) {
373380
dim_t start {0}, end {0};
374381
balance211(D0, nthr, ithr, start, end);
375382
for (dim_t d0 = start; d0 < end; ++d0)
376383
f(d0);
377384
}
378-
inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1,
385+
static inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1,
379386
const std::function<void(dim_t, dim_t)> &f) {
380387
const dim_t work_amount = D0 * D1;
381388
if (work_amount == 0) return;
@@ -389,8 +396,8 @@ inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1,
389396
utils::nd_iterator_step(d0, D0, d1, D1);
390397
}
391398
}
392-
inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
393-
const std::function<void(dim_t, dim_t, dim_t)> &f) {
399+
static inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1,
400+
dim_t D2, const std::function<void(dim_t, dim_t, dim_t)> &f) {
394401
const dim_t work_amount = D0 * D1 * D2;
395402
if (work_amount == 0) return;
396403
dim_t start {0}, end {0};
@@ -403,8 +410,9 @@ inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
403410
utils::nd_iterator_step(d0, D0, d1, D1, d2, D2);
404411
}
405412
}
406-
inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
407-
dim_t D3, const std::function<void(dim_t, dim_t, dim_t, dim_t)> &f) {
413+
static inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1,
414+
dim_t D2, dim_t D3,
415+
const std::function<void(dim_t, dim_t, dim_t, dim_t)> &f) {
408416
const dim_t work_amount = D0 * D1 * D2 * D3;
409417
if (work_amount == 0) return;
410418
dim_t start {0}, end {0};
@@ -417,8 +425,8 @@ inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
417425
utils::nd_iterator_step(d0, D0, d1, D1, d2, D2, d3, D3);
418426
}
419427
}
420-
inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
421-
dim_t D3, dim_t D4,
428+
static inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1,
429+
dim_t D2, dim_t D3, dim_t D4,
422430
const std::function<void(dim_t, dim_t, dim_t, dim_t, dim_t)> &f) {
423431
const dim_t work_amount = D0 * D1 * D2 * D3 * D4;
424432
if (work_amount == 0) return;
@@ -432,8 +440,8 @@ inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
432440
utils::nd_iterator_step(d0, D0, d1, D1, d2, D2, d3, D3, d4, D4);
433441
}
434442
}
435-
inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
436-
dim_t D3, dim_t D4, dim_t D5,
443+
static inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1,
444+
dim_t D2, dim_t D3, dim_t D4, dim_t D5,
437445
const std::function<void(dim_t, dim_t, dim_t, dim_t, dim_t, dim_t)>
438446
&f) {
439447
const dim_t work_amount = D0 * D1 * D2 * D3 * D4 * D5;
@@ -451,15 +459,15 @@ inline void for_nd(const int ithr, const int nthr, dim_t D0, dim_t D1, dim_t D2,
451459
}
452460

453461
/* for_nd_ext section */
454-
inline void for_nd_ext(const int ithr, const int nthr, dim_t D0,
462+
static inline void for_nd_ext(const int ithr, const int nthr, dim_t D0,
455463
const std::function<void(int, int, dim_t)> &f) {
456464
dim_t start {0}, end {0};
457465
balance211(D0, nthr, ithr, start, end);
458466
for (dim_t d0 = start; d0 < end; ++d0)
459467
f(ithr, nthr, d0);
460468
}
461-
inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
462-
const std::function<void(int, int, dim_t, dim_t)> &f) {
469+
static inline void for_nd_ext(const int ithr, const int nthr, dim_t D0,
470+
dim_t D1, const std::function<void(int, int, dim_t, dim_t)> &f) {
463471
const dim_t work_amount = D0 * D1;
464472
if (work_amount == 0) return;
465473
dim_t start {0}, end {0};
@@ -472,8 +480,9 @@ inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
472480
utils::nd_iterator_step(d0, D0, d1, D1);
473481
}
474482
}
475-
inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
476-
dim_t D2, const std::function<void(int, int, dim_t, dim_t, dim_t)> &f) {
483+
static inline void for_nd_ext(const int ithr, const int nthr, dim_t D0,
484+
dim_t D1, dim_t D2,
485+
const std::function<void(int, int, dim_t, dim_t, dim_t)> &f) {
477486
const dim_t work_amount = D0 * D1 * D2;
478487
if (work_amount == 0) return;
479488
dim_t start {0}, end {0};
@@ -486,8 +495,8 @@ inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
486495
utils::nd_iterator_step(d0, D0, d1, D1, d2, D2);
487496
}
488497
}
489-
inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
490-
dim_t D2, dim_t D3,
498+
static inline void for_nd_ext(const int ithr, const int nthr, dim_t D0,
499+
dim_t D1, dim_t D2, dim_t D3,
491500
const std::function<void(int, int, dim_t, dim_t, dim_t, dim_t)> &f) {
492501
const dim_t work_amount = D0 * D1 * D2 * D3;
493502
if (work_amount == 0) return;
@@ -501,8 +510,8 @@ inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
501510
utils::nd_iterator_step(d0, D0, d1, D1, d2, D2, d3, D3);
502511
}
503512
}
504-
inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
505-
dim_t D2, dim_t D3, dim_t D4,
513+
static inline void for_nd_ext(const int ithr, const int nthr, dim_t D0,
514+
dim_t D1, dim_t D2, dim_t D3, dim_t D4,
506515
const std::function<void(int, int, dim_t, dim_t, dim_t, dim_t, dim_t)>
507516
&f) {
508517
const dim_t work_amount = D0 * D1 * D2 * D3 * D4;
@@ -517,8 +526,8 @@ inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
517526
utils::nd_iterator_step(d0, D0, d1, D1, d2, D2, d3, D3, d4, D4);
518527
}
519528
}
520-
inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
521-
dim_t D2, dim_t D3, dim_t D4, dim_t D5,
529+
static inline void for_nd_ext(const int ithr, const int nthr, dim_t D0,
530+
dim_t D1, dim_t D2, dim_t D3, dim_t D4, dim_t D5,
522531
const std::function<void(
523532
int, int, dim_t, dim_t, dim_t, dim_t, dim_t, dim_t)> &f) {
524533
const dim_t work_amount = D0 * D1 * D2 * D3 * D4 * D5;
@@ -536,23 +545,23 @@ inline void for_nd_ext(const int ithr, const int nthr, dim_t D0, dim_t D1,
536545
}
537546

538547
/* parallel_nd_ext section */
539-
inline void parallel_nd_ext(
548+
static inline void parallel_nd_ext(
540549
int nthr, dim_t D0, const std::function<void(int, int, dim_t)> &f) {
541550
const dim_t work_amount = D0;
542551
nthr = adjust_num_threads(nthr, work_amount);
543552
if (nthr)
544553
parallel(nthr,
545554
[&](int ithr, int nthr) { for_nd_ext(ithr, nthr, D0, f); });
546555
}
547-
inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1,
556+
static inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1,
548557
const std::function<void(int, int, dim_t, dim_t)> &f) {
549558
const dim_t work_amount = D0 * D1;
550559
nthr = adjust_num_threads(nthr, work_amount);
551560
if (nthr)
552561
parallel(nthr,
553562
[&](int ithr, int nthr) { for_nd_ext(ithr, nthr, D0, D1, f); });
554563
}
555-
inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2,
564+
static inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2,
556565
const std::function<void(int, int, dim_t, dim_t, dim_t)> &f) {
557566
const dim_t work_amount = D0 * D1 * D2;
558567
nthr = adjust_num_threads(nthr, work_amount);
@@ -561,7 +570,8 @@ inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2,
561570
for_nd_ext(ithr, nthr, D0, D1, D2, f);
562571
});
563572
}
564-
inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2, dim_t D3,
573+
static inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2,
574+
dim_t D3,
565575
const std::function<void(int, int, dim_t, dim_t, dim_t, dim_t)> &f) {
566576
const dim_t work_amount = D0 * D1 * D2 * D3;
567577
nthr = adjust_num_threads(nthr, work_amount);
@@ -570,8 +580,8 @@ inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2, dim_t D3,
570580
for_nd_ext(ithr, nthr, D0, D1, D2, D3, f);
571581
});
572582
}
573-
inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2, dim_t D3,
574-
dim_t D4,
583+
static inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2,
584+
dim_t D3, dim_t D4,
575585
const std::function<void(int, int, dim_t, dim_t, dim_t, dim_t, dim_t)>
576586
&f) {
577587
const dim_t work_amount = D0 * D1 * D2 * D3 * D4;
@@ -581,8 +591,8 @@ inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2, dim_t D3,
581591
for_nd_ext(ithr, nthr, D0, D1, D2, D3, D4, f);
582592
});
583593
}
584-
inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2, dim_t D3,
585-
dim_t D4, dim_t D5,
594+
static inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2,
595+
dim_t D3, dim_t D4, dim_t D5,
586596
const std::function<void(
587597
int, int, dim_t, dim_t, dim_t, dim_t, dim_t, dim_t)> &f) {
588598
const dim_t work_amount = D0 * D1 * D2 * D3 * D4 * D5;
@@ -594,28 +604,28 @@ inline void parallel_nd_ext(int nthr, dim_t D0, dim_t D1, dim_t D2, dim_t D3,
594604
}
595605

596606
/* parallel_nd section */
597-
inline void parallel_nd(dim_t D0, const std::function<void(dim_t)> &f) {
607+
static inline void parallel_nd(dim_t D0, const std::function<void(dim_t)> &f) {
598608
int nthr = adjust_num_threads(dnnl_get_current_num_threads(), D0);
599609
if (nthr)
600610
parallel(nthr, [&](int ithr, int nthr) { for_nd(ithr, nthr, D0, f); });
601611
}
602-
inline void parallel_nd(
612+
static inline void parallel_nd(
603613
dim_t D0, dim_t D1, const std::function<void(dim_t, dim_t)> &f) {
604614
const dim_t work_amount = D0 * D1;
605615
int nthr = adjust_num_threads(dnnl_get_current_num_threads(), work_amount);
606616
if (nthr)
607617
parallel(nthr,
608618
[&](int ithr, int nthr) { for_nd(ithr, nthr, D0, D1, f); });
609619
}
610-
inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2,
620+
static inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2,
611621
const std::function<void(dim_t, dim_t, dim_t)> &f) {
612622
const dim_t work_amount = D0 * D1 * D2;
613623
int nthr = adjust_num_threads(dnnl_get_current_num_threads(), work_amount);
614624
if (nthr)
615625
parallel(nthr,
616626
[&](int ithr, int nthr) { for_nd(ithr, nthr, D0, D1, D2, f); });
617627
}
618-
inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3,
628+
static inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3,
619629
const std::function<void(dim_t, dim_t, dim_t, dim_t)> &f) {
620630
const dim_t work_amount = D0 * D1 * D2 * D3;
621631
int nthr = adjust_num_threads(dnnl_get_current_num_threads(), work_amount);
@@ -624,7 +634,7 @@ inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3,
624634
for_nd(ithr, nthr, D0, D1, D2, D3, f);
625635
});
626636
}
627-
inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3, dim_t D4,
637+
static inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3, dim_t D4,
628638
const std::function<void(dim_t, dim_t, dim_t, dim_t, dim_t)> &f) {
629639
const dim_t work_amount = D0 * D1 * D2 * D3 * D4;
630640
int nthr = adjust_num_threads(dnnl_get_current_num_threads(), work_amount);
@@ -633,7 +643,7 @@ inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3, dim_t D4,
633643
for_nd(ithr, nthr, D0, D1, D2, D3, D4, f);
634644
});
635645
}
636-
inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3, dim_t D4,
646+
static inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3, dim_t D4,
637647
dim_t D5,
638648
const std::function<void(dim_t, dim_t, dim_t, dim_t, dim_t, dim_t)>
639649
&f) {
@@ -644,6 +654,7 @@ inline void parallel_nd(dim_t D0, dim_t D1, dim_t D2, dim_t D3, dim_t D4,
644654
for_nd(ithr, nthr, D0, D1, D2, D3, D4, D5, f);
645655
});
646656
}
657+
647658
/* parallel_nd_in_omp section */
648659

649660
template <typename... Args>

0 commit comments

Comments
 (0)