Skip to content

Commit ffe9015

Browse files
committed
Add global store and const memory coverage
1 parent d4d6606 commit ffe9015

3 files changed

Lines changed: 415 additions & 1 deletion

File tree

‎ptx/README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,8 @@ that feature.
266266
| `DIV_DISABLE_SPECIAL_REGS` | Deterministic special-register reads such as `%laneid` and `%lanemask_*`. |
267267
| `DIV_DISABLE_PREDICATED_SPECIAL_REGS` | Predicated deterministic special-register reads. |
268268
| `DIV_DISABLE_GLOBAL_LOADS` | Bounded read-only `ld.global.{u8,s8,u16,s16,u32}` loads from the input buffer. |
269+
| `DIV_DISABLE_GLOBAL_STORE_ROUNDTRIPS` | Per-thread `st.global.{u8,u16,u32}` plus `ld.global.{u8,s8,u16,s16,u32}` roundtrips through the output buffer. |
270+
| `DIV_DISABLE_CONST_MEMORY` | Bounded read-only `ld.const.{u8,s8,u16,s16,u32}` loads from a module-scope constant buffer. |
269271
| `DIV_DISABLE_LOCAL_MEMORY` | Bounded private local-memory store/load roundtrips. |
270272
| `DIV_DISABLE_SHARED_MEMORY` | Race-free per-thread shared-memory store/load roundtrips. |
271273
| `DIV_DISABLE_F32_ARITH` | Sanitized `add/sub/mul/fma/min/max.f32` arithmetic. |

