docs: record MKL TBB build configuration and verification scope

This commit is contained in:
KOKO\Mimi
2026-10-20 22:53:55 +09:00
parent 89ac4f27a2
commit d1c0e36566
3 changed files with 25 additions and 4 deletions
+13
View File
@@ -2,6 +2,19 @@
Hex8와 reduced-coordinate shell HHT의 실제 병목을 VTune으로 조사하고, 승인된 물리·입력·정밀도·결과 의미를 유지하며 실행 시간을 줄이는 작업이다. 새 요소·하중·적분법·공용 cache framework 추가는 범위 밖이다. 요구사항 `FEM-REQ-PERF-001..009`의 시간 목표와 검증은 별개이며 현재 최종 완료 상태는 아니다. Hex8와 reduced-coordinate shell HHT의 실제 병목을 VTune으로 조사하고, 승인된 물리·입력·정밀도·결과 의미를 유지하며 실행 시간을 줄이는 작업이다. 새 요소·하중·적분법·공용 cache framework 추가는 범위 밖이다. 요구사항 `FEM-REQ-PERF-001..009`의 시간 목표와 검증은 별개이며 현재 최종 완료 상태는 아니다.
## 현재 MKL 연결과 확인 범위
2026-10-20 MKL threading layer를 TBB로 변경했다. 직접 MSBuild와 CMake의 x64
Debug·Release 네 빌드는 모두 종료0이며 CLI와 세 테스트 실행 파일 총16개의 링크 및
인접 DLL48개의 일반·지연 PE 의존성과 설치 원본 해시를 정적으로 확인했다.
Debug는 `mkl_tbb_threadd`·`tbb12_debug`, Release는 `mkl_tbb_thread`·`tbb12`를 사용하고
HDF5의 `libmmd.dll`을 유지한다. 근거는 `.build/mkl-tbb-20261020-01/`에 보관했다.
사용자 지시로 이번 설정 변경에서는 테스트·모델·수치 비교·성능 측정·VTune을 실행하지
않았다. 실제 DLL loading, 수치 정확성, 속도 향상과 OpenMP 대기 제거는 미검증이다.
기존 OpenMP 전용 local-thread/TLS helper와 HHT cache 진단 코드는 유지했으며 TBB에서의
동등성도 확인하지 않았다. 아래 과거 시간·검증 기록을 새 TBB 구성의 결과로 승계하지 않는다.
## 채택한 계산 경로와 수명 ## 채택한 계산 경로와 수명
[Matrix::Multiply](../../src/fesa/math/matrix.cpp)는 dense GEMV/GEMM, [SparseMatrix::Multiply](../../src/fesa/math/sparse_matrix.cpp)는 CSR validate·finite/RHS/checked MKL_INT 확인 후 `mkl_sparse_d_create_csr → mkl_sparse_d_mv → destroy`를 사용한다. Const 호출마다 변환 배열·values 복사·handle을 소유하므로 copy/move·동시 호출에 backend pointer를 공유하지 않는다. Empty shape도 입력 검증 뒤 zero vector를 반환한다. 지속 symbolic cache나 scalar fallback은 없다. 호출마다 CSR 배열 복사 비용이 있으므로 MKL 연결만으로 전체 성능 향상을 주장하지 않는다. [Matrix::Multiply](../../src/fesa/math/matrix.cpp)는 dense GEMV/GEMM, [SparseMatrix::Multiply](../../src/fesa/math/sparse_matrix.cpp)는 CSR validate·finite/RHS/checked MKL_INT 확인 후 `mkl_sparse_d_create_csr → mkl_sparse_d_mv → destroy`를 사용한다. Const 호출마다 변환 배열·values 복사·handle을 소유하므로 copy/move·동시 호출에 backend pointer를 공유하지 않는다. Empty shape도 입력 검증 뒤 zero vector를 반환한다. 지속 symbolic cache나 scalar fallback은 없다. 호출마다 CSR 배열 복사 비용이 있으므로 MKL 연결만으로 전체 성능 향상을 주장하지 않는다.
+9 -3
View File
@@ -3,7 +3,7 @@
## 준비 순서 ## 준비 순서
저장소 root에서 VS x64 개발 환경을 사용한다. 직접 프로젝트는 v145 toolset과 Windows SDK를 저장소 root에서 VS x64 개발 환경을 사용한다. 직접 프로젝트는 v145 toolset과 Windows SDK를
요구한다. 필요한 로컬 설치는 MKL·TBB·HDF5·OpenMP/Intel runtime과 승인된 GoogleTest 요구한다. 필요한 로컬 설치는 MKL·TBB·HDF5·Intel 수학 runtime과 승인된 GoogleTest
source checkout이다. CMake 경로에는 추가로 CMake 3.25 이상과 Ninja가 필요하다. source checkout이다. CMake 경로에는 추가로 CMake 3.25 이상과 Ninja가 필요하다.
Dependency 설치·다운로드·외부 source 수정은 아래 명령에 포함되지 않는다. Dependency 설치·다운로드·외부 source 수정은 아래 명령에 포함되지 않는다.
@@ -15,7 +15,7 @@ Dependency 설치·다운로드·외부 source 수정은 아래 명령에 포함
| `FESA_MKL_ROOT` | MKL의 include·lib·runtime을 포함한 설치 root | | `FESA_MKL_ROOT` | MKL의 include·lib·runtime을 포함한 설치 root |
| `FESA_TBB_ROOT` | TBB 설치 root; Debug와 Release runtime을 구분한다. | | `FESA_TBB_ROOT` | TBB 설치 root; Debug와 Release runtime을 구분한다. |
| `FESA_HDF5_ROOT` | HDF5 C library의 include·lib·runtime 설치 root | | `FESA_HDF5_ROOT` | HDF5 C library의 include·lib·runtime 설치 root |
| `FESA_OMP_ROOT` | Intel OpenMP library와 runtime 설치 root | | `FESA_OMP_ROOT` | HDF5가 요구하는 `bin/libmmd.dll`의 Intel compiler runtime 설치 root; 기존 변수명을 유지한다. |
| `MKL_DIR`·`TBB_DIR`·`HDF5_DIR` | CMake에서만 사용하는 각 CONFIG package 디렉터리; 설치 root와 혼동하지 않는다. | | `MKL_DIR`·`TBB_DIR`·`HDF5_DIR` | CMake에서만 사용하는 각 CONFIG package 디렉터리; 설치 root와 혼동하지 않는다. |
VS x64 Developer PowerShell에서 다음을 확인한다. 누락되면 해당 로컬 설치 경로를 설정한 VS x64 Developer PowerShell에서 다음을 확인한다. 누락되면 해당 로컬 설치 경로를 설정한
@@ -33,7 +33,13 @@ foreach ($root_name in $required_roots) {
``` ```
위 확인은 환경변수 방식의 준비 절차다. `Fesa.Local.props`를 사용하는 경우에는 그 파일의 위 확인은 환경변수 방식의 준비 절차다. `Fesa.Local.props`를 사용하는 경우에는 그 파일의
동일 MSBuild property 값을 확인한다. CMake는 `Fesa.Local.props`를 읽지 않는다. 동일 MSBuild property 값을 확인한다. CMake는 `Fesa.Local.props`를 읽지 않으며,
HDF5용 `libmmd.dll`을 찾을 때 `FESA_OMP_ROOT` 환경변수를 사용한다.
MKL은 ILP64·dynamic·TBB threading으로 연결한다. Debug는 `mkl_tbb_threadd`와
`tbb12_debug.dll`, Release는 `mkl_tbb_thread`와 `tbb12.dll`을 사용한다. CLI와 세
테스트 실행 파일 곁에 같은 구성의 DLL을 준비한다. MKL용 `mkl_intel_thread`와
`libiomp5md.dll`은 연결·복사하지 않으며 HDF5의 `libmmd.dll`은 별도로 유지한다.
## 주 개발 빌드와 직접 검사 ## 주 개발 빌드와 직접 검사
+3 -1
View File
@@ -51,9 +51,11 @@ Configure/build/test의 compiler·구성·build tree를 함께 맞추고 discove
직접 관리하는 [FESA.sln](../../FESA.sln)과 [msvc 지침](../../msvc/AGENTS.md)이 주 개발 빌드다. 직접 관리하는 [FESA.sln](../../FESA.sln)과 [msvc 지침](../../msvc/AGENTS.md)이 주 개발 빌드다.
VS x64 개발 환경에서 저장소 root를 작업 디렉터리로 사용한다. v145 toolset과 로컬 VS x64 개발 환경에서 저장소 root를 작업 디렉터리로 사용한다. v145 toolset과 로컬
GoogleTest source checkout, MKL ILP64/dynamic/Intel threading·TBB·HDF5·OpenMP가 필요하다. GoogleTest source checkout, MKL ILP64/dynamic/TBB threading·oneTBB·HDF5와
HDF5용 Intel 수학 runtime(`libmmd.dll`)이 필요하다.
`FESA_GTEST_SOURCE_DIR`, `FESA_MKL_ROOT`, `FESA_TBB_ROOT`, `FESA_HDF5_ROOT`, `FESA_GTEST_SOURCE_DIR`, `FESA_MKL_ROOT`, `FESA_TBB_ROOT`, `FESA_HDF5_ROOT`,
`FESA_OMP_ROOT`에 설치 root를 지정하거나 ignored `msvc/Fesa.Local.props`로 주입한다. `FESA_OMP_ROOT`에 설치 root를 지정하거나 ignored `msvc/Fesa.Local.props`로 주입한다.
`FESA_OMP_ROOT`는 기존 변수명을 유지하며 현재 HDF5의 `libmmd.dll` 준비에 사용한다.
개인 설치 경로를 추적 파일에 고정하거나 dependency를 자동 다운로드하지 않는다. 개인 설치 경로를 추적 파일에 고정하거나 dependency를 자동 다운로드하지 않는다.
```bat ```bat