1 /*
2 * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 #pragma once
27 #include <iostream>
28 struct BasicConfig {
29 // These must sync with hat/backend/ffi/Mode.java
30 // Bits 0-3 select platform id 0..5
31 // Bits 4-7 select device id 0..15
32 static constexpr int START_BIT_IDX = 16;
33 static constexpr int MINIMIZE_COPIES_BIT = 1 << START_BIT_IDX;
34 static constexpr int TRACE_BIT = 1 << 17;
35 static constexpr int PROFILE_BIT = 1 << 18;
36 static constexpr int SHOW_CODE_BIT = 1 << 19;
37 static constexpr int SHOW_KERNEL_MODEL_BIT = 1 << 20;
38 static constexpr int SHOW_COMPUTE_MODEL_BIT = 1 << 21;
39 static constexpr int INFO_BIT = 1 << 22;
40 static constexpr int TRACE_COPIES_BIT = 1 << 23;
41 static constexpr int TRACE_SKIPPED_COPIES_BIT = 1 << 24;
42 static constexpr int TRACE_ENQUEUES_BIT = 1 << 25;
43 static constexpr int TRACE_CALLS_BIT = 1 << 26;
44 static constexpr int SHOW_WHY_BIT = 1 << 27;
45 static constexpr int SHOW_STATE_BIT = 1 << 28;
46 static constexpr int PTX_BIT = 1 << 29;
47 static constexpr int INTERPRET_BIT = 1 << 30;
48 static constexpr int END_BIT_IDX = 31;
49
50 const static char *bitNames[]; // See below for out of line definition
51 int configBits;
52 bool minimizeCopies;
53 bool alwaysCopy;
54 bool trace;
55 bool profile;
56 bool showCode;
57 bool info;
58 bool traceCopies;
59 bool traceSkippedCopies;
60 bool traceEnqueues;
61 bool traceCalls;
62 bool showWhy;
63 bool showState;
64 bool ptx;
65 bool interpret;
66 int platform; //0..15
67 int device; //0..15
68 explicit BasicConfig(int configBits):
69 configBits(configBits),
70 minimizeCopies((configBits & MINIMIZE_COPIES_BIT) == MINIMIZE_COPIES_BIT),
71 alwaysCopy(!minimizeCopies),
72 trace((configBits & TRACE_BIT) == TRACE_BIT),
73 traceCopies((configBits & TRACE_COPIES_BIT) == TRACE_COPIES_BIT),
74 traceEnqueues((configBits & TRACE_ENQUEUES_BIT) == TRACE_ENQUEUES_BIT),
75 traceCalls((configBits & TRACE_CALLS_BIT) == TRACE_CALLS_BIT),
76 traceSkippedCopies((configBits & TRACE_SKIPPED_COPIES_BIT) == TRACE_SKIPPED_COPIES_BIT),
77 info((configBits & INFO_BIT) == INFO_BIT),
78 showCode((configBits & SHOW_CODE_BIT) == SHOW_CODE_BIT),
79 profile((configBits & PROFILE_BIT) == PROFILE_BIT),
80 showWhy((configBits & SHOW_WHY_BIT) == SHOW_WHY_BIT),
81 showState((configBits & SHOW_STATE_BIT) == SHOW_STATE_BIT),
82 ptx((configBits & PTX_BIT) == PTX_BIT),
83 interpret((configBits & INTERPRET_BIT) == INTERPRET_BIT),
84 platform(configBits & 0xf),
85 device((configBits & 0xf0) >> 4) {
86 if (info) {
87 std::cout << "native showCode " << showCode << std::endl;
88 std::cout << "native info " << info << std::endl;
89 std::cout << "native minimizeCopies " << minimizeCopies << std::endl;
90 std::cout << "native alwaysCopy " << alwaysCopy << std::endl;
91 std::cout << "native trace " << trace << std::endl;
92 std::cout << "native traceSkippedCopies " << traceSkippedCopies << std::endl;
93 std::cout << "native traceCalls " << traceCalls << std::endl;
94 std::cout << "native traceCopies " << traceCopies << std::endl;
95 std::cout << "native traceEnqueues " << traceEnqueues << std::endl;
96 std::cout << "native profile " << profile << std::endl;
97 std::cout << "native showWhy " << showWhy << std::endl;
98 std::cout << "native showState " << showState << std::endl;
99 std::cout << "native ptx " << ptx << std::endl;
100 std::cout << "native interpret " << interpret << std::endl;
101 std::cout << "native platform " << platform << std::endl;
102 std::cout << "native device " << device << std::endl;
103 }
104 }
105
106 virtual ~BasicConfig()= default;
107 };
108
109 #ifdef shared_cpp
110 const char *BasicConfig::bitNames[] = {
111 "MINIMIZE_COPIES",
112 "TRACE",
113 "PROFILE",
114 "SHOW_CODE",
115 "SHOW_KERNEL_MODEL",
116 "SHOW_COMPUTE_MODEL",
117 "INFO",
118 "TRACE_COPIES",
119 "TRACE_SKIPPED_COPIES",
120 "TRACE_ENQUEUES",
121 "TRACE_CALLS",
122 "SHOW_WHY_BIT",
123 "USE_STATE_BIT",
124 "SHOW_STATE_BIT"
125 };
126 #endif