‎ptx/crates/fuzzx-diff/src/main.rs‎

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@
108108
//! predicated deterministic special-register reads
109109
//! DIV_DISABLE_GLOBAL_LOADS default: false; set 1/true/yes/on to suppress
110110
//! bounded read-only global loads from the input buffer
111+
//! DIV_DISABLE_GLOBAL_STORE_ROUNDTRIPS default: false; set 1/true/yes/on to suppress
112+
//! per-thread global-memory store/load roundtrips
113+
//! DIV_DISABLE_CONST_MEMORY default: false; set 1/true/yes/on to suppress
114+
//! bounded read-only constant-memory loads
111115
//! DIV_DISABLE_LOCAL_MEMORY default: false; set 1/true/yes/on to suppress
112116
//! local-memory store/load roundtrips
113117
//! DIV_DISABLE_SHARED_MEMORY default: false; set 1/true/yes/on to suppress
@@ -541,6 +545,10 @@ struct Args {
541545
#[arg(long)]
542546
disable_global_loads: bool,
543547
#[arg(long)]
548+
disable_global_store_roundtrips: bool,
549+
#[arg(long)]
550+
disable_const_memory: bool,
551+
#[arg(long)]
544552
disable_local_memory: bool,
545553
#[arg(long)]
546554
disable_shared_memory: bool,
@@ -921,6 +929,11 @@ impl Args {
921929
"DIV_DISABLE_PREDICATED_SPECIAL_REGS"
922930
);
923931
set_bool!(self.disable_global_loads, "DIV_DISABLE_GLOBAL_LOADS");
932+
set_bool!(
933+
self.disable_global_store_roundtrips,
934+
"DIV_DISABLE_GLOBAL_STORE_ROUNDTRIPS"
935+
);
936+
set_bool!(self.disable_const_memory, "DIV_DISABLE_CONST_MEMORY");
924937
set_bool!(self.disable_local_memory, "DIV_DISABLE_LOCAL_MEMORY");
925938
set_bool!(self.disable_shared_memory, "DIV_DISABLE_SHARED_MEMORY");
926939
set_bool!(self.disable_f32_arith, "DIV_DISABLE_F32_ARITH");
@@ -1305,6 +1318,9 @@ impl Config {
13051318
let disable_predicated_special_regs =
13061319
env_bool("DIV_DISABLE_PREDICATED_SPECIAL_REGS")?.unwrap_or(false);
13071320
let disable_global_loads = env_bool("DIV_DISABLE_GLOBAL_LOADS")?.unwrap_or(false);
1321+
let disable_global_store_roundtrips =
1322+
env_bool("DIV_DISABLE_GLOBAL_STORE_ROUNDTRIPS")?.unwrap_or(false);
1323+
let disable_const_memory = env_bool("DIV_DISABLE_CONST_MEMORY")?.unwrap_or(false);
13081324
let disable_local_memory = env_bool("DIV_DISABLE_LOCAL_MEMORY")?.unwrap_or(false);
13091325
let disable_shared_memory = env_bool("DIV_DISABLE_SHARED_MEMORY")?.unwrap_or(false);
13101326
let disable_f32_arith = env_bool("DIV_DISABLE_F32_ARITH")?.unwrap_or(false);
@@ -1527,6 +1543,10 @@ impl Config {
15271543
&& !disable_special_regs
15281544
&& !disable_predicated_unary,
15291545
emit_global_loads: !disable_global_loads,
1546+
emit_global_store_roundtrips: !disable_global_store_roundtrips
1547+
&& !disable_mul_wide
1548+
&& !disable_wide_int,
1549+
emit_const_memory: !disable_const_memory,
15301550
emit_local_memory: !disable_local_memory,
15311551
emit_shared_memory: !disable_shared_memory && !disable_mul_wide && !disable_wide_int,
15321552
emit_f32_arith: !disable_f32_arith && !disable_bitwise_binops,
@@ -1888,7 +1908,7 @@ fn main() -> Result<()> {
18881908

18891909
let total_workers = cfg.gpus.len() * cfg.workers_per_gpu;
18901910
eprintln!(
1891-
"fuzzx-diff: starting_seed=0x{:016x} out={} program_bytes={} max_iters={} control_flow={:?} blocks={}..{} insts_per_block={}..{} regs={} max_loop_iters={} max_immediate={} max_structured_depth={} emit_structured_loops={} emit_arbitrary_loops={} emit_lop3={} emit_predicated_lop3={} emit_minmax={} emit_selp={} emit_predicated_selp={} emit_sub={} emit_mul_lo={} emit_signed_lo_alu={} emit_sat_arith={} emit_packed_add={} emit_signed_packed_add={} emit_predicated_packed_add={} emit_packed_minmax={} emit_signed_packed_minmax={} emit_predicated_packed_minmax={} emit_scalar_16bit={} emit_signed_scalar_16bit={} emit_scalar_16bit_min={} emit_scalar_16bit_signed_unary={} emit_scalar_16bit_bitwise={} emit_scalar_16bit_shifts={} emit_scalar_16bit_compare={} emit_scalar_16bit_selp={} emit_predicated_scalar_16bit={} emit_mulhi={} emit_signed_mulhi={} emit_mad_hi={} emit_signed_mad_hi={} emit_bitwise_binops={} emit_or={} emit_xor={} emit_prmt={} emit_predicated_prmt={} emit_reg_prmt={} emit_predicated_reg_prmt={} emit_prmt_modes={} emit_not={} emit_clz={} emit_brev={} emit_cnot={} emit_popc={} emit_abs={} emit_special_regs={} emit_predicated_special_regs={} emit_global_loads={} emit_local_memory={} emit_shared_memory={} emit_f32_arith={} emit_f32_compare={} emit_f32_selp={} emit_signed_cmp={} emit_signed_divrem={} emit_reg_divrem={} emit_predicated_reg_divrem={} emit_predicated_divrem={} emit_funnel={} emit_reg_funnel={} emit_predicated_funnel={} emit_funnel_clamp={} emit_neg={} emit_shl={} emit_shr={} emit_signed_shr={} emit_reg_shifts={} emit_predicated_shifts={} emit_predicated_reg_shifts={} emit_bfind={} emit_signed_bfind={} emit_wide_bfind={} emit_signed_wide_bfind={} emit_predicated_bfind={} emit_predicated_wide_bfind={} emit_fns={} emit_reg_fns={} emit_predicated_fns={} emit_predicated_reg_fns={} emit_bfi={} emit_bfe={} emit_bmsk={} emit_bmsk_wrap={} emit_predicated_bitfield={} emit_reg_bitfield={} emit_predicated_reg_bitfield={} emit_wide_bfe={} emit_signed_wide_bfe={} emit_wide_bfi={} emit_predicated_wide_bitfield={} emit_reg_wide_bitfield={} emit_predicated_reg_wide_bitfield={} emit_mad24={} emit_mul24={} emit_predicated_24bit={} emit_subword_wide={} emit_signed_subword_wide={} emit_predicated_subword_wide={} emit_mul_wide={} emit_mad_wide={} emit_signed_mad_wide={} emit_predicated_mul_wide={} emit_predicated_mad_wide={} emit_wide_high_result={} emit_wide_int={} emit_wide_minmax={} emit_wide_mulhi={} emit_predicated_wide_int={} emit_wide_mad64={} emit_signed_wide_mad64={} emit_predicated_wide_mad64={} emit_wide_set={} emit_predicated_wide_set={} emit_wide_setp={} emit_wide_setp_bool={} emit_wide_selp={} emit_wide_unary={} emit_predicated_wide_unary={} emit_wide_shifts={} emit_wide_reg_shifts={} emit_predicated_wide_shifts={} emit_predicated_wide_reg_shifts={} emit_wide_divrem={} emit_signed_wide_divrem={} emit_reg_wide_divrem={} emit_predicated_reg_wide_divrem={} emit_predicated_wide_divrem={} emit_wide_addc={} emit_wide_subc={} emit_predicated_wide_carry={} emit_wide_carry_chain={} emit_predicated_wide_carry_chain={} emit_addc={} emit_subc={} emit_predicated_carry={} emit_carry_chain={} emit_predicated_carry_chain={} emit_i32_boundary_immediates={} emit_dp4a={} emit_dp2a={} emit_negated_predicates={} emit_predicated_alu={} emit_predicated_unary={} emit_cvt={} emit_predicated_cvt={} emit_narrow_cvt={} emit_signed_narrow_cvt={} emit_predicated_narrow_cvt={} emit_wide_cvt={} emit_signed_wide_cvt={} emit_predicated_wide_cvt={} emit_szext={} emit_signed_szext={} emit_predicated_szext={} emit_setp_bool={} emit_setp_dual={} emit_pred_logic={} emit_predicated_mad={} emit_predicated_mad_hi={} emit_mad_carry={} emit_signed_mad_carry={} emit_predicated_mad_carry={} emit_predicated_set={} emit_sad={} emit_slct={} emit_predicated_sad={} emit_predicated_slct={} emit_predicated_dp={} emit_predicated_video={} emit_set={} emit_s32_slct={} emit_video={} emit_vsub4={} gpus={:?} workers_per_gpu={} (total={})",
1911+
"fuzzx-diff: starting_seed=0x{:016x} out={} program_bytes={} max_iters={} control_flow={:?} blocks={}..{} insts_per_block={}..{} regs={} max_loop_iters={} max_immediate={} max_structured_depth={} emit_structured_loops={} emit_arbitrary_loops={} emit_lop3={} emit_predicated_lop3={} emit_minmax={} emit_selp={} emit_predicated_selp={} emit_sub={} emit_mul_lo={} emit_signed_lo_alu={} emit_sat_arith={} emit_packed_add={} emit_signed_packed_add={} emit_predicated_packed_add={} emit_packed_minmax={} emit_signed_packed_minmax={} emit_predicated_packed_minmax={} emit_scalar_16bit={} emit_signed_scalar_16bit={} emit_scalar_16bit_min={} emit_scalar_16bit_signed_unary={} emit_scalar_16bit_bitwise={} emit_scalar_16bit_shifts={} emit_scalar_16bit_compare={} emit_scalar_16bit_selp={} emit_predicated_scalar_16bit={} emit_mulhi={} emit_signed_mulhi={} emit_mad_hi={} emit_signed_mad_hi={} emit_bitwise_binops={} emit_or={} emit_xor={} emit_prmt={} emit_predicated_prmt={} emit_reg_prmt={} emit_predicated_reg_prmt={} emit_prmt_modes={} emit_not={} emit_clz={} emit_brev={} emit_cnot={} emit_popc={} emit_abs={} emit_special_regs={} emit_predicated_special_regs={} emit_global_loads={} emit_global_store_roundtrips={} emit_const_memory={} emit_local_memory={} emit_shared_memory={} emit_f32_arith={} emit_f32_compare={} emit_f32_selp={} emit_signed_cmp={} emit_signed_divrem={} emit_reg_divrem={} emit_predicated_reg_divrem={} emit_predicated_divrem={} emit_funnel={} emit_reg_funnel={} emit_predicated_funnel={} emit_funnel_clamp={} emit_neg={} emit_shl={} emit_shr={} emit_signed_shr={} emit_reg_shifts={} emit_predicated_shifts={} emit_predicated_reg_shifts={} emit_bfind={} emit_signed_bfind={} emit_wide_bfind={} emit_signed_wide_bfind={} emit_predicated_bfind={} emit_predicated_wide_bfind={} emit_fns={} emit_reg_fns={} emit_predicated_fns={} emit_predicated_reg_fns={} emit_bfi={} emit_bfe={} emit_bmsk={} emit_bmsk_wrap={} emit_predicated_bitfield={} emit_reg_bitfield={} emit_predicated_reg_bitfield={} emit_wide_bfe={} emit_signed_wide_bfe={} emit_wide_bfi={} emit_predicated_wide_bitfield={} emit_reg_wide_bitfield={} emit_predicated_reg_wide_bitfield={} emit_mad24={} emit_mul24={} emit_predicated_24bit={} emit_subword_wide={} emit_signed_subword_wide={} emit_predicated_subword_wide={} emit_mul_wide={} emit_mad_wide={} emit_signed_mad_wide={} emit_predicated_mul_wide={} emit_predicated_mad_wide={} emit_wide_high_result={} emit_wide_int={} emit_wide_minmax={} emit_wide_mulhi={} emit_predicated_wide_int={} emit_wide_mad64={} emit_signed_wide_mad64={} emit_predicated_wide_mad64={} emit_wide_set={} emit_predicated_wide_set={} emit_wide_setp={} emit_wide_setp_bool={} emit_wide_selp={} emit_wide_unary={} emit_predicated_wide_unary={} emit_wide_shifts={} emit_wide_reg_shifts={} emit_predicated_wide_shifts={} emit_predicated_wide_reg_shifts={} emit_wide_divrem={} emit_signed_wide_divrem={} emit_reg_wide_divrem={} emit_predicated_reg_wide_divrem={} emit_predicated_wide_divrem={} emit_wide_addc={} emit_wide_subc={} emit_predicated_wide_carry={} emit_wide_carry_chain={} emit_predicated_wide_carry_chain={} emit_addc={} emit_subc={} emit_predicated_carry={} emit_carry_chain={} emit_predicated_carry_chain={} emit_i32_boundary_immediates={} emit_dp4a={} emit_dp2a={} emit_negated_predicates={} emit_predicated_alu={} emit_predicated_unary={} emit_cvt={} emit_predicated_cvt={} emit_narrow_cvt={} emit_signed_narrow_cvt={} emit_predicated_narrow_cvt={} emit_wide_cvt={} emit_signed_wide_cvt={} emit_predicated_wide_cvt={} emit_szext={} emit_signed_szext={} emit_predicated_szext={} emit_setp_bool={} emit_setp_dual={} emit_pred_logic={} emit_predicated_mad={} emit_predicated_mad_hi={} emit_mad_carry={} emit_signed_mad_carry={} emit_predicated_mad_carry={} emit_predicated_set={} emit_sad={} emit_slct={} emit_predicated_sad={} emit_predicated_slct={} emit_predicated_dp={} emit_predicated_video={} emit_set={} emit_s32_slct={} emit_video={} emit_vsub4={} gpus={:?} workers_per_gpu={} (total={})",
18921912
cfg.starting_seed,
18931913
cfg.out_dir.display(),
18941914
cfg.program_bytes,
@@ -1951,6 +1971,8 @@ fn main() -> Result<()> {
19511971
cfg.gen_config.emit_special_regs,
19521972
cfg.gen_config.emit_predicated_special_regs,
19531973
cfg.gen_config.emit_global_loads,
1974+
cfg.gen_config.emit_global_store_roundtrips,
1975+
cfg.gen_config.emit_const_memory,
19541976
cfg.gen_config.emit_local_memory,
19551977
cfg.gen_config.emit_shared_memory,
19561978
cfg.gen_config.emit_f32_arith,

0 commit comments

Comments
 (0)