sc/source/core/data/bcaslot.cxx | 22 +++---- sc/source/core/inc/bcaslot.hxx | 20 +++--- sc/source/core/opencl/openclwrapper.cxx | 94 +++++++++++++++++++++++--------- 3 files changed, 89 insertions(+), 47 deletions(-)
New commits: commit 0d0d3a0540dad2d0f417e21df1183dfc33964357 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Tue Oct 1 01:36:04 2013 +0200 make source code opencl 1.0 compliant Change-Id: Id6055194eb225b85a5c66c5cf9fb44ad342df1a7 diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 6d92708..c59f055 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -259,11 +259,12 @@ OString createFileName(cl_device_id deviceId, const char* clFileName) std::vector<boost::shared_ptr<osl::File> > OpenclDevice::binaryGenerated( const char * clFileName, cl_context context ) { - cl_uint numDevices=0; + size_t numDevices=0; std::vector<boost::shared_ptr<osl::File> > aGeneratedFiles; - cl_int clStatus = clGetContextInfo( context, CL_CONTEXT_NUM_DEVICES, - sizeof(numDevices), &numDevices, NULL ); + cl_int clStatus = clGetContextInfo( context, CL_CONTEXT_DEVICES, + 0, NULL, &numDevices ); + numDevices /= sizeof(numDevices); if(clStatus != CL_SUCCESS) return aGeneratedFiles; @@ -465,9 +466,10 @@ int OpenclDevice::compileKernelFile( GPUEnv *gpuInfo, const char *buildOption ) idx = gpuInfo->mnFileCount; - cl_uint numDevices; - clStatus = clGetContextInfo( gpuInfo->mpContext, CL_CONTEXT_NUM_DEVICES, - sizeof(numDevices), &numDevices, NULL ); + size_t numDevices; + clStatus = clGetContextInfo( gpuInfo->mpContext, CL_CONTEXT_DEVICES, + 0, NULL, &numDevices ); + numDevices /= sizeof(numDevices); CHECK_OPENCL( clStatus, "clGetContextInfo" ); std::vector<boost::shared_ptr<osl::File> > aGeneratedFiles = binaryGenerated( commit 19e48764f7396e4a462d3a97c4bbe7848572b7d5 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Tue Oct 1 00:55:27 2013 +0200 hash platform version, device name, driver version into binary name Change-Id: Id34e7c6dad0587e2a8ea583c6df9bdc145f193bc diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 58850ca..6d92708 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -36,6 +36,8 @@ #endif #define DEVICE_NAME_LENGTH 1024 +#define DRIVER_VERSION_LENGTH 1024 +#define PLATFORM_VERSION_LENGTH 1024 using namespace std; @@ -48,16 +50,12 @@ int OpenclDevice::isInited =0; namespace { -OString generateHashForSource() +OString generateMD5(const void* pData, size_t length) { sal_uInt8 pBuffer[RTL_DIGEST_LENGTH_MD5]; - -#ifndef NDEBUG - size_t nLength = strlen(kernel_src); - rtlDigestError aError = rtl_digest_MD5(kernel_src, nLength, + rtlDigestError aError = rtl_digest_MD5(pData, length, pBuffer, RTL_DIGEST_LENGTH_MD5); - assert(aError == rtl_Digest_E_None); -#endif + SAL_WARN_IF(aError != rtl_Digest_E_None, "sc", "md5 generation failed"); OStringBuffer aBuffer; const char* pString = "0123456789ABCDEF"; @@ -70,6 +68,12 @@ OString generateHashForSource() return aBuffer.makeStringAndClear(); } +OString generateHashForSource() +{ + size_t nLength = strlen(kernel_src); + return generateMD5(kernel_src, nLength); +} + OString getCacheFolder() { OUString url("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/cache/"); @@ -230,8 +234,25 @@ OString createFileName(cl_device_id deviceId, const char* clFileName) char deviceName[DEVICE_NAME_LENGTH] = {0}; clGetDeviceInfo(deviceId, CL_DEVICE_NAME, sizeof(deviceName), deviceName, NULL); + + char driverVersion[DRIVER_VERSION_LENGTH] = {0}; + clGetDeviceInfo(deviceId, CL_DRIVER_VERSION, + sizeof(driverVersion), driverVersion, NULL); + + cl_platform_id platformId; + clGetDeviceInfo(deviceId, CL_DEVICE_PLATFORM, + sizeof(platformId), &platformId, NULL); + + char platformVersion[PLATFORM_VERSION_LENGTH] = {0}; + clGetPlatformInfo(platformId, CL_PLATFORM_VERSION, sizeof(platformVersion), + platformVersion, NULL); + + // create hash for deviceName + driver version + platform version + OString aString = OString(deviceName) + driverVersion + platformVersion; + OString aHash = generateMD5(aString.getStr(), aString.getLength()); + return OpenclDevice::maCacheFolder + fileName + "-" + - deviceName + "-" + OpenclDevice::maSourceHash + ".bin"; + aHash + "-" + OpenclDevice::maSourceHash + ".bin"; } } commit 25580075e08f2e20f0c842cf7da96e280884c9de Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Mon Sep 30 22:46:38 2013 +0200 remove unused macros Change-Id: I8f195cf6f8f6962d73171fec65b46fbd96f74613 diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index b15dc73..58850ca 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -28,18 +28,6 @@ #ifdef WIN32 #include <Windows.h> - -#define TRUE 1 -#define FALSE 0 - -#define OCL_INFO(str) \ - printf("[OCL_INFO] %s\n",str); -#define OCL_ERROR(str) \ - fprintf(stderr,"[OCL_ERROR] %s\n",str); -#define OCL_CHECK(value1,value2,str) \ - if(value1!=value2) \ - fprintf(stderr,"[OCL_ERROR] %s\n",str); - #define OPENCL_DLL_NAME "OpenCL.dll" #elif defined(MACOSX) #define OPENCL_DLL_NAME NULL commit 6c7cc9b637ef77a606d27f62aa5cc7f19550962b Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Mon Sep 30 22:43:44 2013 +0200 clear cache of old files when opencl source changes Change-Id: I67bc06f80c284c85d2bb409380ba3a43611ec31c diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 6fa86cc..b15dc73 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -92,6 +92,36 @@ OString getCacheFolder() return rtl::OUStringToOString(url, RTL_TEXTENCODING_UTF8); } +void clearCache() +{ + OUString aCacheDirURL(rtl::OStringToOUString(OpenclDevice::maCacheFolder, RTL_TEXTENCODING_UTF8)); + osl::Directory aCacheDir(aCacheDirURL); + osl::FileBase::RC status = aCacheDir.open(); + if(status != osl::FileBase::E_None) + return; + + osl::DirectoryItem aItem; + OUString aSourceString = rtl::OStringToOUString(OpenclDevice::maSourceHash + ".bin", RTL_TEXTENCODING_UTF8); + while(osl::FileBase::E_None == aCacheDir.getNextItem(aItem)) + { + osl::FileStatus aFileStatus(osl_FileStatus_Mask_FileName|osl_FileStatus_Mask_FileURL); + status = aItem.getFileStatus(aFileStatus); + if(status != osl::FileBase::E_None) + continue; + + OUString aFileName = aFileStatus.getFileName(); + if(aFileName.endsWith(".bin")) + { + if(!aFileName.endsWith(aSourceString)) + { + // delete the file + OUString aFileUrl = aFileStatus.getFileURL(); + osl::File::remove(aFileUrl); + } + } + } +} + } OString OpenclDevice::maSourceHash = generateHashForSource(); @@ -259,6 +289,7 @@ std::vector<boost::shared_ptr<osl::File> > OpenclDevice::binaryGenerated( const int OpenclDevice::writeBinaryToFile( const OString& rFileName, const char* binary, size_t numBytes ) { + clearCache(); osl::File file(rtl::OStringToOUString(rFileName, RTL_TEXTENCODING_UTF8)); osl::FileBase::RC status = file.open( osl_File_OpenFlag_Write | osl_File_OpenFlag_Create ); commit d81286b78ff90cf4cde17c5000cd8eda6ea4a380 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sun Sep 22 02:19:36 2013 +0200 sal_Bool to bool in bcaslot.[ch]xx Change-Id: Ic38f5421da373a68eeee8fe7863450dd5025e312 diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx index e55c183..b7ed7f5 100644 --- a/sc/source/core/data/bcaslot.cxx +++ b/sc/source/core/data/bcaslot.cxx @@ -255,13 +255,13 @@ ScBroadcastAreas::const_iterator ScBroadcastAreaSlot::FindBroadcastArea( } -sal_Bool ScBroadcastAreaSlot::AreaBroadcast( const ScHint& rHint) +bool ScBroadcastAreaSlot::AreaBroadcast( const ScHint& rHint) { if (aBroadcastAreaTbl.empty()) return false; bool bInBroadcast = mbInBroadcastIteration; mbInBroadcastIteration = true; - sal_Bool bIsBroadcasted = false; + bool bIsBroadcasted = false; const ScAddress& rAddress = rHint.GetAddress(); for (ScBroadcastAreas::const_iterator aIter( aBroadcastAreaTbl.begin()), aIterEnd( aBroadcastAreaTbl.end()); aIter != aIterEnd; ++aIter ) @@ -275,7 +275,7 @@ sal_Bool ScBroadcastAreaSlot::AreaBroadcast( const ScHint& rHint) if (!pBASM->IsInBulkBroadcast() || pBASM->InsertBulkArea( pArea)) { pArea->GetBroadcaster().Broadcast( rHint); - bIsBroadcasted = sal_True; + bIsBroadcasted = true; } } } @@ -288,14 +288,14 @@ sal_Bool ScBroadcastAreaSlot::AreaBroadcast( const ScHint& rHint) } -sal_Bool ScBroadcastAreaSlot::AreaBroadcastInRange( const ScRange& rRange, +bool ScBroadcastAreaSlot::AreaBroadcastInRange( const ScRange& rRange, const ScHint& rHint) { if (aBroadcastAreaTbl.empty()) return false; bool bInBroadcast = mbInBroadcastIteration; mbInBroadcastIteration = true; - sal_Bool bIsBroadcasted = false; + bool bIsBroadcasted = false; for (ScBroadcastAreas::const_iterator aIter( aBroadcastAreaTbl.begin()), aIterEnd( aBroadcastAreaTbl.end()); aIter != aIterEnd; ++aIter ) { @@ -308,7 +308,7 @@ sal_Bool ScBroadcastAreaSlot::AreaBroadcastInRange( const ScRange& rRange, if (!pBASM->IsInBulkBroadcast() || pBASM->InsertBulkArea( pArea)) { pArea->GetBroadcaster().Broadcast( rHint); - bIsBroadcasted = sal_True; + bIsBroadcasted = true; } } } @@ -376,7 +376,7 @@ void ScBroadcastAreaSlot::UpdateRemove( UpdateRefMode eUpdateRefMode, pArea->DecRef(); if (pBASM->IsInBulkBroadcast()) pBASM->RemoveBulkArea( pArea); - pArea->SetInUpdateChain( sal_True ); + pArea->SetInUpdateChain( true ); ScBroadcastArea* pUC = pBASM->GetEOUpdateChain(); if ( pUC ) pUC->SetUpdateChainNext( pArea ); @@ -653,7 +653,7 @@ void ScBroadcastAreaSlotMachine::EndListeningArea( const ScRange& rRange, } -sal_Bool ScBroadcastAreaSlotMachine::AreaBroadcast( const ScHint& rHint ) const +bool ScBroadcastAreaSlotMachine::AreaBroadcast( const ScHint& rHint ) const { const ScAddress& rAddress = rHint.GetAddress(); if ( rAddress == BCA_BRDCST_ALWAYS ) @@ -661,7 +661,7 @@ sal_Bool ScBroadcastAreaSlotMachine::AreaBroadcast( const ScHint& rHint ) const if ( pBCAlways ) { pBCAlways->Broadcast( rHint ); - return sal_True; + return true; } else return false; @@ -681,10 +681,10 @@ sal_Bool ScBroadcastAreaSlotMachine::AreaBroadcast( const ScHint& rHint ) const } -sal_Bool ScBroadcastAreaSlotMachine::AreaBroadcastInRange( const ScRange& rRange, +bool ScBroadcastAreaSlotMachine::AreaBroadcastInRange( const ScRange& rRange, const ScHint& rHint ) const { - sal_Bool bBroadcasted = false; + bool bBroadcasted = false; SCTAB nEndTab = rRange.aEnd.Tab(); for (TableSlotsMap::const_iterator iTab( aTableSlotsMap.lower_bound( rRange.aStart.Tab())); iTab != aTableSlotsMap.end() && (*iTab).first <= nEndTab; ++iTab) diff --git a/sc/source/core/inc/bcaslot.hxx b/sc/source/core/inc/bcaslot.hxx index 53e13d6..ca11dd9 100644 --- a/sc/source/core/inc/bcaslot.hxx +++ b/sc/source/core/inc/bcaslot.hxx @@ -39,7 +39,7 @@ private: SvtBroadcaster aBroadcaster; ScRange aRange; sal_uLong nRefCount; - sal_Bool bInUpdateChain; + bool bInUpdateChain; public: ScBroadcastArea( const ScRange& rRange ) @@ -57,8 +57,8 @@ public: inline sal_uLong GetRef() { return nRefCount; } inline ScBroadcastArea* GetUpdateChainNext() const { return pUpdateChainNext; } inline void SetUpdateChainNext( ScBroadcastArea* p ) { pUpdateChainNext = p; } - inline sal_Bool IsInUpdateChain() const { return bInUpdateChain; } - inline void SetInUpdateChain( sal_Bool b ) { bInUpdateChain = b; } + inline bool IsInUpdateChain() const { return bInUpdateChain; } + inline void SetInUpdateChain( bool b ) { bInUpdateChain = b; } /** Equalness of this or range. */ inline bool operator==( const ScBroadcastArea & rArea ) const; @@ -139,7 +139,7 @@ private: whether there would be an overflow when adding an area, setting the proper state if so. - @return sal_True if a HardRecalcState is effective and area is not to be + @return true if a HardRecalcState is effective and area is not to be added. */ bool CheckHardRecalcStateCondition() const; @@ -173,7 +173,7 @@ public: as InsertListeningArea(), so use that instead. @return - sal_True if rpArea passed was NULL and ScBroadcastArea is newly + true if rpArea passed was NULL and ScBroadcastArea is newly created. */ bool StartListeningArea( const ScRange& rRange, @@ -189,9 +189,9 @@ public: void EndListeningArea( const ScRange& rRange, SvtListener* pListener, ScBroadcastArea*& rpArea ); - sal_Bool AreaBroadcast( const ScHint& rHint ); - /// @return sal_True if at least one broadcast occurred. - sal_Bool AreaBroadcastInRange( const ScRange& rRange, + bool AreaBroadcast( const ScHint& rHint ); + /// @return true if at least one broadcast occurred. + bool AreaBroadcastInRange( const ScRange& rRange, const ScHint& rHint ); void DelBroadcastAreasInRange( const ScRange& rRange ); void UpdateRemove( UpdateRefMode eUpdateRefMode, @@ -281,9 +281,9 @@ public: SvtListener* pListener ); void EndListeningArea( const ScRange& rRange, SvtListener* pListener ); - sal_Bool AreaBroadcast( const ScHint& rHint ) const; + bool AreaBroadcast( const ScHint& rHint ) const; // return: at least one broadcast occurred - sal_Bool AreaBroadcastInRange( const ScRange& rRange, const ScHint& rHint ) const; + bool AreaBroadcastInRange( const ScRange& rRange, const ScHint& rHint ) const; void DelBroadcastAreasInRange( const ScRange& rRange ); void UpdateBroadcastAreas( UpdateRefMode eUpdateRefMode, const ScRange& rRange, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits