Source code for hlsfactory.datasets_builtin

import shutil
from collections.abc import Callable
from pathlib import Path

from hlsfactory.framework import DesignDataset, DesignDatasetCollection

CURRENT_FP = Path(__file__).resolve()
CURRENT_DIR = CURRENT_FP.parent

HLS_DATASET_DIR = CURRENT_DIR / "hls_dataset_sources"

DIR_DATASET_POLYBENCH = HLS_DATASET_DIR / "polybench"
DIR_DATASET_MACHSUITE = HLS_DATASET_DIR / "machsuite"
DIR_DATASET_CHSTONE = HLS_DATASET_DIR / "chstone"
DIR_DATASET_PP4FPGAS = HLS_DATASET_DIR / "pp4fpgas"
DIR_DATASET_VITIS_EXAMPLES = HLS_DATASET_DIR / "vitis_examples"
DIR_DATASET_TEST_DESIGNS_CATAPULT = HLS_DATASET_DIR / "test_designs_catapult"
DIR_DATASET_TEST_DESIGNS_STRATUS = HLS_DATASET_DIR / "test_designs_stratus"
DIR_DATASET_TEST_DESIGNS_XLS = HLS_DATASET_DIR / "test_designs_xls"
DIR_DATASET_XLS_UPSTREAM = HLS_DATASET_DIR / "xls_upstream"
DIR_DATASET_ALTERA_EXAMPLES = HLS_DATASET_DIR / "altera_examples"
DIR_DATASET_TEST_DESIGNS_VITIS_MODERN = HLS_DATASET_DIR / "test_designs_vitis_modern"
DIR_DATASET_ACCELERATORS = HLS_DATASET_DIR / "accelerators"

DIR_DATASET_SODA = HLS_DATASET_DIR / "soda"
DIR_DATASET_HP_FFT = HLS_DATASET_DIR / "hp_fft_hls"
DIR_DATASET_STREAM_HLS = HLS_DATASET_DIR / "stream_hls"
DIR_DATASET_AUTO_NTT = HLS_DATASET_DIR / "auto_ntt"
DIR_DATASET_FORGEBENCH = HLS_DATASET_DIR / "forgebench"

DIR_DATASET_SPECTOR_HLS = HLS_DATASET_DIR / "spector_hls"

DIR_ALL = [
    DIR_DATASET_POLYBENCH,
    DIR_DATASET_MACHSUITE,
    DIR_DATASET_CHSTONE,
    DIR_DATASET_PP4FPGAS,
    DIR_DATASET_VITIS_EXAMPLES,
    DIR_DATASET_TEST_DESIGNS_CATAPULT,
    DIR_DATASET_TEST_DESIGNS_STRATUS,
    DIR_DATASET_TEST_DESIGNS_XLS,
    DIR_DATASET_ALTERA_EXAMPLES,
    DIR_DATASET_TEST_DESIGNS_VITIS_MODERN,
    DIR_DATASET_ACCELERATORS,
    DIR_DATASET_SODA,
    DIR_DATASET_HP_FFT,
    DIR_DATASET_STREAM_HLS,
    DIR_DATASET_AUTO_NTT,
    DIR_DATASET_FORGEBENCH,
]


