xref: /aosp_15_r20/external/clpeak/include/common.h (revision 1cd03ba3888297bc945f2c84574e105e3ced3e34)
1*1cd03ba3SJeremy Kemp #ifndef COMMON_H
2*1cd03ba3SJeremy Kemp #define COMMON_H
3*1cd03ba3SJeremy Kemp 
4*1cd03ba3SJeremy Kemp #define CL_HPP_ENABLE_EXCEPTIONS
5*1cd03ba3SJeremy Kemp #define CL_HPP_MINIMUM_OPENCL_VERSION 120
6*1cd03ba3SJeremy Kemp #define CL_HPP_TARGET_OPENCL_VERSION 120
7*1cd03ba3SJeremy Kemp 
8*1cd03ba3SJeremy Kemp #include <CL/opencl.hpp>
9*1cd03ba3SJeremy Kemp 
10*1cd03ba3SJeremy Kemp #if defined(__APPLE__) || defined(__MACOSX) || defined(__FreeBSD__)
11*1cd03ba3SJeremy Kemp #include <sys/types.h>
12*1cd03ba3SJeremy Kemp #endif
13*1cd03ba3SJeremy Kemp 
14*1cd03ba3SJeremy Kemp #include <stdlib.h>
15*1cd03ba3SJeremy Kemp #include <chrono>
16*1cd03ba3SJeremy Kemp #include <string>
17*1cd03ba3SJeremy Kemp #include <cstdint>
18*1cd03ba3SJeremy Kemp #include <algorithm>
19*1cd03ba3SJeremy Kemp 
20*1cd03ba3SJeremy Kemp #define TAB             "  "
21*1cd03ba3SJeremy Kemp #define NEWLINE         "\n"
22*1cd03ba3SJeremy Kemp #ifndef __FreeBSD__
23*1cd03ba3SJeremy Kemp #define uint            unsigned int
24*1cd03ba3SJeremy Kemp #endif
25*1cd03ba3SJeremy Kemp #define ulong           unsigned long
26*1cd03ba3SJeremy Kemp 
27*1cd03ba3SJeremy Kemp #ifdef UNUSED
28*1cd03ba3SJeremy Kemp #undef UNUSED
29*1cd03ba3SJeremy Kemp #endif
30*1cd03ba3SJeremy Kemp #define UNUSED(expr) do { (void)(expr); } while (0)
31*1cd03ba3SJeremy Kemp 
32*1cd03ba3SJeremy Kemp #if defined(__APPLE__) || defined(__MACOSX)
33*1cd03ba3SJeremy Kemp #define OS_NAME         "Macintosh"
34*1cd03ba3SJeremy Kemp #elif defined(__ANDROID__)
35*1cd03ba3SJeremy Kemp #define OS_NAME         "Android"
36*1cd03ba3SJeremy Kemp #elif defined(_WIN32)
37*1cd03ba3SJeremy Kemp   #if defined(_WIN64)
38*1cd03ba3SJeremy Kemp   #define OS_NAME     "Win64"
39*1cd03ba3SJeremy Kemp   #else
40*1cd03ba3SJeremy Kemp   #define OS_NAME     "Win32"
41*1cd03ba3SJeremy Kemp   #endif
42*1cd03ba3SJeremy Kemp #elif defined(__linux__)
43*1cd03ba3SJeremy Kemp   #if defined(__x86_64__)
44*1cd03ba3SJeremy Kemp   #define OS_NAME     "Linux x64"
45*1cd03ba3SJeremy Kemp   #elif defined(__i386__)
46*1cd03ba3SJeremy Kemp   #define OS_NAME     "Linux x86"
47*1cd03ba3SJeremy Kemp   #elif defined(__arm__)
48*1cd03ba3SJeremy Kemp   #define OS_NAME     "Linux ARM"
49*1cd03ba3SJeremy Kemp   #elif defined(__aarch64__)
50*1cd03ba3SJeremy Kemp   #define OS_NAME     "Linux ARM64"
51*1cd03ba3SJeremy Kemp   #else
52*1cd03ba3SJeremy Kemp   #define OS_NAME     "Linux unknown"
53*1cd03ba3SJeremy Kemp   #endif
54*1cd03ba3SJeremy Kemp #elif defined(__FreeBSD__)
55*1cd03ba3SJeremy Kemp #define OS_NAME     "FreeBSD"
56*1cd03ba3SJeremy Kemp #else
57*1cd03ba3SJeremy Kemp #define OS_NAME     "Unknown"
58*1cd03ba3SJeremy Kemp #endif
59*1cd03ba3SJeremy Kemp 
60*1cd03ba3SJeremy Kemp 
61*1cd03ba3SJeremy Kemp typedef struct {
62*1cd03ba3SJeremy Kemp   std::string deviceName;
63*1cd03ba3SJeremy Kemp   std::string driverVersion;
64*1cd03ba3SJeremy Kemp 
65*1cd03ba3SJeremy Kemp   uint numCUs;
66*1cd03ba3SJeremy Kemp   uint maxWGSize;
67*1cd03ba3SJeremy Kemp   uint64_t maxAllocSize;
68*1cd03ba3SJeremy Kemp   uint64_t maxGlobalSize;
69*1cd03ba3SJeremy Kemp   uint maxClockFreq;
70*1cd03ba3SJeremy Kemp 
71*1cd03ba3SJeremy Kemp   bool halfSupported;
72*1cd03ba3SJeremy Kemp   bool doubleSupported;
73*1cd03ba3SJeremy Kemp   cl_device_type  deviceType;
74*1cd03ba3SJeremy Kemp 
75*1cd03ba3SJeremy Kemp   // Test specific options
76*1cd03ba3SJeremy Kemp   uint gloalBWIters;
77*1cd03ba3SJeremy Kemp   uint64_t globalBWMaxSize;
78*1cd03ba3SJeremy Kemp   uint computeWgsPerCU;
79*1cd03ba3SJeremy Kemp   uint computeDPWgsPerCU;
80*1cd03ba3SJeremy Kemp   uint computeIters;
81*1cd03ba3SJeremy Kemp   uint transferBWIters;
82*1cd03ba3SJeremy Kemp   uint kernelLatencyIters;
83*1cd03ba3SJeremy Kemp   uint64_t transferBWMaxSize;
84*1cd03ba3SJeremy Kemp } device_info_t;
85*1cd03ba3SJeremy Kemp 
86*1cd03ba3SJeremy Kemp class Timer
87*1cd03ba3SJeremy Kemp {
88*1cd03ba3SJeremy Kemp public:
89*1cd03ba3SJeremy Kemp 
90*1cd03ba3SJeremy Kemp   std::chrono::high_resolution_clock::time_point tick, tock;
91*1cd03ba3SJeremy Kemp 
92*1cd03ba3SJeremy Kemp   void start();
93*1cd03ba3SJeremy Kemp 
94*1cd03ba3SJeremy Kemp   // Stop and return time in micro-seconds
95*1cd03ba3SJeremy Kemp   float stopAndTime();
96*1cd03ba3SJeremy Kemp };
97*1cd03ba3SJeremy Kemp 
98*1cd03ba3SJeremy Kemp device_info_t getDeviceInfo(cl::Device &d);
99*1cd03ba3SJeremy Kemp 
100*1cd03ba3SJeremy Kemp // Return time in us for the given event
101*1cd03ba3SJeremy Kemp float timeInUS(cl::Event &timeEvent);
102*1cd03ba3SJeremy Kemp 
103*1cd03ba3SJeremy Kemp // Round down to next multiple of the given base with an optional maximum value
104*1cd03ba3SJeremy Kemp uint64_t roundToMultipleOf(uint64_t number, uint64_t base, uint64_t maxValue = UINT64_MAX);
105*1cd03ba3SJeremy Kemp 
106*1cd03ba3SJeremy Kemp void populate(float *ptr, uint64_t N);
107*1cd03ba3SJeremy Kemp void populate(double *ptr, uint64_t N);
108*1cd03ba3SJeremy Kemp 
109*1cd03ba3SJeremy Kemp void trimString(std::string &str);
110*1cd03ba3SJeremy Kemp 
111*1cd03ba3SJeremy Kemp #endif  // COMMON_H
112*1cd03ba3SJeremy Kemp 
113