NVIDIA Management Library (NVML) is a powerful tool that can help to gather information about GPU utilization, temperatures, power consumption, and much more. CMake can be used to configure and generate build scripts for building NVML applications. This tutorial provides the steps to set up a NVML C++ program using CMake.
Prepare environment
Before starting, it's essential to ensure that you have CUDA installed on the system. It's worth noting that NVML comes bundled with CUDA. Additionally, make certain that you have CMake and a C++ compiler (g++ or Visual C++) installed on the system. These tools are essential prerequisites for the tasks ahead.
Build NVML C++ program
- Step 1: Create a new C++ project
Create a new directory for the NVML C++ project. For instance, let's call it test_nvml
for a basic project that counts the number of NVIDIA GPU devices in the system. After creating the directory, go to it.
mkdir test_nvml && cd test_nvml
- Step 2: Create CMakeLists.txt file
Within the project directory, establish a CMakeLists.txt
file. This file will house the directives for CMake to configure and produce the necessary build scripts.
cmake_minimum_required(VERSION 3.26)
project(myapp)
set(CMAKE_CXX_STANDARD 17)
find_package(CUDAToolkit REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} CUDA::nvml)
The find_package
command instructs CMake to find and include the CUDA Toolkit as a required dependency for the project. The REQUIRED
keyword ensures that if CUDAToolkit
is not found on the system, CMake will terminate the configuration process with an error.
The add_executable
command defines the source files that will be compiled to generate an executable program.
The target_link_libraries
command instructs CMake to link the executable with the NVML library from the CUDA Toolkit. CUDA::nvml
is a CMake target that represents the NVML library, and by linking it, the program gains access to NVML functionality.
- Step 3: Create source file
In the project directory, create a source file named main.cpp
.
#include <iostream>
#include <nvml.h>
int main()
{
nvmlInit();
uint32_t deviceCount;
nvmlDeviceGetCount(&deviceCount);
std::cout << deviceCount << std::endl;
nvmlShutdown();
return 0;
}
The code uses the nvmlDeviceGetCount
function to retrieve the number of available NVIDIA GPU devices in the system and prints it to the console.
- Step 4: Configure the project with CMake
In the project directory, execute the following CMake command to configure the project and generate the necessary build scripts.
cmake -S . -B build
The -S
option specifies the source directory where the CMakeLists.txt
file is located. The .
(dot) indicates the current directory.
The -B
option specifies the build directory where CMake will generate build files. In this case, the build
directory will be created.
- Step 5: Build the project with CMake
Execute the following CMake command to start the project's build process.
cmake --build build
The --build
option means that CMake is instructed to execute a build operation in the specified directory, which, in this instance, is the build
directory.
- Step 6: Run the program
Upon successful completion of the project build, you can execute the program in the following manner:
./build/myapp
The output might look like this:
1
Leave a Comment
Cancel reply