Neko 1.99.2
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
nvtx.F90
Go to the documentation of this file.
1
3module nvtx
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
6 implicit none
7 private
8
9 integer, parameter :: nvtx_max_len = 256
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')]
23
24#ifdef HAVE_NVTX
25
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
38
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
45
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
53
54 interface nvtxrangepop
55 subroutine nvtxrangepop() bind(C, name = 'nvtxRangePop')
56 end subroutine nvtxrangepop
57 end interface nvtxrangepop
58
59 public :: nvtxstartrange, nvtxrangepusha, nvtxrangepop
60
61contains
62
63 subroutine nvtxstartrange(name, region_id)
64 character(kind=c_char, len=*) :: name
65 integer, optional :: region_id
66 type(nvtxeventattributes) :: event
67 character, target :: c_name(nvtx_max_len)
68 integer :: i, str_len
69
70 str_len = len(trim(name))
71 do i = 1, len(trim(name))
72 c_name(i) = name(i:i)
73 end do
74 c_name(str_len+1) = c_null_char
75
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)
80 else
81 call nvtxrangepusha(c_name)
82 end if
83
84 end subroutine nvtxstartrange
85
86#endif
87end module nvtx
Interface to NVTX Based on https://github.com/maxcuda/NVTX_example.
Definition nvtx.F90:3
integer, parameter nvtx_max_len
Definition nvtx.F90:9
integer, dimension(24), parameter color
Definition nvtx.F90:10