carm-roofline 1.0.0.dev4__tar.gz → 1.0.0.dev5__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 (90) hide show
  1. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/PKG-INFO +3 -3
  2. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/README.md +2 -2
  3. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/architecture.py +35 -9
  4. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/PKG-INFO +3 -3
  5. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/SOURCES.txt +4 -0
  6. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/pyproject.toml +4 -4
  7. carm_roofline-1.0.0.dev5/test/test_isa_codegen_integration.py +958 -0
  8. carm_roofline-1.0.0.dev5/test/test_memory_suite_generation.py +177 -0
  9. carm_roofline-1.0.0.dev5/test/test_output_module.py +924 -0
  10. carm_roofline-1.0.0.dev5/test/test_typed_benchmarks.py +818 -0
  11. carm_roofline-1.0.0.dev5/utils.py +177 -0
  12. carm_roofline-1.0.0.dev4/utils.py +0 -314
  13. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/LICENSE +0 -0
  14. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/__init__.py +0 -0
  15. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/arm.py +0 -0
  16. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/config.py +0 -0
  17. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/detect.py +0 -0
  18. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/frequency.py +0 -0
  19. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/memory.py +0 -0
  20. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/riscv.py +0 -0
  21. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/arm/features.c +0 -0
  22. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/arm/frequency.h +0 -0
  23. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/arm/vlen.c +0 -0
  24. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/frequency.c +0 -0
  25. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/riscv/frequency.h +0 -0
  26. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/riscv/rvv_version.c +0 -0
  27. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/riscv/vlen.c +0 -0
  28. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/cache.c +0 -0
  29. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/features.c +0 -0
  30. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/frequency.h +0 -0
  31. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/x86_avx512/frequency.h +0 -0
  32. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/x86.py +0 -0
  33. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/arguments.py +0 -0
  34. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/__init__.py +0 -0
  35. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/benchmark.py +0 -0
  36. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/benchmarking.py +0 -0
  37. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/__init__.py +0 -0
  38. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/arm.py +0 -0
  39. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/__init__.py +0 -0
  40. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/data_type.py +0 -0
  41. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/instruction.py +0 -0
  42. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/operation.py +0 -0
  43. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/register.py +0 -0
  44. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/isa.py +0 -0
  45. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/parameters.py +0 -0
  46. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/riscv.py +0 -0
  47. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/x86.py +0 -0
  48. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/interface.py +0 -0
  49. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/__init__.py +0 -0
  50. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/arithmetic.py +0 -0
  51. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/base.py +0 -0
  52. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/common.py +0 -0
  53. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/memory.py +0 -0
  54. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/memory_sweep.py +0 -0
  55. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/mixed.py +0 -0
  56. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/roofline.py +0 -0
  57. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/result.py +0 -0
  58. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/__init__.py +0 -0
  59. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/arithmetic.py +0 -0
  60. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/base.py +0 -0
  61. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/memory.py +0 -0
  62. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/memory_sweep.py +0 -0
  63. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/mixed.py +0 -0
  64. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/roofline.py +0 -0
  65. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm.py +0 -0
  66. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/dependency_links.txt +0 -0
  67. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/entry_points.txt +0 -0
  68. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/requires.txt +0 -0
  69. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/top_level.txt +0 -0
  70. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/context.py +0 -0
  71. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/error.py +0 -0
  72. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/exec_interface.py +0 -0
  73. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/__init__.py +0 -0
  74. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/CARM_icon.svg +0 -0
  75. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/CHAMP_logo.svg +0 -0
  76. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/menu_icon.png +0 -0
  77. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/style.css +0 -0
  78. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/config.py +0 -0
  79. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/dashboard.py +0 -0
  80. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/gui_utils.py +0 -0
  81. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/output_utils.py +0 -0
  82. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/results_paths.py +0 -0
  83. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/run_config.py +0 -0
  84. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/setup.cfg +0 -0
  85. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/__init__.py +0 -0
  86. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/builder.py +0 -0
  87. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/test_bench.c +0 -0
  88. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/test_bench.h +0 -0
  89. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/wrapper.inl +0 -0
  90. {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/units.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carm-roofline
3
- Version: 1.0.0.dev4
3
+ Version: 1.0.0.dev5
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
@@ -622,7 +622,7 @@ Other usage examples:
622
622
  # Short roofline benchmark (1 second per micro-bench)
623
623
  carm benchmark --test roofline --test-time 1
624
624
  # Arithmetic-only
625
- carm benchmark --test arithmetic --instruction add --data-type f32
625
+ carm benchmark --test arithmetic --instruction add mul fma --data-type f32
626
626
  # Memory-only
627
627
  carm benchmark --test memory --mem-target L2 --ld-st-ratio 2:1
628
628
  # Dry run (generate benchmark code, skip compile/execute):
@@ -631,7 +631,7 @@ carm benchmark --dry-run --test arithmetic --test-time 1 --verbose 4
631
631
 
632
632
  ## Output and Results
633
633
 
634
- By default, results are written under the platform user data directory for the `carm` app (via platformdirs). On linux, this is typically `~/.local/share/carm/`, on Windows, `%APPDATA%\carm\`, and on MacOS, `~/Library/Application Support/carm/`.
634
+ By default, results are written to the user data directory (via platformdirs). On linux, this is typically `~/.local/share/carm/`, on Windows, `%APPDATA%\carm\`, and on MacOS, `~/Library/Application Support/carm/`.
635
635
 
636
636
  Control output directory and format(s):
637
637
 
@@ -75,7 +75,7 @@ Other usage examples:
75
75
  # Short roofline benchmark (1 second per micro-bench)
76
76
  carm benchmark --test roofline --test-time 1
77
77
  # Arithmetic-only
78
- carm benchmark --test arithmetic --instruction add --data-type f32
78
+ carm benchmark --test arithmetic --instruction add mul fma --data-type f32
79
79
  # Memory-only
80
80
  carm benchmark --test memory --mem-target L2 --ld-st-ratio 2:1
81
81
  # Dry run (generate benchmark code, skip compile/execute):
@@ -84,7 +84,7 @@ carm benchmark --dry-run --test arithmetic --test-time 1 --verbose 4
84
84
 
85
85
  ## Output and Results
86
86
 
87
- By default, results are written under the platform user data directory for the `carm` app (via platformdirs). On linux, this is typically `~/.local/share/carm/`, on Windows, `%APPDATA%\carm\`, and on MacOS, `~/Library/Application Support/carm/`.
87
+ By default, results are written to the user data directory (via platformdirs). On linux, this is typically `~/.local/share/carm/`, on Windows, `%APPDATA%\carm\`, and on MacOS, `~/Library/Application Support/carm/`.
88
88
 
89
89
  Control output directory and format(s):
90
90
 
@@ -103,6 +103,36 @@ class ISAFrequencies:
103
103
  base_frequency = Frequency(base_frequency)
104
104
  return ISAFrequencies({isa.name: base_frequency for isa in isas})
105
105
 
106
+ @staticmethod
107
+ def from_detected(detected: DetectedArchitecture, isa_list: list[type[BaseISA]]) -> ISAFrequencies:
108
+ """Create ISAFrequencies from auto-detected architecture data.
109
+
110
+ Initializes all ISAs to the base frequency, then overrides with any per-ISA
111
+ specific frequencies that were detected.
112
+
113
+ Args:
114
+ detected: DetectedArchitecture object from probing
115
+ isa_list: List of ISA classes for this architecture
116
+
117
+ Returns:
118
+ ISAFrequencies with appropriate frequencies from detected data
119
+
120
+ Raises:
121
+ ValueError: If no frequency information is available
122
+ """
123
+ base_freq = detected.frequency
124
+ if not base_freq:
125
+ raise ValueError("Frequency could not be auto-detected, specify it using --frequency <freq>")
126
+
127
+ # Start with all ISAs at base frequency
128
+ isa_freqs_dict = {isa.name: base_freq for isa in isa_list}
129
+
130
+ # Override with any specific ISA frequencies that were detected
131
+ if detected.isa_frequencies:
132
+ isa_freqs_dict.update(detected.isa_frequencies)
133
+
134
+ return ISAFrequencies(isa_freqs_dict)
135
+
106
136
  def __getitem__(self, isa_name: str) -> Frequency:
107
137
  """Get frequency for a specific ISA.
108
138
 
@@ -111,6 +141,9 @@ class ISAFrequencies:
111
141
 
112
142
  Returns:
113
143
  Frequency wrapper for that ISA
144
+
145
+ Raises:
146
+ KeyError: If ISA not found
114
147
  """
115
148
  return self._isa_frequencies[isa_name]
116
149
 
@@ -177,7 +210,7 @@ class Architecture(InsertsArguments):
177
210
  "Specify them using a TOML config file with --topology-config <path>"
178
211
  )
179
212
 
180
- # Handle frequency: user arg (Frequency wrapper) overrides all, otherwise use detected per-ISA frequencies
213
+ # Handle frequency: user arg (Frequency wrapper) overrides all, otherwise use detected
181
214
  if args.frequency is not None:
182
215
  # args.frequency is already a Frequency wrapper from frequency_type()
183
216
  self.frequency = ISAFrequencies.from_base_frequency(args.frequency, self.isa)
@@ -185,14 +218,7 @@ class Architecture(InsertsArguments):
185
218
  d_freq = detected.frequency if detected.isa_frequencies is None else detected.isa_frequencies
186
219
  _override_warn("frequency", args.frequency, d_freq)
187
220
  else:
188
- isa_freqs = detected.isa_frequencies
189
- # if there are isa-specific frequencies, use them; otherwise fall back to base frequency if available
190
- if isa_freqs:
191
- self.frequency = ISAFrequencies(isa_freqs)
192
- elif base_freq := detected.frequency:
193
- self.frequency = ISAFrequencies.from_base_frequency(base_freq, self.isa)
194
- else:
195
- raise ValueError("Frequency could not be auto-detected, specify it using --frequency <freq>")
221
+ self.frequency = ISAFrequencies.from_detected(detected, self.isa)
196
222
 
197
223
  self.nominal_frequency: Frequency | None = detected.frequency_nominal
198
224
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carm-roofline
3
- Version: 1.0.0.dev4
3
+ Version: 1.0.0.dev5
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
@@ -622,7 +622,7 @@ Other usage examples:
622
622
  # Short roofline benchmark (1 second per micro-bench)
623
623
  carm benchmark --test roofline --test-time 1
624
624
  # Arithmetic-only
625
- carm benchmark --test arithmetic --instruction add --data-type f32
625
+ carm benchmark --test arithmetic --instruction add mul fma --data-type f32
626
626
  # Memory-only
627
627
  carm benchmark --test memory --mem-target L2 --ld-st-ratio 2:1
628
628
  # Dry run (generate benchmark code, skip compile/execute):
@@ -631,7 +631,7 @@ carm benchmark --dry-run --test arithmetic --test-time 1 --verbose 4
631
631
 
632
632
  ## Output and Results
633
633
 
634
- By default, results are written under the platform user data directory for the `carm` app (via platformdirs). On linux, this is typically `~/.local/share/carm/`, on Windows, `%APPDATA%\carm\`, and on MacOS, `~/Library/Application Support/carm/`.
634
+ By default, results are written to the user data directory (via platformdirs). On linux, this is typically `~/.local/share/carm/`, on Windows, `%APPDATA%\carm\`, and on MacOS, `~/Library/Application Support/carm/`.
635
635
 
636
636
  Control output directory and format(s):
637
637
 
@@ -76,6 +76,10 @@ gui/assets/CARM_icon.svg
76
76
  gui/assets/CHAMP_logo.svg
77
77
  gui/assets/menu_icon.png
78
78
  gui/assets/style.css
79
+ test/test_isa_codegen_integration.py
80
+ test/test_memory_suite_generation.py
81
+ test/test_output_module.py
82
+ test/test_typed_benchmarks.py
79
83
  test_bench/__init__.py
80
84
  test_bench/builder.py
81
85
  test_bench/test_bench.c
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "carm-roofline"
3
- version = "1.0.0.dev4"
3
+ version = "1.0.0.dev5"
4
4
  description = "CARM: Cache-Aware Roofline Model benchmarking and visualization toolkit"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -112,7 +112,7 @@ exclude = [
112
112
  "test_bench",
113
113
  "Test",
114
114
  "CustomClient",
115
- "refactor_tests", # Test code with temporary workarounds
115
+ "test", # Test code with temporary workarounds
116
116
  "venv",
117
117
  ".venv*"
118
118
  ]
@@ -171,7 +171,7 @@ line-ending = "lf"
171
171
 
172
172
  [tool.pytest.ini_options]
173
173
  minversion = "7.0"
174
- testpaths = ["refactor_tests"]
174
+ testpaths = ["test"]
175
175
  python_files = ["test_*.py"]
176
176
  python_classes = ["Test*"]
177
177
  python_functions = ["test_*"]
@@ -208,7 +208,7 @@ warn_unused_configs = true
208
208
  # Exclude legacy code from type checking
209
209
  exclude = [
210
210
  "legacy_bench_gen/",
211
- "refactor_tests/",
211
+ "test/",
212
212
  "run.py",
213
213
  "run_gpu.py",
214
214
  ".*AI_Calculator.py",