carm-roofline 1.0.1.dev0__tar.gz → 1.0.1.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/PKG-INFO +1 -1
  2. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/carm_roofline.egg-info/PKG-INFO +1 -1
  3. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/backends.py +2 -0
  4. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/metrics.py +33 -9
  5. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/pyproject.toml +1 -1
  6. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/LICENSE +0 -0
  7. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/README.md +0 -0
  8. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/__init__.py +0 -0
  9. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/architecture.py +0 -0
  10. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/arm.py +0 -0
  11. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/config.py +0 -0
  12. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/detect.py +0 -0
  13. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/frequency.py +0 -0
  14. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/memory.py +0 -0
  15. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/riscv.py +0 -0
  16. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/arm/features.c +0 -0
  17. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/arm/frequency.h +0 -0
  18. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/arm/vlen.c +0 -0
  19. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/frequency.c +0 -0
  20. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/riscv/frequency.h +0 -0
  21. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/riscv/rvv_version.c +0 -0
  22. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/riscv/vlen.c +0 -0
  23. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/x86/cache.c +0 -0
  24. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/x86/features.c +0 -0
  25. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/x86/frequency.h +0 -0
  26. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/tests/x86/x86_avx512/frequency.h +0 -0
  27. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/architecture/x86.py +0 -0
  28. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/arguments.py +0 -0
  29. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/__init__.py +0 -0
  30. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/benchmark.py +0 -0
  31. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/benchmarking.py +0 -0
  32. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/__init__.py +0 -0
  33. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/arm.py +0 -0
  34. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/code_gen/__init__.py +0 -0
  35. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/code_gen/data_type.py +0 -0
  36. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/code_gen/instruction.py +0 -0
  37. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/code_gen/operation.py +0 -0
  38. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/code_gen/register.py +0 -0
  39. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/isa.py +0 -0
  40. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/parameters.py +0 -0
  41. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/riscv.py +0 -0
  42. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/generation/x86.py +0 -0
  43. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/interface.py +0 -0
  44. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/__init__.py +0 -0
  45. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/arithmetic.py +0 -0
  46. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/base.py +0 -0
  47. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/common.py +0 -0
  48. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/memory.py +0 -0
  49. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/memory_sweep.py +0 -0
  50. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/mixed.py +0 -0
  51. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/output/roofline.py +0 -0
  52. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/result.py +0 -0
  53. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/suites/__init__.py +0 -0
  54. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/suites/arithmetic.py +0 -0
  55. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/suites/base.py +0 -0
  56. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/suites/memory.py +0 -0
  57. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/suites/memory_sweep.py +0 -0
  58. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/suites/mixed.py +0 -0
  59. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/benchmark/suites/roofline.py +0 -0
  60. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/carm.py +0 -0
  61. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/carm_roofline.egg-info/SOURCES.txt +0 -0
  62. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/carm_roofline.egg-info/dependency_links.txt +0 -0
  63. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/carm_roofline.egg-info/entry_points.txt +0 -0
  64. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/carm_roofline.egg-info/requires.txt +0 -0
  65. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/carm_roofline.egg-info/top_level.txt +0 -0
  66. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/context.py +0 -0
  67. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/error.py +0 -0
  68. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/exec_interface.py +0 -0
  69. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/__init__.py +0 -0
  70. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/assets/CARM_icon.svg +0 -0
  71. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/assets/CHAMP_logo.svg +0 -0
  72. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/assets/menu_icon.png +0 -0
  73. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/assets/style.css +0 -0
  74. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/config.py +0 -0
  75. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/dashboard.py +0 -0
  76. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/gui/gui_utils.py +0 -0
  77. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/output_utils.py +0 -0
  78. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/__init__.py +0 -0
  79. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/aggregation.py +0 -0
  80. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/config.py +0 -0
  81. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/loaders.py +0 -0
  82. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/model.py +0 -0
  83. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/profiling/output.py +0 -0
  84. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/results_paths.py +0 -0
  85. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/run_config.py +0 -0
  86. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/setup.cfg +0 -0
  87. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test/test_isa_codegen_integration.py +0 -0
  88. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test/test_memory_suite_generation.py +0 -0
  89. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test/test_output_module.py +0 -0
  90. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test/test_typed_benchmarks.py +0 -0
  91. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test_bench/__init__.py +0 -0
  92. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test_bench/builder.py +0 -0
  93. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test_bench/test_bench.c +0 -0
  94. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test_bench/test_bench.h +0 -0
  95. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/test_bench/wrapper.inl +0 -0
  96. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/units.py +0 -0
  97. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/utils.py +0 -0
  98. {carm_roofline-1.0.1.dev0 → carm_roofline-1.0.1.dev1}/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carm-roofline
3
- Version: 1.0.1.dev0
3
+ Version: 1.0.1.dev1
4
4
  Summary: CARM: Cache-Aware Roofline Model benchmarking and visualization toolkit
5
5
  Author: CHaMP Team
6
6
  License: GNU LESSER GENERAL PUBLIC LICENSE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carm-roofline
3
- Version: 1.0.1.dev0
3
+ Version: 1.0.1.dev1
4
4
  Summary: CARM: Cache-Aware Roofline Model benchmarking and visualization toolkit
5
5
  Author: CHaMP Team
6
6
  License: GNU LESSER GENERAL PUBLIC LICENSE
@@ -126,6 +126,8 @@ class PAPIHLBackend(ProfilerBackend):
126
126
  detail(f"Available PAPI events: {len(self._available_events)}")
127
127
  for metric_type, impl in self._resolved_metrics.items():
