Skip to content

Instantly share code, notes, and snippets.

@jhurliman
Created February 8, 2021 21:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jhurliman/e4cc8dd2dd9d214c3fd8508e6cced711 to your computer and use it in GitHub Desktop.
Save jhurliman/e4cc8dd2dd9d214c3fd8508e6cced711 to your computer and use it in GitHub Desktop.
RAII wrapper for NVIDIA nvtxRangePush/nvtxRangePop
#pragma once
#include <nvToolsExt.h>
#include <string>
struct NvtxRange {
NvtxRange() = delete;
explicit NvtxRange(const std::string_view name) { nvtxRangePush(name.data()); }
NvtxRange(const std::string_view name, uint64_t value) {
nvtxEventAttributes_t ev{};
ev.version = NVTX_VERSION;
ev.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
ev.payloadType = NVTX_PAYLOAD_TYPE_UNSIGNED_INT64;
ev.payload.ullValue = value;
ev.messageType = NVTX_MESSAGE_TYPE_ASCII;
ev.message.ascii = name.data();
nvtxRangePushEx(&ev);
}
NvtxRange(const std::string_view name, int64_t value) {
nvtxEventAttributes_t ev{};
ev.version = NVTX_VERSION;
ev.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
ev.payloadType = NVTX_PAYLOAD_TYPE_INT64;
ev.payload.llValue = value;
ev.messageType = NVTX_MESSAGE_TYPE_ASCII;
ev.message.ascii = name.data();
nvtxRangePushEx(&ev);
}
NvtxRange(const std::string_view name, double value) {
nvtxEventAttributes_t ev{};
ev.version = NVTX_VERSION;
ev.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
ev.payloadType = NVTX_PAYLOAD_TYPE_DOUBLE;
ev.payload.dValue = value;
ev.messageType = NVTX_MESSAGE_TYPE_ASCII;
ev.message.ascii = name.data();
nvtxRangePushEx(&ev);
}
~NvtxRange() { nvtxRangePop(); }
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment