[Libreoffice-commits] core.git: Branch 'private/kendy/testcl' - desktop/inc desktop/Library_sofficeapp.mk desktop/source opencl/inc opencl/source sc/source

Michael Meeks michael.meeks at collabora.com
Mon Jul 11 22:21:31 UTC 2016


 desktop/Library_sofficeapp.mk        |    2 
 desktop/inc/app.hxx                  |    1 
 desktop/source/app/app.cxx           |   75 -----------------------------------
 opencl/inc/opencl_device.hxx         |    3 +
 opencl/source/OpenCLZone.cxx         |    4 +
 opencl/source/openclwrapper.cxx      |    6 ++
 sc/source/core/tool/formulagroup.cxx |   10 ----
 7 files changed, 16 insertions(+), 85 deletions(-)

New commits:
commit 624df9d568b78a792b247b3f6daf5b51d479a25e
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Mon Jul 11 23:20:27 2016 +0100

    Re-work opencl / desktop testing pieces.
    
    Split opencl validation pieces into their own module to avoid cl
    header spread. Use app version, and CL driver version to trigger
    re-testing the device. Hard disable, should cleanup existing CL
    device too.
    
    Change-Id: I3893351b6f3845538c74b3b5bf46724cd9bde62d

diff --git a/desktop/Library_sofficeapp.mk b/desktop/Library_sofficeapp.mk
index 3154a7b..a5cf82b 100644
--- a/desktop/Library_sofficeapp.mk
+++ b/desktop/Library_sofficeapp.mk
@@ -24,6 +24,7 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\
 ))
 
 $(eval $(call gb_Library_use_externals,sofficeapp, \
+	$(if $(filter OPENCL,$(BUILD_TYPE)),clew) \
     boost_headers \
     dbus \
 ))
@@ -103,6 +104,7 @@ $(eval $(call gb_Library_add_exception_objects,sofficeapp,\
     desktop/source/app/langselect \
     desktop/source/app/lockfile2 \
     desktop/source/app/officeipcthread \
+    desktop/source/app/opencl \
     desktop/source/app/sofficemain \
     desktop/source/app/userinstall \
     desktop/source/migration/migration \
diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx
index 1905cf0..c90bfdb 100644
--- a/desktop/inc/app.hxx
+++ b/desktop/inc/app.hxx
@@ -84,6 +84,7 @@ class Desktop : public Application
 
         static void             OpenClients();
         static void             OpenDefault();
+        static void             CheckOpenCLCompute(const css::uno::Reference<css::frame::XDesktop2> &);
 
         DECL_STATIC_LINK_TYPED( Desktop, EnableAcceptors_Impl, void*, void);
 
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index cc05d74..7628c7a 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -75,12 +75,6 @@
 #include <com/sun/star/frame/thePopupMenuControllerFactory.hpp>
 #include <com/sun/star/office/Quickstart.hpp>
 
-#include <com/sun/star/table/XCell2.hpp>
-#include <com/sun/star/sheet/XCalculatable.hpp>
-#include <com/sun/star/sheet/XSpreadsheet.hpp>
-#include <com/sun/star/sheet/XSpreadsheets.hpp>
-#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
-
 #include <desktop/exithelper.h>
 #include <sal/log.hxx>
 #include <toolkit/helper/vclunohelper.hxx>
@@ -115,7 +109,6 @@
 #include <svtools/accessibilityoptions.hxx>
 #include <svtools/apearcfg.hxx>
 #include <vcl/graphicfilter.hxx>
-#include <opencl/OpenCLZone.hxx>
 
 #include "langselect.hxx"
 
@@ -1333,72 +1326,6 @@ void Desktop::DoExecute()
 #endif
 }
 
-#if HAVE_FEATURE_OPENCL
-void testOpenCLCompute(const Reference< XDesktop2 > &xDesktop)
-{
-    if (getenv("SAL_DISABLE_OPENCL"))
-        return;
-
-    css::uno::Reference< css::lang::XComponent > xComponent;
-
-    SAL_INFO("opencl", "Initiating test of OpenCL device");
-    try {
-        OpenCLZone aZone;
-        css::uno::Reference< css::frame::XComponentLoader > xLoader(xDesktop, css::uno::UNO_QUERY_THROW);
-
-        // FIXME: invisible, read-only etc.
-        css::uno::Sequence< css::beans::PropertyValue > aArgs(1);
-        aArgs[0].Name = "Hidden";
-        aArgs[0].Value = makeAny(true);
-
-        OUString aUrl("$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/opencl/cl-test.ods");
-        rtl::Bootstrap::expandMacros(aUrl);
-
-        xComponent.set(xLoader->loadComponentFromURL(aUrl, "_blank", 0, aArgs));
-
-        // What an unpleasant API to use.
-        css::uno::Reference< css::sheet::XCalculatable > xCalculatable( xComponent, css::uno::UNO_QUERY_THROW);
-        css::uno::Reference< css::sheet::XSpreadsheetDocument > xSpreadDoc( xComponent, css::uno::UNO_QUERY_THROW );
-        css::uno::Reference< css::sheet::XSpreadsheets > xSheets( xSpreadDoc->getSheets(), css::uno::UNO_QUERY_THROW );
-        css::uno::Reference< css::container::XIndexAccess > xIndex( xSheets, css::uno::UNO_QUERY_THROW );
-        css::uno::Reference< css::sheet::XSpreadsheet > xSheet( xIndex->getByIndex(0), css::uno::UNO_QUERY_THROW);
-
-        // So we insert our MAX call at the end on a named range.
-        css::uno::Reference< css::table::XCell2 > xThresh( xSheet->getCellByPosition(1,1), css::uno::UNO_QUERY_THROW ); // B2
-        double fThreshold = xThresh->getValue();
-
-        // We need pure OCL formulae all the way through the
-        // dependency chain, or we fall-back.
-        xCalculatable->calculateAll();
-
-        // So we insert our MAX call at the end on a named range.
-        css::uno::Reference< css::table::XCell2 > xCell( xSheet->getCellByPosition(1,0), css::uno::UNO_QUERY_THROW );
-        xCell->setFormula("=MAX(results)");
-        double fResult = xCell->getValue();
-
-        // Ensure the maximum variance is below our tolerance.
-        if (fResult > fThreshold)
-        {
-            SAL_WARN("opencl", "OpenCL results unstable - disabling; result: "
-                     << fResult << " vs. " << fThreshold);
-            OpenCLZone::hardDisable();
-        }
-        else
-        {
-            SAL_INFO("opencl", "calculating smoothly; result: " << fResult);
-        }
-    }
-    catch (const css::uno::Exception &e)
-    {
-        SAL_WARN("opencl", "OpenCL testing failed - disabling.");
-        OpenCLZone::hardDisable();
-    }
-
-    if (xComponent.is())
-        xComponent->dispose();
-}
-#endif // HAVE_FEATURE_OPENCL
-
 int Desktop::Main()
 {
     pExecGlobals = new ExecuteGlobals();
@@ -1680,7 +1607,7 @@ int Desktop::Main()
 
         // FIXME: move this somewhere sensible.
 #if HAVE_FEATURE_OPENCL
-        testOpenCLCompute(xDesktop);
+        CheckOpenCLCompute(xDesktop);
 #endif
 
         // Release solar mutex just before we wait for our client to connect
diff --git a/opencl/inc/opencl_device.hxx b/opencl/inc/opencl_device.hxx
index 0963304..216af72 100644
--- a/opencl/inc/opencl_device.hxx
+++ b/opencl/inc/opencl_device.hxx
@@ -16,6 +16,9 @@ namespace opencl {
 
 ds_device getDeviceSelection(OUString const & pFileName, bool bForceSelection = false);
 
+struct GPUEnv;
+void releaseOpenCLEnv( GPUEnv *gpuInfo );
+
 }
 
 #endif
diff --git a/opencl/source/OpenCLZone.cxx b/opencl/source/OpenCLZone.cxx
index dc3a952..03521a2 100644
--- a/opencl/source/OpenCLZone.cxx
+++ b/opencl/source/OpenCLZone.cxx
@@ -7,7 +7,9 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <opencl/openclwrapper.hxx>
 #include <opencl/OpenCLZone.hxx>
+#include "opencl_device.hxx"
 
 #include <memory>
 
@@ -40,6 +42,8 @@ void OpenCLZone::hardDisable()
         auto xConfProvider = css::configuration::theDefaultProvider::get(comphelper::getProcessComponentContext());
         css::uno::Reference<css::util::XFlushable> xFlushable(xConfProvider, css::uno::UNO_QUERY_THROW);
         xFlushable->flush();
+
+        releaseOpenCLEnv(&opencl::gpuEnv);
     }
 }
 
