add uncommitted files
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# Step 1: TBB Element Evaluation
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/AGENTS.md`
|
||||
- `/docs/PRD.md`
|
||||
- `/docs/ARCHITECTURE.md`
|
||||
- `/docs/ADR.md`
|
||||
- `/cmake/FesaDependencies.cmake`
|
||||
- `/include/fesa/assembly/assembler.hpp`
|
||||
- `/include/fesa/assembly/contribution.hpp`
|
||||
- `/include/fesa/elements/beam/beam3d2.hpp`
|
||||
|
||||
## 작업
|
||||
|
||||
oneTBB로 독립적인 요소 계산만 병렬화하고 contribution merge는 canonical serial
|
||||
순서를 사용한다.
|
||||
|
||||
```cpp
|
||||
struct AssemblyOptions final {
|
||||
std::size_t max_threads;
|
||||
std::size_t grain_size;
|
||||
};
|
||||
[[nodiscard]] EquationSystem assemble_parallel(
|
||||
const Domain&,
|
||||
const DofManager&,
|
||||
AssemblyOptions);
|
||||
```
|
||||
|
||||
- fixed Beam chain/branched Domain에서 serial과 parallel의 row offsets, column indices,
|
||||
values, force vector를 bit-for-bit 비교하는 실패 테스트를 먼저 작성한다.
|
||||
- worker는 thread-local contribution을 생성하고 공유 CSR values에 쓰지 않는다.
|
||||
- `max_threads=1`과 2 이상을 명시적으로 제한할 수 있어야 한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
cmake --build --preset windows-debug
|
||||
ctest --preset windows-debug -R "ParallelAssembly|TbbElementEvaluation" --output-on-failure
|
||||
ctest --preset windows-debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 절차
|
||||
|
||||
1. parallel API 부재로 실패하는 테스트를 확인한다.
|
||||
2. element evaluation 범위에만 TBB를 적용한다.
|
||||
3. serial/parallel bitwise 결과와 TSAN 대신 구조적 race 회피 설계를 검토한다.
|
||||
4. 전체 테스트와 index를 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- 공유 CSR value에 atomic add하지 마라. 이유: 합산 순서가 비결정적이다.
|
||||
- PARDISO 호출을 TBB task 안에 넣지 마라. 이유: oversubscription 위험이 있다.
|
||||
- 성능을 위해 tolerance를 완화하지 마라. 이유: 검증 결정성이 우선이다.
|
||||
Reference in New Issue
Block a user