[Libreoffice-commits] core.git: opencl/source
Tor Lillqvist
tml at collabora.com
Wed Jun 29 16:09:43 UTC 2016
opencl/source/opencl_device.cxx | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
New commits:
commit 68106cbac586f25836d3482c068eee2ffb7c99fc
Author: Tor Lillqvist <tml at collabora.com>
Date: Wed Jun 29 18:25:26 2016 +0300
Don't waste too much time evaluating the "score" for the "native CPU"
This code took tens of second typically, which is utterly pointless.
Instead run the loop for max a second, after which estimate how long
it would have taken to process all of the data.
Don't confuse the "native CPU" term here with a CPU-based device
of an actual OpenCL implementation. That is a completely different
thing. This "native CPU" thing here is just our way to estimate how
much time it takes to do calculations using normal C++ code on the
CPU.
Change-Id: I92f5eedc06bbaaef6a9b5322fefec9d41f0db505
Reviewed-on: https://gerrit.libreoffice.org/26774
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Tested-by: Jenkins <ci at libreoffice.org>
diff --git a/opencl/source/opencl_device.cxx b/opencl/source/opencl_device.cxx
index 0a0d28e..3dc9a29 100644
--- a/opencl/source/opencl_device.cxx
+++ b/opencl/source/opencl_device.cxx
@@ -327,7 +327,8 @@ ds_status evaluateScoreForDevice(ds_device& rDevice, std::unique_ptr<LibreOffice
timer kernelTime;
timerStart(&kernelTime);
- for (unsigned long j = 0; j < testData->outputSize; j++)
+ unsigned long j;
+ for (j = 0; j < testData->outputSize; j++)
{
double fAverage = 0.0f;
double fMin = DBL_MAX;
@@ -340,15 +341,25 @@ ds_status evaluateScoreForDevice(ds_device& rDevice, std::unique_ptr<LibreOffice
}
fAverage /= testData->inputSize;
testData->output[j] = fAverage + (fMin * fSoP);
+ // Don't run for much longer than one second
+ if (j > 0 && j % 100 == 0)
+ {
+ rDevice.fTime = timerCurrent(&kernelTime);
+ if (rDevice.fTime >= 1)
+ break;
+ }
}
+ rDevice.fTime = timerCurrent(&kernelTime);
+
+ // Scale time to how long it would have taken to go all the way to outputSize
+ rDevice.fTime /= ((double) j / testData->outputSize);
+
// InterpretTail - the S/W fallback is nothing like as efficient
// as any good openCL implementation: no SIMD, tons of branching
// in the inner loops etc. Generously characterise it as only 10x
// slower than the above.
float fInterpretTailFactor = 10.0;
-
- rDevice.fTime = timerCurrent(&kernelTime);
rDevice.fTime *= fInterpretTailFactor;
rDevice.bErrors = false;
}
More information about the Libreoffice-commits
mailing list