Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
name = "NVTX"
uuid = "5da4648a-3479-48b8-97b9-01cb529c0a1f"
version = "1.0.3"
authors = ["Simon Byrne <simonbyrne@gmail.com>"]
version = "1.0.3"

[deps]
CEnum = "fa961155-64e5-5f13-b03f-caf6b980ea82"
JuliaNVTXCallbacks_jll = "9c1d0b0a-7046-5b2e-a33f-ea22f176ac7e"
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
NVTX_jll = "e98f9f5b-d649-5603-91fd-7774390e6439"

[extensions]
NVTXColorsExt = "Colors"

[weakdeps]
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"

[extensions]
NVTXColorsExt = "Colors"

[compat]
CEnum = "0.5.0"
Colors = "0.12, 0.13"
JuliaNVTXCallbacks_jll = "0.2"
NVTX_jll = "3.1.1"
Expand Down
74 changes: 56 additions & 18 deletions src/api.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using CEnum

"""
initialize()
Expand Down Expand Up @@ -76,36 +77,60 @@ function init!(sh::StringHandle)
return sh
end

@cenum nvtxColorType_t::Int32 begin
NVTX_COLOR_UNKNOWN = 0
NVTX_COLOR_ARGB = 1
end

@cenum nvtxMessageType_t::Int32 begin
NVTX_MESSAGE_UNKNOWN = 0
NVTX_MESSAGE_TYPE_ASCII = 1
NVTX_MESSAGE_TYPE_UNICODE = 2
#= NVTX_VERSION_2 =#
NVTX_MESSAGE_TYPE_REGISTERED = 3
end

@cenum nvtxPayloadType_t::Int32 begin
NVTX_PAYLOAD_UNKNOWN = 0
NVTX_PAYLOAD_TYPE_UNSIGNED_INT64 = 1
NVTX_PAYLOAD_TYPE_INT64 = 2
NVTX_PAYLOAD_TYPE_DOUBLE = 3
#= NVTX_VERSION_2 =#
NVTX_PAYLOAD_TYPE_UNSIGNED_INT32 = 4
NVTX_PAYLOAD_TYPE_INT32 = 5
NVTX_PAYLOAD_TYPE_FLOAT = 6
end

struct EventAttributes
version::UInt16
size::UInt16
category::UInt32
colortype::Int32
colortype::nvtxColorType_t
color::UInt32
payloadtype::Int32
payloadtype::nvtxPayloadType_t
reserved0::Int32
payload::UInt64
messagetype::Int32
messagetype::nvtxMessageType_t
message::Ptr{Cvoid}
end

payloadtype(::Nothing) = 0
payloadtype(::UInt64) = 1
payloadtype(::Int64) = 2
payloadtype(::Float64) = 3
payloadtype(::UInt32) = 4
payloadtype(::Int32) = 5
payloadtype(::Float32) = 6
payloadtype(::Nothing) = NVTX_PAYLOAD_UNKNOWN
payloadtype(::UInt64) = NVTX_PAYLOAD_TYPE_UNSIGNED_INT64
payloadtype(::Int64) = NVTX_PAYLOAD_TYPE_INT64
payloadtype(::Float64) = NVTX_PAYLOAD_TYPE_DOUBLE
payloadtype(::UInt32) = NVTX_PAYLOAD_TYPE_UNSIGNED_INT32
payloadtype(::Int32) = NVTX_PAYLOAD_TYPE_INT32
payloadtype(::Float32) = NVTX_PAYLOAD_TYPE_FLOAT
payloadtype(_) = error("Unsupported payload type")

payloadval(::Nothing) = UInt64(0)
payloadval(payload::UInt64) = payload
payloadval(payload::Int64) = reinterpret(UInt64,payload)
payloadval(payload::Float64) = reinterpret(UInt64,payload)
payloadval(payload::Int64) = reinterpret(UInt64, payload)
payloadval(payload::Float64) = reinterpret(UInt64, payload)
# assumes little-endian
payloadval(payload::UInt32) = UInt64(payload)
payloadval(payload::Int32) = UInt64(reinterpret(UInt32,payload))
payloadval(payload::Float32) = UInt64(reinterpret(UInt32,payload))
payloadval(payload::Int32) = UInt64(reinterpret(UInt32, payload))
payloadval(payload::Float32) = UInt64(reinterpret(UInt32, payload))

# This is extended in the Colors extension for Colorant support
_normalize_color(x) = x
Expand All @@ -121,19 +146,32 @@ function event_attributes(;
if message isa AbstractString
message = Base.cconvert(Cstring, message)
end
# This will be GC.preserved by the caller
msgref = message

if isnothing(message)
message_type = NVTX_MESSAGE_UNKNOWN
message = C_NULL
elseif message isa StringHandle
message_type = NVTX_MESSAGE_TYPE_REGISTERED
message = message.ptr
else
message_type = NVTX_MESSAGE_TYPE_ASCII
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we pass Unicode?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems fine to pass utf8, but not sure if it's officially supported

message = Base.unsafe_convert(Cstring, message)
end

EventAttributes(
3, # version
sizeof(EventAttributes), # size
something(category, 0), # category
isnothing(color) ? 0 : 1, # colortype (1 = ARGB)
isnothing(color) ? NVTX_COLOR_UNKNOWN : NVTX_COLOR_ARGB,
something(color, 0), # color
payloadtype(payload), # payloadtype
0, # reserved0
payloadval(payload), # payload
isnothing(message) ? 0 : message isa StringHandle ? 3 : 1, # messagetype
isnothing(message) ? C_NULL : message isa StringHandle ? message.ptr : Base.unsafe_convert(Cstring, message), # message
), message
message_type, # messagetype
message, # message
), msgref
end

"""
Expand Down
Loading