blob: 2e63c3ddeb031e521e68f1e4d8c56bd8a6c4796e [file] [log] [blame]
 // // Copyright (c) 2017 The Khronos Group Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef _TOOLS_H #define _TOOLS_H #include "procs.h" #include #include #include typedef std::vector PrimeNumbersCollection; // Class responsible for distributing prime numbers class PrimeNumbers { public: struct Result1d{ size_t Val1; }; struct Result2d{ size_t Val1; size_t Val2; }; struct Result3d{ size_t Val1; size_t Val2; size_t Val3; }; static void generatePrimeNumbers (unsigned int maxValue); static int getPrimeNumberInRange (size_t lowerValue, size_t higherValue); static int getNextLowerPrimeNumber (size_t upperValue); static Result1d fitMaxPrime1d(size_t Val1, size_t productMax); // Return val1 and Val2 which are largest prime numbers who's product is <= productMax static Result2d fitMaxPrime2d(size_t Val1, size_t Val2, size_t productMax); // Return val1, val2 and val3, which are largest prime numbers who's product is <= productMax static Result3d fitMaxPrime3d(size_t Val1, size_t Val2, size_t Val3, size_t productMax); private: static PrimeNumbersCollection primeNumbers; PrimeNumbers(); }; // Stores information about errors namespace Error { #define MAX_NUMBER_OF_PRINTED_ERRORS 10 enum Type{ ERR_GLOBAL_SIZE=0, ERR_GLOBAL_WORK_OFFSET, ERR_LOCAL_SIZE, ERR_GLOBAL_ID, ERR_LOCAL_ID, ERR_ENQUEUED_LOCAL_SIZE, ERR_NUM_GROUPS, ERR_GROUP_ID, ERR_WORK_DIM, ERR_GLOBAL_BARRIER, ERR_LOCAL_BARRIER, ERR_GLOBAL_ATOMIC, ERR_LOCAL_ATOMIC, ERR_STRICT_MODE, ERR_BUILD_STATUS, ERR_UNKNOWN, ERR_DIFFERENT, _LAST_ELEM }; typedef std::map ErrorMap; typedef std::map ErrorStats; class ErrorClass { public: ErrorClass(); void show(Type whatErr, std::string where="", std::string additionalInfo=""); void show(Type whatErr, std::string where, cl_ulong valueIs, cl_ulong valueExpected); void show(std::string description); bool checkError(); void showStats(); void synchronizeStatsMap(); cl_uint * errorArrayCounter() {return _errorArrayCounter;}; size_t errorArrayCounterSize() {return sizeof(_errorArrayCounter);}; private: cl_uint _errorArrayCounter[Error::_LAST_ELEM]; // this buffer is passed to kernel int _overallNumberOfErrors; ErrorStats _stats; void printError(std::string errString); }; } #endif // _TOOLS_H