Enable single pass counter collection (#833)
This commit is contained in:
@@ -27,13 +27,9 @@
|
||||
import inspect
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from importlib.machinery import SourceFileLoader
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
@@ -1649,3 +1645,117 @@ def test_comprehensive_error_paths():
|
||||
assert False, "Should raise exception for None coll_level"
|
||||
except Exception as e:
|
||||
assert "coll_level can not be None" in str(e)
|
||||
|
||||
|
||||
@pytest.mark.sets_func
|
||||
class TestSetsIntegration:
|
||||
def test_memory_throughput_set(self, binary_handler_profile_rocprof_compute):
|
||||
options = ["--set", "mem_thruput"]
|
||||
workload_dir = test_utils.get_output_dir()
|
||||
|
||||
binary_handler_profile_rocprof_compute(
|
||||
config,
|
||||
workload_dir,
|
||||
options,
|
||||
check_success=True,
|
||||
roof=False,
|
||||
)
|
||||
|
||||
assert test_utils.get_num_pmc_file(workload_dir) == 1
|
||||
|
||||
memory_metrics = ["16.1.2", "17.1.0"]
|
||||
for metric_id in memory_metrics:
|
||||
assert (
|
||||
metric_id in open(Path(workload_dir) / "log.txt", "r").read()
|
||||
), f"Expected memory metric {metric_id} not found"
|
||||
|
||||
test_utils.clean_output_dir(config["cleanup"], workload_dir)
|
||||
|
||||
def test_launch_stats_set(self, binary_handler_profile_rocprof_compute):
|
||||
options = ["--set", "launch_stats"]
|
||||
workload_dir = test_utils.get_output_dir()
|
||||
|
||||
binary_handler_profile_rocprof_compute(
|
||||
config,
|
||||
workload_dir,
|
||||
options,
|
||||
check_success=True,
|
||||
roof=False,
|
||||
)
|
||||
|
||||
assert test_utils.get_num_pmc_file(workload_dir) == 1
|
||||
|
||||
test_utils.clean_output_dir(config["cleanup"], workload_dir)
|
||||
|
||||
def test_compute_thruput_util_set(self, binary_handler_profile_rocprof_compute):
|
||||
options = ["--set", "compute_thruput_util"]
|
||||
workload_dir = test_utils.get_output_dir()
|
||||
|
||||
binary_handler_profile_rocprof_compute(
|
||||
config,
|
||||
workload_dir,
|
||||
options,
|
||||
check_success=True,
|
||||
roof=False,
|
||||
)
|
||||
|
||||
assert test_utils.get_num_pmc_file(workload_dir) == 1
|
||||
|
||||
test_utils.clean_output_dir(config["cleanup"], workload_dir)
|
||||
|
||||
def test_compute_thruput_flops_set(self, binary_handler_profile_rocprof_compute):
|
||||
options = ["--set", "compute_thruput_flops"]
|
||||
workload_dir = test_utils.get_output_dir()
|
||||
|
||||
binary_handler_profile_rocprof_compute(
|
||||
config,
|
||||
workload_dir,
|
||||
options,
|
||||
check_success=True,
|
||||
roof=False,
|
||||
)
|
||||
|
||||
assert test_utils.get_num_pmc_file(workload_dir) == 1
|
||||
|
||||
test_utils.clean_output_dir(config["cleanup"], workload_dir)
|
||||
|
||||
def test_invalid_set_error_handling(self, binary_handler_profile_rocprof_compute):
|
||||
options = ["--set", "nonexistent_set"]
|
||||
workload_dir = test_utils.get_output_dir()
|
||||
|
||||
returncode = binary_handler_profile_rocprof_compute(
|
||||
config,
|
||||
workload_dir,
|
||||
options,
|
||||
check_success=False,
|
||||
roof=False,
|
||||
)
|
||||
|
||||
assert returncode == 1
|
||||
test_utils.clean_output_dir(config["cleanup"], workload_dir)
|
||||
|
||||
def test_set_and_block_mutual_exclusion(self, binary_handler_profile_rocprof_compute):
|
||||
options = ["--set", "compute_thruput_util", "--block", "12"]
|
||||
workload_dir = test_utils.get_output_dir()
|
||||
|
||||
returncode = binary_handler_profile_rocprof_compute(
|
||||
config, workload_dir, options, check_success=False, roof=False
|
||||
)
|
||||
|
||||
assert returncode == 1
|
||||
test_utils.clean_output_dir(config["cleanup"], workload_dir)
|
||||
|
||||
def test_list_sets_functionality(self, binary_handler_profile_rocprof_compute):
|
||||
options = ["--list-sets"]
|
||||
workload_dir = test_utils.get_output_dir()
|
||||
|
||||
binary_handler_profile_rocprof_compute(
|
||||
config,
|
||||
workload_dir,
|
||||
options,
|
||||
check_success=False,
|
||||
roof=False,
|
||||
)
|
||||
# workload dir should be empty
|
||||
assert not os.listdir(workload_dir)
|
||||
test_utils.clean_output_dir(config["cleanup"], workload_dir)
|
||||
|
||||
+23
-7
@@ -29,7 +29,6 @@ import logging
|
||||
logging.trace = lambda *args, **kwargs: None
|
||||
|
||||
import builtins
|
||||
import glob
|
||||
import inspect
|
||||
import io
|
||||
import json
|
||||
@@ -38,16 +37,15 @@ import logging
|
||||
import os
|
||||
import pathlib
|
||||
import re
|
||||
import selectors
|
||||
import shutil
|
||||
import subprocess
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from unittest import mock
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
import yaml
|
||||
|
||||
import utils.utils as utils
|
||||
|
||||
@@ -163,6 +161,16 @@ def check_csv_files(output_dir, num_devices, num_kernels):
|
||||
return file_dict
|
||||
|
||||
|
||||
def get_num_pmc_file(output_dir):
|
||||
"""
|
||||
Returns:
|
||||
int: number of pmc perf text files in perfmon dir
|
||||
"""
|
||||
|
||||
perfmon_path = Path(output_dir) / "perfmon"
|
||||
return len([f for f in perfmon_path.iterdir() if f.is_file() and f.suffix == ".txt"])
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# VERSION UTILITIES TESTS
|
||||
# =============================================================================
|
||||
@@ -5975,11 +5983,10 @@ def test_get_submodules_basic_functionality():
|
||||
Returns:
|
||||
None: Asserts function correctly lists submodules from a real package.
|
||||
"""
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import utils.utils as utils_mod
|
||||
|
||||
mock_package = MagicMock()
|
||||
mock_package = mock.MagicMock()
|
||||
mock_package.__path__ = ["/fake/path"]
|
||||
|
||||
mock_submodules = [
|
||||
@@ -5988,8 +5995,8 @@ def test_get_submodules_basic_functionality():
|
||||
(None, "module_error", False),
|
||||
]
|
||||
|
||||
with patch("importlib.import_module", return_value=mock_package):
|
||||
with patch("pkgutil.walk_packages", return_value=mock_submodules):
|
||||
with mock.patch("importlib.import_module", return_value=mock_package):
|
||||
with mock.patch("pkgutil.walk_packages", return_value=mock_submodules):
|
||||
result = utils_mod.get_submodules("test_package")
|
||||
|
||||
assert isinstance(result, list)
|
||||
@@ -9490,3 +9497,12 @@ def test_replace_timestamps_no_other_csvs_to_update(
|
||||
df_sysinfo_original = pd.read_csv(sysinfo_csv_path_str)
|
||||
assert list(df_sysinfo_original["Start_Timestamp"]) == [5]
|
||||
assert list(df_sysinfo_original["End_Timestamp"]) == [7]
|
||||
|
||||
|
||||
def test_set_parser():
|
||||
from utils.utils import parse_sets_yaml
|
||||
|
||||
result = parse_sets_yaml("gfx90a")
|
||||
|
||||
assert "compute_thruput_util" in result
|
||||
assert result["compute_thruput_util"]["title"] == "Compute Throughput Utilization"
|
||||
|
||||
Reference in New Issue
Block a user