Page MenuHomePhabricator

[OpenMP][Tool] Introducing the `llvm-omp-device-info` tool
ClosedPublic

Authored by josemonsalve2 on Jul 24 2021, 10:58 AM.

Details

Summary

This patch introduces the llvm-omp-device-info tool, which uses the
omptarget library and interface to query the device info from all the
available devices as seen by OpenMP. This is inspired by PGI's pgaccelinfo

Since omptarget usually requires a description structure with executable
kernels, I split the initialization of the RTLs and Devices to be able to
initialize all possible devices and query each of them.

This revision relies on the patch that introduces the print device info.

A limitation is that the order in which the devices are initialized, and the
corresponding device ID is not necesarily the one seen by OpenMP.

The changes are as follows:

  1. Separate the RTL initialization that was performed in RegisterLib to its own initRTLonce function
  2. Create an initAllRTLs method that initializes all available RTLs at runtime
  3. Created the llvm-deviceinfo.cpp tool that uses omptarget to query each device and prints its information.

Example Output:

Device (0):
    print_device_info not implemented

Device (1):
    print_device_info not implemented

Device (2):
    print_device_info not implemented

Device (3):
    print_device_info not implemented

Device (4):
    CUDA Driver Version:                11000
    CUDA Device Number:                 0
    Device Name:                        Quadro P1000
    Global Memory Size:                 4236312576 bytes
    Number of Multiprocessors:          5
    Concurrent Copy and Execution:      Yes
    Total Constant Memory:              65536 bytes
    Max Shared Memory per Block:        49152 bytes
    Registers per Block:                65536
    Warp Size:                          32 Threads
    Maximum Threads per Block:          1024
    Maximum Block Dimensions:           1024, 1024, 64
    Maximum Grid Dimensions:            2147483647 x 65535 x 65535
    Maximum Memory Pitch:               2147483647 bytes
    Texture Alignment:                  512 bytes
    Clock Rate:                         1480500 kHz
    Execution Timeout:                  Yes
    Integrated Device:                  No
    Can Map Host Memory:                Yes
    Compute Mode:                       DEFAULT
    Concurrent Kernels:                 Yes
    ECC Enabled:                        No
    Memory Clock Rate:                  2505000 kHz
    Memory Bus Width:                   128 bits
    L2 Cache Size:                      1048576 bytes
    Max Threads Per SMP:                2048
    Async Engines:                      Yes (2)
    Unified Addressing:                 Yes
    Managed Memory:                     Yes
    Concurrent Managed Memory:          Yes
    Preemption Supported:               Yes
    Cooperative Launch:                 Yes
    Multi-Device Boars:                 No
    Compute Capabilities:               61

Diff Detail

Event Timeline

josemonsalve2 created this revision.Jul 24 2021, 10:58 AM
josemonsalve2 requested review of this revision.Jul 24 2021, 10:58 AM
Herald added a project: Restricted Project. · View Herald Transcript

Can we rename it to llvm-omp-deviceinfo everywhere please.

This looks reasonable to me, some nits. @tianshilei1992 @JonChesterfield comments?

openmp/libomptarget/tools/CMakeLists.txt
2

llvm license header, also other files.

openmp/libomptarget/tools/deviceinfo/llvm-deviceinfo.cpp
15 ↗(On Diff #361471)

Can we rename it to llvm-omp-deviceinfo everywhere please.

Since we already have -, what about llvm-omp-device-info? deviceinfo looks really odd.

This looks reasonable to me, some nits. @tianshilei1992 @JonChesterfield comments?

Generally LGTM.

openmp/libomptarget/src/rtl.cpp
320–324
332
openmp/libomptarget/tools/deviceinfo/llvm-deviceinfo.cpp
15 ↗(On Diff #361471)

It's a C++ file. No reason to use stdio.h instead of C++ header.

I thought about the -omp- in the name too. But I remembered that the ACC folks wanted to use the same runtime. I like both llvm-omp-device-info and llvm-omp-deviceinfo. Or we could drop the llvm- as they do in mlir- tools

I thought about the -omp- in the name too. But I remembered that the ACC folks wanted to use the same runtime. I like both llvm-omp-device-info and llvm-omp-deviceinfo. Or we could drop the llvm- as they do in mlir- tools

llvm-omp-device-info

jdoerfert added inline comments.Jul 25 2021, 10:03 AM
openmp/libomptarget/tools/deviceinfo/llvm-deviceinfo.cpp
15 ↗(On Diff #361471)

cstdio then. Why include iostream which will eventually include cstdio which will include stdio.h just for printf. There is a lot that can go wrong with streams if the setup is not proper and there is no reason I can think of to go down that road for printf. C standard libary headers are compatible with C++.

openmp/libomptarget/tools/deviceinfo/llvm-deviceinfo.cpp
15 ↗(On Diff #361471)

+1 for avoiding iostream. Don't have strong preferences for stdio.h vs cstdio.

Changing name and adding cstdio instead of iostream. Adding license headers. Other minor changes

tianshilei1992 accepted this revision.Jul 26 2021, 6:27 PM

LGTM with some nits.

openmp/libomptarget/plugins/cuda/CMakeLists.txt
66 ↗(On Diff #361878)

what is this for? Do we have to do similar thing for AMDGCN? If no, why is it here?

openmp/libomptarget/tools/CMakeLists.txt
14

^^^ here

openmp/libomptarget/tools/deviceinfo/CMakeLists.txt
17–30
openmp/libomptarget/tools/deviceinfo/llvm-omp-device-info.cpp
25–27
This revision is now accepted and ready to land.Jul 26 2021, 6:27 PM

adjust commit message in phab wrt. tool name please.

josemonsalve2 retitled this revision from [OpenMP][Tool] Introducing the `llvm-deviceinfo` tool to [OpenMP][Tool] Introducing the `llvm-omp-device-info` tool.Jul 27 2021, 6:20 AM
josemonsalve2 edited the summary of this revision. (Show Details)
josemonsalve2 added inline comments.Jul 27 2021, 8:19 AM
openmp/libomptarget/plugins/cuda/CMakeLists.txt
66 ↗(On Diff #361878)

I originally had it because I was getting some linking errors, but I just tried it and it is not really necessary, apparently.

josemonsalve2 marked 5 inline comments as done.Jul 27 2021, 8:22 AM

Rebase to main

Removing branch dependency

This revision was landed with ongoing or failed builds.Jul 27 2021, 7:38 PM
This revision was automatically updated to reflect the committed changes.