[docs] def check_dataset_dir_exists(dir_path: Path) -> None: if not dir_path.exists(): msg = f"Dataset directory not found: {dir_path}" raise FileNotFoundError(msg)
[docs] def dataset_polybench_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_POLYBENCH) new_dir = work_dir / name shutil.copytree(DIR_DATASET_POLYBENCH, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_machsuite_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_MACHSUITE) new_dir = work_dir / name shutil.copytree(DIR_DATASET_MACHSUITE, new_dir) return DesignDataset.from_dir( name, new_dir, exclude_dir_filter=lambda dir_path: dir_path.name == "common", )
[docs] def dataset_chstone_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_CHSTONE) new_dir = work_dir / name shutil.copytree(DIR_DATASET_CHSTONE, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_pp4fpgas_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_PP4FPGAS) new_dir = work_dir / name shutil.copytree(DIR_DATASET_PP4FPGAS, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_vitis_examples_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_VITIS_EXAMPLES) new_dir = work_dir / name shutil.copytree(DIR_DATASET_VITIS_EXAMPLES, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_test_designs_catapult_builder( name: str, work_dir: Path, ) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_TEST_DESIGNS_CATAPULT) new_dir = work_dir / name shutil.copytree(DIR_DATASET_TEST_DESIGNS_CATAPULT, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_test_designs_stratus_builder( name: str, work_dir: Path, ) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_TEST_DESIGNS_STRATUS) new_dir = work_dir / name shutil.copytree(DIR_DATASET_TEST_DESIGNS_STRATUS, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_test_designs_xls_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_TEST_DESIGNS_XLS) new_dir = work_dir / name shutil.copytree(DIR_DATASET_TEST_DESIGNS_XLS, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_xls_upstream_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_XLS_UPSTREAM) new_dir = work_dir / name shutil.copytree(DIR_DATASET_XLS_UPSTREAM, new_dir)
[docs] def dataset_altera_examples_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_ALTERA_EXAMPLES) new_dir = work_dir / name shutil.copytree(DIR_DATASET_ALTERA_EXAMPLES, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_test_designs_vitis_modern_builder( name: str, work_dir: Path, ) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_TEST_DESIGNS_VITIS_MODERN) new_dir = work_dir / name shutil.copytree(DIR_DATASET_TEST_DESIGNS_VITIS_MODERN, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_accelerators_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_ACCELERATORS) new_dir = work_dir / name shutil.copytree(DIR_DATASET_ACCELERATORS, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_soda_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_SODA) new_dir = work_dir / name shutil.copytree(DIR_DATASET_SODA, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_hp_fft_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_HP_FFT) new_dir = work_dir / name shutil.copytree(DIR_DATASET_HP_FFT, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_stream_hls_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_STREAM_HLS) new_dir = work_dir / name shutil.copytree(DIR_DATASET_STREAM_HLS, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_auto_ntt_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_AUTO_NTT) new_dir = work_dir / name shutil.copytree(DIR_DATASET_AUTO_NTT, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_forgebench_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_FORGEBENCH) new_dir = work_dir / name shutil.copytree(DIR_DATASET_FORGEBENCH, new_dir) return DesignDataset.from_dir(name, new_dir)
[docs] def dataset_spector_hls_builder(name: str, work_dir: Path) -> DesignDataset: check_dataset_dir_exists(DIR_DATASET_SPECTOR_HLS) new_dir = work_dir / name shutil.copytree(DIR_DATASET_SPECTOR_HLS, new_dir) return DesignDataset.from_dir(name, new_dir)
T_dataset_builder = Callable[[str, Path], DesignDataset] DATASET_STR_MAP: dict[str, T_dataset_builder] = { "polybench": dataset_polybench_builder, "machsuite": dataset_machsuite_builder, "chstone": dataset_chstone_builder, "pp4fpgas": dataset_pp4fpgas_builder, "vitis_examples": dataset_vitis_examples_builder, "test_designs_catapult": dataset_test_designs_catapult_builder, "test_designs_stratus": dataset_test_designs_stratus_builder, "test_designs_xls": dataset_test_designs_xls_builder, "xls_upstream": dataset_xls_upstream_builder, "altera_examples": dataset_altera_examples_builder, "test_designs_vitis_modern": dataset_test_designs_vitis_modern_builder, "accelerators": dataset_accelerators_builder, "soda": dataset_soda_builder, "hp_fft": dataset_hp_fft_builder, "hpfft": dataset_hp_fft_builder, "stream_hls": dataset_stream_hls_builder, "streamhls": dataset_stream_hls_builder, "auto_ntt": dataset_auto_ntt_builder, "autontt": dataset_auto_ntt_builder, "forgebench": dataset_forgebench_builder, "spector_hls": dataset_spector_hls_builder, }
[docs] def datasets_builder( work_dir: Path, dataset_names: list[str], dataset_labels: list[str] | None = None, ) -> DesignDatasetCollection: datasets = {} if dataset_labels is None: dataset_labels = dataset_names assert len(dataset_names) == len(dataset_labels) for dataset_name, dataset_label in zip( dataset_names, dataset_labels, strict=True, ): dataset_normalized = dataset_name.strip().lower() if dataset_normalized not in DATASET_STR_MAP: raise ValueError( f"Dataset name not recognized: {dataset_name} " f"(normalized: {dataset_normalized})", ) dataset_builder = DATASET_STR_MAP[dataset_normalized] dataset = dataset_builder(dataset_label, work_dir) datasets[dataset_label] = dataset return datasets
[docs] def datasets_all_builder(work_dir: Path) -> DesignDatasetCollection: for dir_path in DIR_ALL: check_dataset_dir_exists(dir_path) dataset_polybench = dataset_polybench_builder("polybench", work_dir) dataset_machsuite = dataset_machsuite_builder("machsuite", work_dir) dataset_chstone = dataset_chstone_builder("chstone", work_dir) dataset_pp4fpgas = dataset_pp4fpgas_builder("pp4fpgas", work_dir) dataset_vitis_examples = dataset_vitis_examples_builder("vitis_examples", work_dir) dataset_test_designs_catapult = dataset_test_designs_catapult_builder( "test_designs_catapult", work_dir, ) dataset_test_designs_stratus = dataset_test_designs_stratus_builder( "test_designs_stratus", work_dir, ) dataset_test_designs_xls = dataset_test_designs_xls_builder( "test_designs_xls", work_dir, ) dataset_test_designs_vitis_modern = dataset_test_designs_vitis_modern_builder( "test_designs_vitis_modern", work_dir, ) dataset_accelerators = dataset_accelerators_builder("accelerators", work_dir) dataset_soda = dataset_soda_builder("soda", work_dir) dataset_hp_fft = dataset_hp_fft_builder("hp_fft", work_dir) dataset_stream_hls = dataset_stream_hls_builder("stream_hls", work_dir) dataset_auto_ntt = dataset_auto_ntt_builder("auto_ntt", work_dir) dataset_forgebench = dataset_forgebench_builder("forgebench", work_dir) return { dataset_polybench.name: dataset_polybench, dataset_machsuite.name: dataset_machsuite, dataset_chstone.name: dataset_chstone, dataset_pp4fpgas.name: dataset_pp4fpgas, dataset_vitis_examples.name: dataset_vitis_examples, dataset_test_designs_catapult.name: dataset_test_designs_catapult, dataset_test_designs_stratus.name: dataset_test_designs_stratus, dataset_test_designs_xls.name: dataset_test_designs_xls, dataset_test_designs_vitis_modern.name: dataset_test_designs_vitis_modern, dataset_accelerators.name: dataset_accelerators, dataset_soda.name: dataset_soda, dataset_hp_fft.name: dataset_hp_fft, dataset_stream_hls.name: dataset_stream_hls, dataset_auto_ntt.name: dataset_auto_ntt, dataset_forgebench.name: dataset_forgebench, }