/* * oclh_h_ws_base.h * Author: havock */ #ifndef OCLH_H_WS_BASE_H_ #define OCLH_H_WS_BASE_H_ 1 #include #include #include #include #define __GHM_U64STRIPTO2B(___GHMARG_U64STRIPTO2B) \ (((uint64_t)(___GHMARG_U64STRIPTO2B))&((uint64_t)0x000000000000ffff)) typedef enum _GHE_SOURCE_TYPE { _GHE_HL_LISTINGS = 0, _GHE_IR_LISTINGS = 1, _GHE_SEPARATED_OBJECTS = 2, _GHE_LINKED_OBJECTS = 3 } _GHE_SRCTYPE; typedef enum _GHE_BUILD_LOG_MODE { _GHE_NO_BUILD_LOG = 0, _GHE_BUILD_LOG_IN_WRKSET_LOG = 1, _GHE_BUILD_LOG_IN_SEPARATED_FILES = 2 } _GHE_BUILD_LOG_MODE; #pragma pack(push,1) typedef struct _GHT_WORKINGSET { void* pwSetAddr; /* self */ cl_command_queue Queue; /* key pointer */ cl_program Program; size_t szNofCmpUnits;/* number of computational units (a.k.a. processor core) */ size_t szNofRPThrds; /* number of real parallel threads */ size_t szMaxWGsz; /* max number of work-items in a work-group it represents the number of virtual threads executed on a computational unit (a.k.a. processor core) */ size_t szNofWIinWG; size_t szNofAllWI; size_t* pszMemBytes; _GHT_LOG Log; int32_t i32EigenLogFlag; cl_int APIErr; cl_kernel* pKernels; int32_t KerErr; cl_mem d_pKerErr; void* pvDat; int32_t (*pfnDatCleaner)(const struct _GHT_WORKINGSET); } _GHT_WRKSET; #pragma pack(pop) _GHT_WRKSET _ghf_declWS(void); int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet, const _GHT_LOG Log, const int32_t i32ExclusiveLogFlag, const cl_device_id clWrkDev, const void* const pvCLProgramSources, const _GHE_SRCTYPE SourceType, const char* const pcOCLBuildOpts, const _GHE_LOGLVL LogLvl, const _GHE_BUILD_LOG_MODE BuildLogMode #if defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG) , char* const pcOutputPrefix #endif /* defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG) */ ); int32_t _ghf_wipeWS(_GHT_WRKSET* const pwSet); int32_t _ghf_isWS_LogValid(const _GHT_WRKSET wSet); int32_t _ghf_recalcWS_WIWG(_GHT_WRKSET* const pwSet, const size_t szNofAllTasks); int32_t _ghf_flfnWS(_GHT_WRKSET wSet); cl_device_id _ghf_getWS_Dev( _GHT_WRKSET wSet); cl_context _ghf_getWS_Ctx( _GHT_WRKSET wSet); cl_build_status _ghf_getWS_BuildStatus(_GHT_WRKSET wSet); cl_kernel _ghf_getWS_KernByName( _GHT_WRKSET wSet,const char* pcKernName); cl_uint _ghf_getWS_RefCntOfMem(_GHT_WRKSET wSet,const cl_mem clMem); size_t _ghf_getWS_MaxWIinWG( _GHT_WRKSET wSet); cl_uint _ghf_getWS_MaxCmpUnits(_GHT_WRKSET wSet); int32_t _ghf_saveWS_ProgramBinaries(_GHT_WRKSET wSet, char* const pcOutputPrefix); int32_t _ghf_wdcChkWS_APIErr ( _GHT_WRKSET wSet, const char* const pcAPICall, const int32_t i32FlashFlag); int32_t _ghf_wdcChkWS_KerErr( _GHT_WRKSET wSet, const cl_kernel clKer); int32_t _ghf_wdcSetWS_KerErrToZero(_GHT_WRKSET wSet); #pragma pack(push,1) typedef struct _GHT_ALL_OF_WORKING_SETS { _GHT_WRKSET* pWSet; uint64_t u64NofWSs; _GHT_LOG Log; const void* const pvCLProgramSource; const _GHE_SRCTYPE SourceType; const _GHE_LOGLVL LogLevel; const _GHE_BUILD_LOG_MODE BuildLogMode; } _GHT_AWSS; #pragma pack(pop) _GHT_AWSS _ghf_declAWSs(const _GHE_LOGLVL LogLvl, const _GHE_BUILD_LOG_MODE BuildLogMode); int32_t _ghf_genrAWSs( _GHT_AWSS* const pAWSs, const _GHT_LOG Log, const void* const pvCLProgramSources, const _GHE_SRCTYPE SourceType, const char* const OCLBuildOpts #if defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG) , char* const pcOutputPrefix #endif /* defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG) */ ); int32_t _ghf_wipeAWSs(_GHT_AWSS* const pAWSs); int32_t _ghf_buildDevList(_GHT_WRKSET wSet, cl_device_id** ppDevLst); int32_t _ghf_wipeDevList(cl_device_id** ppDevLst); int32_t __ghf_setWS_TextProgramId(_GHT_WRKSET wSet, char* const pcDst, char* const pcOutputPrefix); #endif /* OCLH_H_WS_BASE_H_ */