-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add documentation on the "Building MFEM" page for cmake install #291
base: master
Are you sure you want to change the base?
Conversation
Based on information provided in the INSTALL file and CMake documentation Followed the directory structure in the Makefile based tutorial
cmake .. -DMFEM_USE_CUDA=YES | ||
``` | ||
Note that this requires CMake 3.8 or newer | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To specify what CUDA architecture to target: | |
```sh | |
cmake .. -DCUDA_ARCH="sm_70" | |
``` | |
The CUDA architecture is formatted as `sm_{CC}`, where CC is the GPU compute capability of the target GPU without the decimal point. A list of Nvidia GPU compute capabilities can be found in [the Nividia developers documentation](https://developer.nvidia.com/cuda-gpus). |
TODO: currently I think MFEM's CMake setup doesn't allow targeting multiple CUDA architectures at once. I think we should fix this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is a CMake 3.18 target property CUDA_ARCHITECTURES
that allows semicolon separated lists https://cmake.org/cmake/help/latest/prop_tgt/CUDA_ARCHITECTURES.html
Right now it looks like mfem manually sets the -arch
flag. From the nvcc compiler documentation it seems like it might take comma separated lists if the format is the same as the --gpu-code
flag. I don't have access to cuda enabled machines to try this out right now.
The all
, all-major
, and native
options for the architecture may be worth mentioning.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I expanded support for all
, all-major
, and native
as well as multiple specific cuda architectures in this PR: pr4561.
Supported formats now include:
-DCUDA_ARCH="all"
-DCUDA_ARCH="all-major"
-DCUDA_ARCH="native"
-DCUDA_ARCH="{ARCH1},{ARCH2},..."
-DCUDA_ARCH="{ARCH1};{ARCH2};..."
where ARCHN can be either just the CC number (70
, 86
, etc.), or optionally prefixed with sm_
(sm_70
, sm_86
, etc.).
This should work even for CMake older than 3.18 (the current CMakeLists minimum version is 3.8).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks great, added some documentation for this!
Co-authored-by: Andrew Ho <[email protected]>
@@ -239,3 +239,99 @@ git clone https://github.com/spack/spack.git | |||
cd spack | |||
./bin/spack install -v mfem | |||
``` | |||
|
|||
## Building MFEM with CMake | |||
To build a serial form of MFEM with CMake first create a build directory. For example, using a build directory named `build`: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/form/version
cmake --build . -j 4 | ||
``` | ||
### Parallel build using CMake | ||
To build a parallel form of MFEM with CMake first build METIS and Hypre as described above. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/form/version
To build a parallel form of MFEM with CMake first build METIS and Hypre as described above. | ||
From the MFEM source directory, create a build directory. For example, using a build directory named `build`: | ||
```sh | ||
cd mfem-4.5 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
don't add versions to general instructions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was something I had a question about while writing this, the Makefile section of these instructions assume mfem-4.5
, should I stick to that convention or use "MFEM_DIR", and should the Makefile instructions do the same?
``` | ||
|
||
Run the CMake configuration on the MFEM source directory using the `MFEM_USE_MPI` CMake variable to enable MPI. | ||
This will automatically search for the system MPI implementation, the METIS installation (in `<mfem-source-dir>/../metis-4.0`), and Hypre installation (in `<mfem-source-dir/../hypre`). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same
cmake --build . -j 4 | ||
``` | ||
|
||
### Alternate configuration steps |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/Alternate/Alternative
or "Advanced"?
Based on information provided in the INSTALL file and CMake documentation.
Followed the directory structure in the Makefile based tutorial
Closes issue #290