diff --git a/opencl/source/openclwrapper.cxx b/opencl/source/openclwrapper.cxx
index 9f31bf4a..2aecdde 100644
--- a/opencl/source/openclwrapper.cxx
+++ b/opencl/source/openclwrapper.cxx
@@ -268,6 +268,8 @@ bool initOpenCLAttr( OpenCLEnv * env )
     return false;
 }
 
+}
+
 void releaseOpenCLEnv( GPUEnv *gpuInfo )
 {
     OpenCLZone zone;
@@ -298,6 +300,8 @@ void releaseOpenCLEnv( GPUEnv *gpuInfo )
     return;
 }
 
+namespace {
+
 bool buildProgram(const char* buildOption, GPUEnv* gpuInfo, int idx)
 {
     cl_int clStatus;
@@ -884,7 +888,7 @@ const char* errorString(cl_int nError)
 
 bool GPUEnv::isOpenCLEnabled()
 {
-    return gpuEnv.mpDevID;
+    return gpuEnv.mpDevID && gpuEnv.mpContext;
 }
 
 }
diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx
index 4941504..15ce590 100644
--- a/sc/source/core/tool/formulagroup.cxx
+++ b/sc/source/core/tool/formulagroup.cxx
@@ -336,16 +336,6 @@ bool FormulaGroupInterpreter::switchOpenCLDevice(const OUString& rDeviceId, bool
     delete msInstance;
     msInstance = new sc::opencl::FormulaGroupInterpreterOpenCL();
 
-    if (aSelectedCLDeviceVersionID != officecfg::Office::Common::Misc::SelectedOpenCLDeviceIdentifier::get())
-    {
-        // perform OpenCL calculation tests
-
-        // save the device
-        std::shared_ptr<comphelper::ConfigurationChanges> xBatch(comphelper::ConfigurationChanges::create());
-        officecfg::Office::Common::Misc::SelectedOpenCLDeviceIdentifier::set(aSelectedCLDeviceVersionID, xBatch);
-        xBatch->commit();
-    }
-
     return true;
 }
 


More information about the Libreoffice-commits mailing list