128
128
  detail(f" {metric_type.name} -> {impl.description}")
129
+ if impl.warning is not None:
130
+ detail(f" Note: {impl.warning}")
129
131
 
130
132
  return any(impl.priority < 100 for impl in self._resolved_metrics.values())
131
133
 
@@ -106,6 +106,7 @@ class MetricDefinition:
106
106
  priority: int = 0
107
107
  priority_modifier: Callable[[MetricResolutionConfig], int] = lambda _: 0
108
108
  description: str = ""
109
+ warning: str | None = None
109
110
 
110
111
 
111
112
  # ---------------------------------------------------------------------------
@@ -168,30 +169,36 @@ def _build_metric_definitions() -> dict[MetricType, list[MetricDefinition]]:
168
169
  """Return +15 when config.data_type matches *dt*, -15 otherwise."""
169
170
  return lambda cfg: 15 if cfg.data_type is dt else -15
170
171
 
172
+ def _make_fmadd_warning(papi_event: str) -> str:
173
+ return f"{papi_event} may count multiply-add instructions as 1 or 2 ops depending on the platform"
174
+
171
175
  return {
172
176
  MetricType.FLOPS: [
177
+ MetricDefinition(
178
+ type=MetricType.FLOPS,
179
+ required_events=frozenset({"PAPI_FP_OPS"}),
180
+ compute=lambda e, ctx: e["PAPI_FP_OPS"],
181
+ priority=100,
182
+ description="Exact value from PAPI_FP_OPS (both precisions)",
183
+ warning=_make_fmadd_warning("PAPI_FP_OPS"),
184
+ ),
173
185
  MetricDefinition(
174
186
  type=MetricType.FLOPS,
175
187
  required_events=frozenset({"PAPI_DP_OPS"}),
176
188
  compute=lambda e, ctx: e["PAPI_DP_OPS"],
177
- priority=100,
189
+ priority=90,
178
190
  priority_modifier=_data_type_match(DataType.f64),
179
191
  description="Exact value from PAPI_DP_OPS",
192
+ warning=_make_fmadd_warning("PAPI_DP_OPS"),
180
193
  ),
181
194
  MetricDefinition(
182
195
  type=MetricType.FLOPS,
183
196
  required_events=frozenset({"PAPI_SP_OPS"}),
184
197
  compute=lambda e, ctx: e["PAPI_SP_OPS"],
185
- priority=100,
198
+ priority=90,
186
199
  priority_modifier=_data_type_match(DataType.f32),
187
200
  description="Exact value from PAPI_SP_OPS",
188
- ),
189
- MetricDefinition(
190
- type=MetricType.FLOPS,
191
- required_events=frozenset({"PAPI_FP_OPS"}),
192
- compute=lambda e, ctx: e["PAPI_FP_OPS"],
193
- priority=50,
194
- description="Approximated from PAPI_FP_OPS (has all precisions)",
201
+ warning=_make_fmadd_warning("PAPI_SP_OPS"),
195
202
  ),
196
203
  MetricDefinition(
197
204
  type=MetricType.FLOPS,
@@ -199,6 +206,7 @@ def _build_metric_definitions() -> dict[MetricType, list[MetricDefinition]]:
199
206
  compute=lambda e, ctx: e["PAPI_FP_INS"] * ctx.ops_per_instruction,
200
207
  priority=10,
201
208
  description="Approximated from PAPI_FP_INS (FP instr count)",
209
+ warning="PAPI_FP_INS counts fused multiply-add instructions as 1 operation",
202
210
  ),
203
211
  ],
204
212
  MetricType.BYTES: [
@@ -235,12 +243,28 @@ def _build_metric_definitions() -> dict[MetricType, list[MetricDefinition]]:
235
243
  priority=85,
236
244
  description="Approximated from PAPI_LD_INS + PAPI_SR_INS and bytes per instruction",
237
245
  ),
246
+ # Relevant for Zen3 (no PAPI loads/store events, only DCA, native forwarding event for higher accuracy)
247
+ MetricDefinition(
248
+ type=MetricType.BYTES,
249
+ required_events=frozenset({"PAPI_L1_DCA", "STORE_TO_LOAD_FORWARD"}),
250
+ compute=lambda e, ctx: (e["PAPI_L1_DCA"] + e["STORE_TO_LOAD_FORWARD"]) * ctx.bytes_per_instruction,
251
+ priority=40,
252
+ description="Approximated from PAPI_L1_DCA + STORE_TO_LOAD_FORWARD and bytes per instruction",
253
+ warning=(
254
+ "PAPI_L1_DCA counts cache accesses: if the microarchitecture coalesces requests into fewer cache "
255
+ "accesses, this metric may underestimate the number of bytes."
256
+ ),
257
+ ),
238
258
  MetricDefinition(
239
259
  type=MetricType.BYTES,
240
260
  required_events=frozenset({"PAPI_L1_DCA"}),
241
261
  compute=lambda e, ctx: e["PAPI_L1_DCA"] * ctx.bytes_per_instruction,
242
262
  priority=30,
243
263
  description="Approximated from PAPI_L1_DCA and bytes per instruction",
264
+ warning=(
265
+ "PAPI_L1_DCA counts cache accesses: if the microarchitecture coalesces requests into fewer cache "
266
+ "accesses or forwards stores to loads, this metric may underestimate the number of bytes."
267
+ ),
244
268
  ),
245
269
  ],
246
270
  }
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "carm-roofline"
3
- version = "1.0.1.dev0"
3
+ version = "1.0.1.dev1"
4
4
  description = "CARM: Cache-Aware Roofline Model benchmarking and visualization toolkit"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"