
가상 플랫폼을 위한 빠른 기능적 장치 모델을 작성하는 도메인 특화 언어입니다. DML을 Intel Simics 시뮬레이터에 맞춘 API 호출이 포함된 C로 컴파일하여 하드웨어 시뮬레이션 및 보안 테스트를 가능하게 합니다.
Device Modeling Language (DML)는 가상 플랫폼을 위한 빠른 기능적 또는 트랜잭션 수준의 장치 모델을 작성하기 위한 도메인 특화 언어입니다. DML은 레지스터 뱅크, 레지스터, 비트 필드, 이벤트 포스팅, 모델 간 인터페이스, 로깅과 같은 기능적 장치 모델에 적합한 고수준 추상화를 제공합니다. DML 코드는 DML 컴파일러(DMLC)에 의해 컴파일되어 특정 시뮬레이터에 맞춤화된 API 호출이 포함된 C 코드를 생성합니다.
현재 컴파일러는 Intel® Simics® 시뮬레이터용 모델 구축을 지원하지만, 향후 다른 백엔드가 추가될 수 있습니다.
DMLC를 빌드하려면 Simics 시뮬레이터 설치와 Simics 프로젝트 설정이 필요합니다.
아직 Simics 시뮬레이터 설치가 없거나 상업적 채널을 통해 Simics 시뮬레이터에 액세스할 수 없는 경우, Intel Simics 시뮬레이터 공개 릴리스를 설치하고 Simics 프로젝트를 생성하십시오(기본 설치 흐름에서 자동으로 수행됨).
Simics 프로젝트에서 DML 저장소를 modules/dmlc 디렉토리로 체크아웃하십시오. 프로젝트 최상위에서 make dmlc(Windows에서는 bin\make dmlc)를 실행하십시오.
DMLC와 함께 제공된 단위 테스트를 실행하려면 프로젝트 최상위에서 make test-dmlc 또는 bin/test-runner --suite modules/dmlc/test를 실행하십시오.
다음 환경 변수는 DMLC 개발 시 유용합니다. 로컬로 빌드된 DMLC를 정기적으로 사용하는 경우, .bashrc에 DMLC_DIR, T126_JOBS, DMLC_PATHSUBST, PY_SYMLINKS 변수를 설정하는 것을 고려하십시오. 나머지 변수는 필요할 때만 활성화하는 것이 좋습니다.
DMLC를 빌드한 후, 로컬로 빌드된 컴파일러로 장치를 빌드하려면 이후 make 호출에서 DMLC_DIR을 <your-project>/<hosttype>/bin으로 설정해야 합니다. <hosttype>은 호스트 유형에 따라 linux64 또는 win64입니다.
설정되면 지정된 수의 테스트가 병렬로 실행됩니다.
DMLC 빌드는 몇 가지 DML 라이브러리 파일(예: dml-builtins.dml)을 <hosttype>/bin에 복사합니다. 컴파일 오류가 발생하면 오류 메시지는 일반적으로 소스가 아닌 이 복사본을 가리킵니다. DMLC_PATHSUBST를 <hosttype>/bin/dml=modules/dmlc/lib로 설정하면 오류 메시지가 대신 소스 파일을 가리키도록 다시 작성됩니다. <hosttype>은 호스트 유형에 따라 linux64 또는 win64입니다.
1로 설정하면 make dmlc가 Python 파일을 복사하는 대신 심볼릭 링크를 생성합니다. 이는 두 가지 효과가 있습니다. Python 역추적(traceback)이 저장소의 소스 파일로 연결되며, Python 파일을 편집한 후 make를 다시 실행할 필요가 없습니다.
1로 설정하면 컴파일러의 예상치 못한 예외가 stderr로 출력됩니다. 기본값은 역추적을 dmlc-error.log 파일에 숨기는 것입니다.
단위 테스트에서 기본 컴파일러를 재정의합니다.
설정되면 DMLC가 자체 프로파일링을 수행하고 프로파일을 .prof 파일에 씁니다.
설정되면 DMLC는 모든 DML 소스 파일을 포함하는 .tar.bz2 아카이브를 내보내며, 독립적으로 컴파일할 수 있는 형태로 패키징됩니다. 이는 복잡한 빌드 환경에서 DML 문제가 발생하여 문제를 격리하여 재현하려는 경우 유용합니다. 생성된 아카이브에서 모든 DML 파일은 동일한 디렉토리(최상위 또는 _이라는 일련의 하위 디렉토리 아래)에 위치하며, 상대 가져오기를 처리하기 위해 아카이브에 심볼릭 링크도 포함됩니다. Windows에서는 DMLC가 이러한 심볼릭 링크를 올바르게 확인하지 못하는 경우가 있습니다. 이러한 이유로 아카이브는 Linux에서만 추출 및 컴파일하는 것이 좋습니다.
설정되면 DMLC는 -size-stats.json으로 끝나는 파일을 출력하며, 이 파일은 생성된 코드 크기를 줄이고 컴파일 속도를 높이는 데 유용한 코드 생성 통계를 보여줍니다. 이 파일은 각 DML 메서드에 대해 생성된 C 코드의 양을 나열합니다. 출력은 [tot_size, location, num] 트리플 목록입니다. 여기서 tot_size는 하나의 메서드 선언에서 생성된 C 코드의 총 바이트 수, num은 이 선언에서 C 코드가 생성된 횟수(템플릿에 의해 확장되었기 때문에), location은 선언의 소스 위치입니다.
tot_size가 크고 num이 큰 항목은 메서드를 shared로 선언하여 줄일 수 있습니다. 이렇게 하면 크기가 대략 num으로 나누어집니다. num이 1인 큰 tot_size 항목은 일반적으로 메서드가 #foreach 또는 #select와 같은 구문에 의해 지배된다는 것을 의미하며, 루프 본문을 별도의 메서드로 분리하거나 루프를 foreach와 같은 다른 구문으로 재작업하여 줄일 수 있습니다.
통계에는 메서드 선언에서 직접 생성된 코드만 포함됩니다. 총 코드 크기에는 훨씬 더 많은 것이 포함됩니다. 메서드 선언의 코드 크기 1메가바이트는 일반적으로 컴파일 시간에 몇 초를 기여합니다.