4 use,
intrinsic :: iso_c_binding, only : c_int16_t, c_int32_t, c_int64_t, &
5 c_int, c_ptr, c_char, c_loc, c_null_char
10 integer,
parameter ::
color(24) = &
11 [int(z
'00A6CEE3'), int(z
'001F78B4'), &
12 int(z
'00B2DF8A'), int(z
'0033A02C'), &
13 int(z
'00FB9A99'), int(z
'00E31A1C'), &
14 int(z
'00FDBF6F'), int(z
'00FF7F00'), &
15 int(z
'00CAB2D6'), int(z
'006A3D9A'), &
16 int(z
'00FFFF99'), int(z
'00B15928'), &
17 int(z
'008DD3C7'), int(z
'00FFFFB3'), &
18 int(z
'00BEBADA'), int(z
'00FB8072'), &
19 int(z
'0080B1D3'), int(z
'00FDB462'), &
20 int(z
'00B3DE69'), int(z
'00FCCDE5'), &
21 int(z
'00D9D9D9'), int(z
'00BC89BD'), &
22 int(z
'00CCEBC5'), int(z
'00FFED6F')]
26 type,
bind(c) :: nvtxeventattributes
27 integer(c_int16_t) :: version = 1
28 integer(c_int16_t) :: size = 48
29 integer(c_int32_t) :: category = 0
30 integer(c_int32_t) :: colortype = 1
31 integer(c_int32_t) ::
color
32 integer(c_int32_t) :: payloadtype = 0
33 integer(c_int32_t) :: reserved0
34 integer(c_int64_t) :: payload
35 integer(c_int) :: messagetype = 1
36 type(c_ptr) :: message
37 end type nvtxeventattributes
39 interface nvtxrangepusha
40 subroutine nvtxrangepusha(name) bind(C, name = 'nvtxRangePushA')
41 use,
intrinsic :: iso_c_binding
42 character(kind=c_char) :: name(256)
43 end subroutine nvtxrangepusha
44 end interface nvtxrangepusha
46 interface nvtxrangepushex
47 subroutine nvtxrangepushex(event) bind(C, name = 'nvtxRangePushEx')
48 use,
intrinsic :: iso_c_binding
49 import :: nvtxeventattributes
50 type(nvtxeventattributes) :: event
51 end subroutine nvtxrangepushex
52 end interface nvtxrangepushex
54 interface nvtxrangepop
55 subroutine nvtxrangepop() bind(C, name = 'nvtxRangePop')
56 end subroutine nvtxrangepop
57 end interface nvtxrangepop
59 public :: nvtxstartrange, nvtxrangepusha, nvtxrangepop
63 subroutine nvtxstartrange(name, region_id)
64 character(kind=c_char, len=*) :: name
65 integer,
optional :: region_id
66 type(nvtxeventattributes) :: event
70 str_len = len(trim(name))
71 do i = 1, len(trim(name))
74 c_name(str_len+1) = c_null_char
76 if (
present(region_id))
then
77 event%color =
color(mod(region_id, 24) + 1)
78 event%message = c_loc(c_name)
79 call nvtxrangepushex(event)
81 call nvtxrangepusha(c_name)
84 end subroutine nvtxstartrange
Interface to NVTX Based on https://github.com/maxcuda/NVTX_example.
integer, parameter nvtx_max_len
integer, dimension(24), parameter color