https://github.com/nariaki3551/cmapdeepbkz
A DeepBKZ parallel solver for shortest vector problem
https://github.com/nariaki3551/cmapdeepbkz
deepbkz distributed lattice mpi parallel svp
Last synced: 10 months ago
JSON representation
A DeepBKZ parallel solver for shortest vector problem
- Host: GitHub
- URL: https://github.com/nariaki3551/cmapdeepbkz
- Owner: nariaki3551
- Created: 2022-10-14T11:38:31.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-10-08T05:39:36.000Z (over 2 years ago)
- Last Synced: 2023-10-08T06:26:25.222Z (over 2 years ago)
- Topics: deepbkz, distributed, lattice, mpi, parallel, svp
- Language: C++
- Homepage:
- Size: 3.49 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# CMAP-DeepBKZ
CMAP-DeepBKZ solver \[[Tat+21b](#ref.cmapdeepbkz)\] that is a configuration for parallelizing lattice-based reduction based on CMAP-LAP \[[Tat+21a](#ref.cmaplap)\]. CMAP-LAP is a C++ & MPI parallel framework for the lattice problems.
These frameworks and solvers are distributed under the LGPL version 3 or later, in accordance with the license of the UG framework. Commercial licenses are available through .
In addition, some programs independent of the UG framework are distributed under the MIT License.
# Table of contents
- [CMAP-DeepBKZ](#cmap-deepbkz)
- [Table of contents](#table-of-contents)
- [Setup](#setup)
- [Compiling](#compiling)
- [Usage](#usage)
- [Bibliography](#bibliography)
# Setup
We provide Dockerfile for building virtual environments and making binaries. If you do not use docker, you set up third-party libraries using `setup.sh` or install them manually.
## Setup on Docker
If you use docker to set up, you just have to run the following building command. The docker image will be created from ubuntu:20.04. Then you run the docker image.
```
docker build -t cmapdeepbkz .
```
## Setup Manually
If you do not use docker, you have to install third-party libraries as follows.
- CMake (version >= 3.18)
- NTL
- Eigen
- Boost (version == 1.75)
**Note** We have checked our framework and sovlers with CMake(v3.22.2), NTL(v11.5.1), Eigen(v3.4.0) and Boost(v1.75).
The commands to install these libraries are as follows.
```bash
# install cmake (version 3.22.3) if necessary
wget https://github.com/Kitware/CMake/releases/download/v3.22.3/cmake-3.22.3.tar.gz
tar -xf cmake-3.22.3.tar.gz
cd cmake-3.22.3
./bootstrap [--prefix=PREFIX] [--parallel=PARALLEL]
make & make install
# install NTL (version 11.5.1) if necessary
wget https://libntl.org/ntl-11.5.1.tar.gz
tar -xf ntl-11.5.1.tar.gz
cd ntl-11.5.1/src
./configure [PREFIX=PREFIX]
make & make install
# install Eigen (version 3.4.0) if necessary
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz
tar -xf eigen-3.4.0.tar.gz
cd eigen-3.4.0
mkdir build
cd build
cmake .. [-DCMAKE_INSTALL_PREFIX=PREFIX]
make install
# install boost (version 1.75 exact)
wget https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz
tar -xf boost_1_75_0.tar.gz
```
In the case that you install these libraries in your local, it is recommended to create a cmapdeepbkz/usr directory and specify cmapdeepbkz/usr in the PREFIX above.
# Compiling
The binaries will be created in `cmapdeepbkz/bin`.
```bash
mkdir build
cd build
cmake .. (options) -DBOOST_DIR=(boost installed directory)/boost_1_75_0
make
```
When you want to compile using MPI, set `CMAKE_CXX_COMPILER` to mpi compiler, e.g. `cmake .. -DCMAKE_CXX_COMPILER=mpicxx`.
## Created binaries
- `bin/fcmapdeepbkz`: shared memory version of CMAP-DeepBKZ
- `bin/paracmapdeepbkz`: distributed memory version of CMAP-DeepBKZ
## CMake Options
- `-DBOOST_DIR`: (required) directory of boost 1.75
- `-DCMAKE_BUILD_TYPE=Debug`: compile with debug mode
- `-DSHARED_MEMORY_ONLY=ON`: compile only shared-memory version
- `-DCMAKE_CXX_COMPILER=XXX`: use XXX mpi compiler (e.g. mpicxx)
**Note**
If you do not use mpi compiler (e.g. -DCMAKE_CXX_COMPILER=gcc), the build will fail under `SHARED_MEMORY_ONLY` option is OFF, so you have to use the option `-DSHARED_MEMORY_ONLY=ON`.
### Examples
- compile only shared memory version: `cmake .. -DBOOST_DIR=/xxx/boost_1_75_0 -DSHARED_MEMORY_ONLY=ON`
- compile both shared and distributed memory version: `cmake .. -DBOOST_DIR=/xxx/boost_1_75_0 -DCMAKE_CXX_COMPILER=mpicxx`
- compile with debug mode (add -g, and remove -O3): `cmake .. -DBOOST_DIR=/xxx/boost_1_75_0 -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug`
## Check
```sh
python test.py
```
# Usage
This solver is the parallel solver for lattice basis reduction.
All workers execute lattice basis reduction, and a supervisor shares a part of a lattice basis.
## Shared memory version
`./bin/fcmapdeepbkz settingfile matrixfile -sth yy` (e.g. `./bin/fcmapdeepbkz settings/default.set storage/sample_mats/dim80.txt -sth 3`)
matrixfile is the basis file in the same format as the SVP Challenge instance.
**options**
- sth [Int] : the number of solver threads used
## Distributed memory version
`mpirun -np yy ./bin/paracmapdeepbkz settingfile matrixfile` (e.g. `mpirun -np 3 ./bin/paracmapdeepbkz settings/default.set storage/sample_mats/dim80.txt`)
**options**
- np [Int] : the number of solver process + 1
## Sequential version (test for DeepBKZ algorithms)
`./bin/seqcmapdeepbkz -i (instance file) -a exdeepbkz -b (blocksize)` (e.g. `./bin/seqcmapdeepbkz -i ./storage/sample_mats/dim80.txt -a exdeepbkz -b 30`)
# Bibliography
\[Tat+21a\] Nariaki Tateiwa, Yuji Shinano, Keiichiro Yamamura, Akihiro Yoshida, Shizuo Kaji, Masaya Yasuda, and Katsuki Fujisawa. “CMAP-LAP: Configurable massively parallel solver for lattice problems”. In: 2021 IEEE 28th International Conference on High Performance Computing, Data, and Analytics (HiPC). IEEE. 2021, pp. 42–52.
\[Tat+21b\] Nariaki Tateiwa, Yuji Shinano, Masaya Yasuda, Shizuo Kaji, Keiichiro Yamamura, and Katsuki Fujisawa. Massively parallel sharing lattice basis reduction. eng. Tech. rep. 21-38. Takustr. 7, 14195 Berlin: ZIB, 2021.