sc/inc/platforminfo.hxx | 3 sc/source/core/opencl/openclwrapper.cxx | 21 +++++ sc/source/ui/optdlg/calcoptionsdlg.cxx | 38 +++++++-- sc/source/ui/optdlg/calcoptionsdlg.hxx | 12 +++ sc/uiconfig/scalc/ui/formulacalculationoptions.ui | 88 ++++++++++++++++++++++ 5 files changed, 153 insertions(+), 9 deletions(-)
New commits: commit 4b41e8197841228beaea74222fa1d0c87d6c4c80 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Sep 13 21:28:09 2013 +0200 show compute units, frequency and memory for opencl devices Change-Id: Ib322a429a3d29ed985702dc1b5cb9d1cb0a1ac07 diff --git a/sc/inc/platforminfo.hxx b/sc/inc/platforminfo.hxx index bae6e41..d848525 100644 --- a/sc/inc/platforminfo.hxx +++ b/sc/inc/platforminfo.hxx @@ -23,6 +23,9 @@ struct SC_DLLPUBLIC OpenclDeviceInfo size_t mnId; OUString maName; OUString maVendor; + size_t mnMemory; + size_t mnComputeUnits; + size_t mnFrequency; }; struct SC_DLLPUBLIC OpenclPlatformInfo diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index a32cf8a..c2c1e45 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -2654,6 +2654,27 @@ void createDeviceInfo(cl_device_id aDeviceId, OpenclPlatformInfo& rPlatformInfo) aDeviceInfo.maVendor = OUString::createFromAscii(pVendor); + cl_ulong nMemSize; + nState = clGetDeviceInfo(aDeviceId, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(nMemSize), &nMemSize, NULL); + if(nState != CL_SUCCESS) + return; + + aDeviceInfo.mnMemory = nMemSize; + + cl_uint nClockFrequency; + nState = clGetDeviceInfo(aDeviceId, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(nClockFrequency), &nClockFrequency, NULL); + if(nState != CL_SUCCESS) + return; + + aDeviceInfo.mnFrequency = nClockFrequency; + + cl_uint nComputeUnits; + nState = clGetDeviceInfo(aDeviceId, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(nComputeUnits), &nComputeUnits, NULL); + if(nState != CL_SUCCESS) + return; + + aDeviceInfo.mnComputeUnits = nComputeUnits; + rPlatformInfo.maDevices.push_back(aDeviceInfo); } diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx index f2b91f8..0b00a04 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.cxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx @@ -14,10 +14,6 @@ #include "svtools/svlbitm.hxx" #include "svtools/treelistentry.hxx" -#if HAVE_FEATURE_OPENCL -#include "platforminfo.hxx" -#endif - namespace { typedef enum { @@ -118,11 +114,15 @@ ScCalcOptionsDialog::ScCalcOptionsDialog(Window* pParent, const ScCalcConfig& rC get(mpOpenclInfoList, "opencl_list"); get(mpBtnAutomaticSelectionTrue, "automatic_select_true"); get(mpBtnAutomaticSelectionFalse, "automatic_select_false"); + get(mpFtFrequency, "frequency"); + get(mpFtComputeUnits, "compute_units"); + get(mpFtMemory, "memory"); mpOpenclInfoList->set_height_request(4* mpOpenclInfoList->GetTextHeight()); mpOpenclInfoList->SetStyle(mpOpenclInfoList->GetStyle() | WB_CLIPCHILDREN | WB_FORCE_MAKEVISIBLE); mpOpenclInfoList->SetHighlightRange(); mpOpenclInfoList->GetParent()->Hide(); + mpOpenclInfoList->SetSelectHdl(LINK(this, ScCalcOptionsDialog, DeviceSelHdl)); mpBtnAutomaticSelectionTrue->SetToggleHdl(LINK(this, ScCalcOptionsDialog, BtnAutomaticSelectHdl)); @@ -195,14 +195,15 @@ void ScCalcOptionsDialog::fillOpenclList() { mpOpenclInfoList->SetUpdateMode(false); mpOpenclInfoList->Clear(); - std::vector<sc::OpenclPlatformInfo> aPlatformInfo = sc::listAllOpenclPlatforms(); - for(std::vector<sc::OpenclPlatformInfo>::const_iterator it = aPlatformInfo.begin(), - itEnd = aPlatformInfo.end(); it != itEnd; ++it) + maPlatformInfo = sc::listAllOpenclPlatforms(); + for(std::vector<sc::OpenclPlatformInfo>::iterator it = maPlatformInfo.begin(), + itEnd = maPlatformInfo.end(); it != itEnd; ++it) { - for(std::vector<sc::OpenclDeviceInfo>::const_iterator + for(std::vector<sc::OpenclDeviceInfo>::iterator itr = it->maDevices.begin(), itrEnd = it->maDevices.end(); itr != itrEnd; ++itr) { - mpOpenclInfoList->InsertEntry(it->maVendor + " " + itr->maName); + SvTreeListEntry* pEntry = mpOpenclInfoList->InsertEntry(it->maVendor + " " + itr->maName); + pEntry->SetUserData(&(*itr)); } } @@ -299,6 +300,7 @@ void ScCalcOptionsDialog::SelectionChanged() bValue = maConfig.mbOpenCLEnabled; mpFtAnnotation->SetText(maDescOpenCLEnabled); mpOpenclInfoList->GetParent()->Show(); + setOptimalLayoutSize(); if(bValue) mpOpenclInfoList->GetParent()->Enable(); else @@ -356,6 +358,18 @@ void ScCalcOptionsDialog::OpenclAutomaticSelectionChanged() maConfig.mbOpenCLAutoSelect = bValue; } +void ScCalcOptionsDialog::SelectedDeviceChanged() +{ +#if HAVE_FEATURE_OPENCL + SvTreeListEntry* pEntry = mpOpenclInfoList->GetModel()->GetView(0)->FirstSelected(); + sc::OpenclDeviceInfo* pInfo = reinterpret_cast<sc::OpenclDeviceInfo*>(pEntry->GetUserData()); + assert(pInfo); + mpFtFrequency->SetText(OUString::number(pInfo->mnFrequency)); + mpFtComputeUnits->SetText(OUString::number(pInfo->mnComputeUnits)); + mpFtMemory->SetText(OUString::number(pInfo->mnMemory/1024/1024)); +#endif +} + void ScCalcOptionsDialog::RadioValueChanged() { sal_uInt16 nSelected = mpLbSettings->GetSelectEntryPos(); @@ -424,5 +438,11 @@ IMPL_LINK_NOARG(ScCalcOptionsDialog, BtnAutomaticSelectHdl) return 0; } +IMPL_LINK_NOARG(ScCalcOptionsDialog, DeviceSelHdl) +{ + SelectedDeviceChanged(); + return 0; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/optdlg/calcoptionsdlg.hxx b/sc/source/ui/optdlg/calcoptionsdlg.hxx index 8fade8d..3d6b755 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.hxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.hxx @@ -20,6 +20,10 @@ #include "calcconfig.hxx" +#if HAVE_FEATURE_OPENCL +#include "platforminfo.hxx" +#endif + class ScCalcOptionsDialog : public ModalDialog { public: @@ -29,6 +33,7 @@ public: DECL_LINK( SettingsSelHdl, Control* ); DECL_LINK( BtnToggleHdl, void* ); DECL_LINK( BtnAutomaticSelectHdl, void* ); + DECL_LINK( DeviceSelHdl, void* ); const ScCalcConfig& GetConfig() const; @@ -38,6 +43,7 @@ private: void ListOptionValueChanged(); void RadioValueChanged(); void OpenclAutomaticSelectionChanged(); + void SelectedDeviceChanged(); #if HAVE_FEATURE_OPENCL void fillOpenclList(); #endif @@ -55,6 +61,9 @@ private: RadioButton* mpBtnFalse; FixedText* mpFtAnnotation; + FixedText* mpFtFrequency; + FixedText* mpFtComputeUnits; + FixedText* mpFtMemory; SvTreeListBox* mpOpenclInfoList; RadioButton* mpBtnAutomaticSelectionTrue; @@ -78,6 +87,9 @@ private: OUString maDescOpenCLEnabled; ScCalcConfig maConfig; +#if HAVE_FEATURE_OPENCL + std::vector<sc::OpenclPlatformInfo> maPlatformInfo; +#endif }; #endif diff --git a/sc/uiconfig/scalc/ui/formulacalculationoptions.ui b/sc/uiconfig/scalc/ui/formulacalculationoptions.ui index a848051..c5bd7dc 100644 --- a/sc/uiconfig/scalc/ui/formulacalculationoptions.ui +++ b/sc/uiconfig/scalc/ui/formulacalculationoptions.ui @@ -4,6 +4,7 @@ <!-- interface-requires LibreOffice 1.0 --> <object class="GtkDialog" id="FormulaCalculationOptions"> <property name="can_focus">False</property> + <property name="vexpand">True</property> <property name="border_width">6</property> <property name="title" translatable="yes">Detailed Calculation Settings</property> <property name="type_hint">dialog</property> @@ -368,6 +369,93 @@ <property name="height">1</property> </packing> </child> + <child> + <object class="GtkGrid" id="grid5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="frequency_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Frequency:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="compute_units_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Compute Units:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="memory_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Memory (in MB):</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="frequency"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="compute_units"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="memory"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> </object> <packing> <property name="left_attach">0</property> _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits