Skip to content

Commit c262ef4

Browse files
misccowmaxey
andauthored
Avoid GCC bug with dependent type template (#7857) (#7860)
In our new policy definitions we often define a DefaultPolicy that is dependent on some other template parameters. Older GCC, specifically gcc-11.2 cannot parse a type inheriting such a dependent type. Luckily we can easily work around this by introducing an alias. Fixes nvbug5935129 Co-authored-by: Wesley Maxey <71408887+wmaxey@users.noreply.github.com>
1 parent 1b8de5e commit c262ef4

File tree

6 files changed

+62
-15
lines changed

6 files changed

+62
-15
lines changed

cub/cub/device/dispatch/tuning/tuning_reduce_by_key.cuh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -858,8 +858,11 @@ struct policy_hub
858858
default_reduce_by_key_delay_constructor_t<AccumT, int>>;
859859
};
860860

861+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
862+
using DefaultPolicy500 = DefaultPolicy<LOAD_LDG>;
863+
861864
struct Policy500
862-
: DefaultPolicy<LOAD_LDG>
865+
: DefaultPolicy500
863866
, ChainedPolicy<500, Policy500, Policy500>
864867
{};
865868

@@ -882,8 +885,11 @@ struct policy_hub
882885
decltype(select_agent_policy<sm80_tuning<KeyT, AccumT, is_primitive_op<ReductionOpT>()>>(0));
883886
};
884887

888+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
889+
using DefaultPolicy860 = DefaultPolicy<LOAD_LDG>;
890+
885891
struct Policy860
886-
: DefaultPolicy<LOAD_LDG>
892+
: DefaultPolicy860
887893
, ChainedPolicy<860, Policy860, Policy800>
888894
{};
889895

cub/cub/device/dispatch/tuning/tuning_run_length_encode.cuh

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,11 @@ struct policy_hub
301301
default_reduce_by_key_delay_constructor_t<LengthT, int>>;
302302
};
303303

304+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
305+
using DefaultPolicy500 = DefaultPolicy<LOAD_LDG>;
306+
304307
struct Policy500
305-
: DefaultPolicy<LOAD_LDG>
308+
: DefaultPolicy500
306309
, ChainedPolicy<500, Policy500, Policy500>
307310
{};
308311

@@ -323,8 +326,11 @@ struct policy_hub
323326
using ReduceByKeyPolicyT = decltype(select_agent_policy<sm80_tuning<LengthT, KeyT>>(0));
324327
};
325328

329+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
330+
using DefaultPolicy860 = DefaultPolicy<LOAD_LDG>;
331+
326332
struct Policy860
327-
: DefaultPolicy<LOAD_LDG>
333+
: DefaultPolicy860
328334
, ChainedPolicy<860, Policy860, Policy800>
329335
{};
330336

@@ -587,8 +593,12 @@ struct policy_hub
587593
default_reduce_by_key_delay_constructor_t<DelayConstructorKey, int>>;
588594
};
589595

596+
// TODO(bgruber): I think we want `LengthT` instead of `int`
597+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
598+
using DefaultPolicy500 = DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG>;
599+
590600
struct Policy500
591-
: DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG> // TODO(bgruber): I think we want `LengthT` instead of `int`
601+
: DefaultPolicy500
592602
, ChainedPolicy<500, Policy500, Policy500>
593603
{};
594604

@@ -611,8 +621,12 @@ struct policy_hub
611621
using RleSweepPolicyT = decltype(select_agent_policy<sm80_tuning<LengthT, KeyT>>(0));
612622
};
613623

624+
// TODO(bgruber): I think we want `LengthT` instead of `int`
625+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
626+
using DefaultPolicy860 = DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG>;
627+
614628
struct Policy860
615-
: DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG> // TODO(bgruber): I think we want `LengthT` instead of `int`
629+
: DefaultPolicy860
616630
, ChainedPolicy<860, Policy860, Policy800>
617631
{};
618632

cub/cub/device/dispatch/tuning/tuning_scan_by_key.cuh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -923,8 +923,11 @@ struct policy_hub
923923
default_reduce_by_key_delay_constructor_t<DelayConstructurValueT, int>>;
924924
};
925925

926+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy520
927+
using DefaultPolicy520 = DefaultPolicy<LOAD_CA, AccumT>;
928+
926929
struct Policy520
927-
: DefaultPolicy<LOAD_CA, AccumT>
930+
: DefaultPolicy520
928931
, ChainedPolicy<520, Policy520, Policy500>
929932
{};
930933

@@ -948,8 +951,11 @@ struct policy_hub
948951
using ScanByKeyPolicyT = decltype(select_agent_policy<sm80_tuning<key_t, ValueT, is_primitive_op<ScanOpT>()>>(0));
949952
};
950953

954+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
955+
using DefaultPolicy860 = DefaultPolicy<LOAD_CA, AccumT>;
956+
951957
struct Policy860
952-
: DefaultPolicy<LOAD_CA, AccumT>
958+
: DefaultPolicy860
953959
, ChainedPolicy<860, Policy860, Policy800>
954960
{};
955961

cub/cub/device/dispatch/tuning/tuning_select_if.cuh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,8 +1487,11 @@ struct policy_hub
14871487
detail::fixed_delay_constructor_t<350, 450>>;
14881488
};
14891489

1490+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
1491+
using DefaultPolicy500 = DefaultPolicy<may_alias ? LOAD_CA : LOAD_LDG>;
1492+
14901493
struct Policy500
1491-
: DefaultPolicy<may_alias ? LOAD_CA : LOAD_LDG>
1494+
: DefaultPolicy500
14921495
, ChainedPolicy<500, Policy500, Policy500>
14931496
{};
14941497

@@ -1515,8 +1518,11 @@ struct policy_hub
15151518
classify_input_size<InputT>()>>(0));
15161519
};
15171520

1521+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
1522+
using DefaultPolicy860 = DefaultPolicy<may_alias ? LOAD_CA : LOAD_LDG>;
1523+
15181524
struct Policy860
1519-
: DefaultPolicy<may_alias ? LOAD_CA : LOAD_LDG>
1525+
: DefaultPolicy860
15201526
, ChainedPolicy<860, Policy860, Policy800>
15211527
{};
15221528

cub/cub/device/dispatch/tuning/tuning_three_way_partition.cuh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,11 @@ struct policy_hub
356356
DelayConstructor>;
357357
};
358358

359+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
360+
using DefaultPolicy500 = DefaultPolicy<fixed_delay_constructor_t<350, 450>>;
361+
359362
struct Policy500
360-
: DefaultPolicy<fixed_delay_constructor_t<350, 450>>
363+
: DefaultPolicy500
361364
, ChainedPolicy<500, Policy500, Policy500>
362365
{};
363366

@@ -380,8 +383,11 @@ struct policy_hub
380383
using ThreeWayPartitionPolicy = decltype(select_agent_policy<sm80_tuning<InputT, OffsetT>>(0));
381384
};
382385

386+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
387+
using DefaultPolicy860 = DefaultPolicy<fixed_delay_constructor_t<350, 450>>;
388+
383389
struct Policy860
384-
: DefaultPolicy<fixed_delay_constructor_t<350, 450>>
390+
: DefaultPolicy860
385391
, ChainedPolicy<860, Policy860, Policy800>
386392
{};
387393

cub/cub/device/dispatch/tuning/tuning_unique_by_key.cuh

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -797,8 +797,11 @@ struct policy_hub
797797
detail::default_delay_constructor_t<int>>;
798798
};
799799

800+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
801+
using DefaultPolicy500 = DefaultPolicy<9, 128>;
802+
800803
struct Policy500
801-
: DefaultPolicy<9, 128>
804+
: DefaultPolicy500
802805
, ChainedPolicy<500, Policy500, Policy500>
803806
{};
804807

@@ -814,8 +817,11 @@ struct policy_hub
814817
template <typename Tuning>
815818
static _CCCL_HOST_DEVICE auto select_agent_policy(long) -> typename DefaultPolicy<11, 64>::UniqueByKeyPolicyT;
816819

820+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy520
821+
using DefaultPolicy520 = DefaultPolicy<11, 64>;
822+
817823
struct Policy520
818-
: DefaultPolicy<11, 64>
824+
: DefaultPolicy520
819825
, ChainedPolicy<520, Policy520, Policy500>
820826
{};
821827

@@ -824,8 +830,11 @@ struct policy_hub
824830
using UniqueByKeyPolicyT = decltype(select_agent_policy<sm80_tuning<KeyT, ValueT>>(0));
825831
};
826832

833+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
834+
using DefaultPolicy860 = DefaultPolicy<11, 64>;
835+
827836
struct Policy860
828-
: DefaultPolicy<11, 64>
837+
: DefaultPolicy860
829838
, ChainedPolicy<860, Policy860, Policy800>
830839
{};
831840

0 commit comments

Comments
 (0)