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.
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/PKG-INFO +3 -3
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/README.md +2 -2
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/architecture.py +35 -9
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/PKG-INFO +3 -3
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/SOURCES.txt +4 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/pyproject.toml +4 -4
- carm_roofline-1.0.0.dev5/test/test_isa_codegen_integration.py +958 -0
- carm_roofline-1.0.0.dev5/test/test_memory_suite_generation.py +177 -0
- carm_roofline-1.0.0.dev5/test/test_output_module.py +924 -0
- carm_roofline-1.0.0.dev5/test/test_typed_benchmarks.py +818 -0
- carm_roofline-1.0.0.dev5/utils.py +177 -0
- carm_roofline-1.0.0.dev4/utils.py +0 -314
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/LICENSE +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/arm.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/config.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/detect.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/frequency.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/memory.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/riscv.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/arm/features.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/arm/frequency.h +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/arm/vlen.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/frequency.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/riscv/frequency.h +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/riscv/rvv_version.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/riscv/vlen.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/cache.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/features.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/frequency.h +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/tests/x86/x86_avx512/frequency.h +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/architecture/x86.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/arguments.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/benchmark.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/benchmarking.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/arm.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/data_type.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/instruction.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/operation.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/code_gen/register.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/isa.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/parameters.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/riscv.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/generation/x86.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/interface.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/arithmetic.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/base.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/common.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/memory.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/memory_sweep.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/mixed.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/output/roofline.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/result.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/arithmetic.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/base.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/memory.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/memory_sweep.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/mixed.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/benchmark/suites/roofline.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/dependency_links.txt +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/entry_points.txt +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/requires.txt +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/carm_roofline.egg-info/top_level.txt +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/context.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/error.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/exec_interface.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/CARM_icon.svg +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/CHAMP_logo.svg +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/menu_icon.png +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/assets/style.css +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/config.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/dashboard.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/gui/gui_utils.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/output_utils.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/results_paths.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/run_config.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/setup.cfg +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/__init__.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/builder.py +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/test_bench.c +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/test_bench.h +0 -0
- {carm_roofline-1.0.0.dev4 → carm_roofline-1.0.0.dev5}/test_bench/wrapper.inl +0 -0
- {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.
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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
|
-
"
|
|
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 = ["
|
|
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
|
-
"
|
|
211
|
+
"test/",
|
|
212
212
|
"run.py",
|
|
213
213
|
"run_gpu.py",
|
|
214
214
|
".*AI_Calculator.py",
|