Skip to content

Commit ecb1623

Browse files
authored
Avoid GCC bug with dependent type template (#7857)
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
1 parent f6e66ad commit ecb1623

File tree

7 files changed

+62
-15
lines changed

7 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
@@ -882,8 +882,11 @@ struct policy_hub
882882
default_reduce_by_key_delay_constructor_t<AccumT, int>>;
883883
};
884884

885+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
886+
using DefaultPolicy500 = DefaultPolicy<LOAD_LDG>;
887+
885888
struct Policy500
886-
: DefaultPolicy<LOAD_LDG>
889+
: DefaultPolicy500
887890
, ChainedPolicy<500, Policy500, Policy500>
888891
{};
889892

@@ -906,8 +909,11 @@ struct policy_hub
906909
decltype(select_agent_policy<sm80_tuning<KeyT, AccumT, is_primitive_op<ReductionOpT>()>>(0));
907910
};
908911

912+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
913+
using DefaultPolicy860 = DefaultPolicy<LOAD_LDG>;
914+
909915
struct Policy860
910-
: DefaultPolicy<LOAD_LDG>
916+
: DefaultPolicy860
911917
, ChainedPolicy<860, Policy860, Policy800>
912918
{};
913919

cub/cub/device/dispatch/tuning/tuning_rle_encode.cuh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,11 @@ struct policy_hub
255255
default_reduce_by_key_delay_constructor_t<LengthT, int>>;
256256
};
257257

258+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
259+
using DefaultPolicy500 = DefaultPolicy<LOAD_LDG>;
260+
258261
struct Policy500
259-
: DefaultPolicy<LOAD_LDG>
262+
: DefaultPolicy500
260263
, ChainedPolicy<500, Policy500, Policy500>
261264
{};
262265

@@ -277,8 +280,11 @@ struct policy_hub
277280
using ReduceByKeyPolicyT = decltype(select_agent_policy<sm80_tuning<LengthT, KeyT>>(0));
278281
};
279282

283+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
284+
using DefaultPolicy860 = DefaultPolicy<LOAD_LDG>;
285+
280286
struct Policy860
281-
: DefaultPolicy<LOAD_LDG>
287+
: DefaultPolicy860
282288
, ChainedPolicy<860, Policy860, Policy800>
283289
{};
284290

cub/cub/device/dispatch/tuning/tuning_rle_non_trivial_runs.cuh

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,12 @@ struct policy_hub
269269
default_reduce_by_key_delay_constructor_t<DelayConstructorKey, int>>;
270270
};
271271

272+
// TODO(bgruber): I think we want `LengthT` instead of `int`
273+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy500
274+
using DefaultPolicy500 = DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG>;
275+
272276
struct Policy500
273-
: DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG> // TODO(bgruber): I think we want `LengthT` instead of `int`
277+
: DefaultPolicy500
274278
, ChainedPolicy<500, Policy500, Policy500>
275279
{};
276280

@@ -293,8 +297,12 @@ struct policy_hub
293297
using RleSweepPolicyT = decltype(select_agent_policy<sm80_tuning<LengthT, KeyT>>(0));
294298
};
295299

300+
// TODO(bgruber): I think we want `LengthT` instead of `int`
301+
// nvbug5935129: GCC-11.2 cannot directly use DefaultPolicy inside Policy860
302+
using DefaultPolicy860 = DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG>;
303+
296304
struct Policy860
297-
: DefaultPolicy<BLOCK_LOAD_DIRECT, int, LOAD_LDG> // TODO(bgruber): I think we want `LengthT` instead of `int`
305+
: DefaultPolicy860
298306
, ChainedPolicy<860, Policy860, Policy800>
299307
{};
300308

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)