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