Files
SNPLIB/GEMINI.md

43 lines
2.3 KiB
Markdown

# Project: SNPLIB
## 1. Overview
This project (SNPLIB) is a high-performance computing library for Quantitative Genetics developed in C++. The core objective of the project is to leverage modern C++ features and achieve extreme numerical computation performance through optimized math libraries (such as Intel MKL or OpenBLAS).
This project uses CMake for cross-platform build management and strictly adheres to the Google C++ Coding Style.
## 2. Core Tech Stack & Standards
### 2.1 Programming Language
* **C++**: The project will use C++ (C++17 or higher recommended) as the primary development language.
### 2.2 Build System
* **CMake**: This project uses CMake (version 3.15 or higher recommended) as the sole cross-platform build system.
* `CMakeLists.txt` files are responsible for managing all compilation targets, dependency linking, and platform-specific configurations.
### 2.3 Performance & Dependencies
* **BLAS/LAPACK Acceleration**: To achieve high-performance matrix and vector operations, this project relies on the BLAS and LAPACK interfaces.
* **Supported Libraries**:
* **Intel MKL (Math Kernel Library)**: The preferred high-performance library, especially on Intel architectures.
* **OpenBLAS**: A high-performance open-source alternative for BLAS/LAPACK with excellent cross-platform compatibility.
* The CMake configuration will provide options (e.g., `USE_MKL=ON` or `USE_OPENBLAS=ON`) to allow users to select the math library to link against at compile time.
### 2.4 Coding Style
* **Google C++ Coding Style**: This project strictly adheres to the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).
* **Formatting**: All C++ code submitted must be formatted using `clang-format` (based on the Google style).
* **Linting**: Using `clang-tidy` is recommended to ensure code quality and style consistency.
## 3. Environment Setup
Before starting the build, you must ensure the following dependencies are installed on your system:
1. **C++ Compiler** (e.g., GCC, Clang, MSVC)
2. **CMake** (version >= 3.15)
3. **Intel MKL** or **OpenBLAS**
* For Intel MKL, ensure the `MKLROOT` environment variable is set, or point to its installation path via the CMake `CMAKE_PREFIX_PATH`.
* For OpenBLAS, ensure CMake can find it via `find_package(OpenBLAS)`.