
Show HN: Smelt — 칩 개발자를 위한 오픈 소스 테스트 러너 (test runner)
요약
Smelt는 칩 개발 워크플로에 최적화된 오픈 소스 태스크 러너로, 테스트 변형을 프로그래밍 방식으로 정의하고 병렬로 실행할 수 있는 도구입니다. Python 패키지로 제공되며 YAML 스키마나 Python 코드를 통해 로컬 및 분산 컴퓨팅 환경에서 효율적인 테스트 관리를 지원합니다.
핵심 포인트
- 칩 개발 및 EDA(전자 설계 자동화) 워크플로에 특화된 설계
- Python 및 YAML을 이용한 프로그래밍 방식의 테스트 정의 지원
- 로컬 및 분산 컴퓨팅 환경에서의 병렬 실행 및 결과 분석 기능
- 검사, 재실행, 수정이 가능한 bash 스크립트 생성 기능 제공
Smelt는 칩 개발 워크플로 (workflows)에 최적화된 단순하고 확장 가능한 태스크 러너 (task runner)입니다. Smelt를 사용하면 임의의 수만큼 테스트 변형 (test variants)을 프로그래밍 방식으로 쉽게 정의하고, 이러한 테스트를 병렬로 실행하며, 그 결과를 분석할 수 있습니다. Smelt는 로컬 및 분산 컴퓨팅 환경 (distributed compute contexts) 모두에 단순하고 효율적인 워크플로를 제공합니다.
Smelt는 Python 패키지로 배포되며 다음과 같이 설치할 수 있습니다:
pipx install pysmelt
Smelt가 설치되면, .smelt.yaml 확장자를 가진 파일 내의 단순한 YAML 스키마 (schema)를 사용하거나 Python을 사용하여 절차적으로 테스트 목록을 기술할 수 있습니다.
yves의 Python 테스트 목록 (testlist) 스니펫 (snippet):
num_branches = 1024
bhist_iterations = 10000
branch_tests = []
for size in [2**n for n in range(12)]:
이 규칙은 파일을 컴파일하며 병렬로 실행될 수 있습니다
benchmark = compile_local_ubench_zig(
name=f"directional_branch_history_{size}",
compiler_path=compiler_path,
benchmark_path=branch_hist,
ubench_parameters={
"INNER_ITERATIONS": size,
"ITERATIONS": bhist_iterations,
"NUM_BRANCHES": num_branches,
},
compiler_target=cpp_compiler.as_ref,
)
bench_bin = benchmark.get_outputs()["binary"]
이것은 로컬 시스템을 벤치마크하는 테스트이며, 간섭 (crosstalk)을 피하기 위해 병렬성을 보이지 않아야 합니다
bench = local_benchmark(
name=f"directional_branch_history_{size}_local",
profiler_path=profiler_bin,
benchmark_path=bench_bin,
metadata={
"BRANCHES_OBSERVED": size * num_branches * bhist_iterations,
"HISTORY": size,
},
)
branch_tests.append(bench)
dbh = test_group(name="directional_branch_history_sweep", tests=branch_tests)
ftcg = test_group(name="all_frontend_tests", tests=[dbh.as_ref])
이러한 테스트 및 다른 테스트들에 의존하는 계층적 테스트 그룹 (hierarchical test group)을 정의할 수 있습니다:
- name: all_tests
rule: test_group
rule_args:
tests:
-
//benches/memory/loadtouse_tl.py:all_mem_tests
-
//benches/midcore/bandwidths_etc.py:all_mc_tests
-
//benches/frontend/frontend_tl.py:all_frontend_tests
Smelt는 가능한 한 많은 병렬성을 사용하여 이러한 테스트를 실행합니다:
주요 기능 (Features)
Smelt는 여러 작업을 실행하는 과정을 가능한 한 단순하게 만들도록 설계되었습니다. 이를 달성하기 위해, smelt 아래의 각 명령은 검사, 재실행 및 수정이 가능한 bash 스크립트를 생성합니다.
EDA (electronic design automation, 전자 설계 자동화)를 위해 구축된 smelt는 테스트 인프라를 위한 "모범 사례 (best practices)"를 통합하고자 합니다:
- 절차적 테스트 생성 (Procedural test generation): Python을 사용하여 프로그래밍 방식으로 테스트를 생성
- 실패 시 자동 재실행 (Automatic rerun on failure): 실패한 테스트를 재실행하는 데 필요한 계산 과정을 기술
- 분석 API (Analysis APIs): 테스트를 추적하고 재현하는 데 필요한 모든 데이터 제공
- 확장 가능성 (Extensible): 단순한 Python 인터페이스로 테스트 정의
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Game Dev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기