Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
OpenCL Unterstützung für LibreOffice Calc über Intel beignet unter Linux
ist euch ein Weg bekannt, wie LibreOffice Calc (ab 4.4) oder andere OpenCL Programme unter Linux dazu gebracht werden kann, OpenCL über eine Intel GPU* zum Berechnen von Tabellen zu nutzen?
In Theorie steht ja nur der Windows Treiber auf der Blacklist und Laut Dokumentation müsste Calc bei installiertem beignet 1.0 oder höher nutzbar sein. Beignet 1.0.2.2 (https://launchpad.net/ubuntu/vivid/+source/beignet) ist in den Quellen von Ubuntu 15.04 integriert und bei mir installiert. Jedoch laufen Berechnungen bei mir unter Calc gleich schnell ab, egal ob ich OpenCL in den Optionen von LibreOffice aktiviere/deaktiviere. Entsprechend gehe ich davon aus, dass allein die CPU arbeitet.
Wenn mir jemand helfen könnte, die GPU ordentlich einzuspannen würde mich das sehr freuen.
Für Groundwaterdaily.xls komme ich auf folgende Werte (Angaben in ms, kleiner Werte sind besser): Intel Haswell 4200U (2C/4T 2,9GHz)
CPU only: 36.000-40.000
OpenCL: 36.000-40.000
Intel SandyBridge E3-1245 (4C/8T 3.3GHz) mit AMD 270X
CPU: ~26.000
OpenCL over GPU: 160-2000 (je nachdem ob die Karte erst hochtakten muss oder nicht)
*HD4400 im speziellen, allgemein Intel Graphics Gen 7.5
Die Tabellen die von GPU-Beschleunigung profitieren kommen werden hauptsächlich mobil bearbeitet und das Notebook ist nicht erweiterbar.
Bevor der Vorschlag kommt die Berechnung per SSH-Verbindung an den Desktop durchzureichen, danke ich wohne in Dresden und Dresden ist traditionsbewusst*! Daher gibt es ganze Viertel, in denen es keinerlei Internetverbindung via Kabel gibt und jedes Kilobyte des LTE Tarifs heilig ist.
*Das der Beinahme Dresdens "Tal der Ahnungslosen" im Jahre 2015 derart eisern verteidigt wird mögen Andere als Rückständig bezeichnen :/
Der Phoronixartikel ist mit Bezug auf Ubuntu 14.xx veraltet. Der ganze Hickhack um beignet 1.0 und höher zu nutzen ist mit Ubuntu 15.04 nicht nötig. Aus den Paketquellen installert beignet 1.0.2-2 inkl icd loader und allem.
Der Link auf freedesktop.org verweist in erster Linie auf die Intel Bibliotheken für Intel CPUs, spart die GPUs leider aus. Ich werde mal versuchen, den dort beschriebenen Test zum Laufen zu bekommen.
Ergänzung ()
@freak01
Die Dresdener Unis und Institute sind gut ausgestattet. Es gibt genauso Viertel mit 1a Anbindung. Genauso gibt es aber auch großflächig Gebiete wo gut sichtbar wird, was passiert wenn Infrastrukturausbau allein wirtschaftlichen Interessen von Privatunternehmen untergeordnet ist. Denn wo nahezu jeder Haushalt für mind. 30€ im Monat Zugang zum überbuchten LTE Netz erwirbt steckt man doch kein Geld in den Ausbau der Infrastruktur, auf dass die Kundschaft günstigere Tarife per Kabel nimmt.
@chithanh
Ich muss mir da mal noch ne andere Anwendung suchen.
clinfo meint jedoch, dass alles in Butter sei und die Funktionalität gegeben sein sollte (zumindest soweit ich es verstehe):
Code:
Number of platforms 1
Platform Name Intel Gen OCL Driver
Platform Vendor Intel
Platform Version OpenCL 1.2 beignet 1.0.2
Platform Profile FULL_PROFILE
Platform Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_icd
Platform Extensions function suffix Intel
Platform Name Intel Gen OCL Driver
Number of devices 1
Device Name Intel(R) HD Graphics Haswell Ultrabook GT2 Mobile
Device Vendor Intel
Device Vendor ID 0xa16
Device Version OpenCL 1.2 beignet 1.0.2
Driver Version 1.0.2
Device OpenCL C Version OpenCL C 1.2 beignet 1.0.2
Device Type GPU
Device Profile FULL_PROFILE
Max compute units 20
Max clock frequency 1000MHz
Device Partition (core)
Max number of sub-devices 1
Supported partition types None, None, None
Max work item dimensions 3
Max work item sizes 512x512x512
Max work group size 512
Preferred work group size multiple 16
Preferred / native vector sizes
char 16 / 8
short 8 / 8
int 4 / 4
long 2 / 2
half 0 / 8 (n/a)
float 4 / 4
double 0 / 2 (n/a)
Half-precision Floating-point support (n/a)
Single-precision Floating-point support (core)
Denormals No
Infinity and NANs Yes
Round to nearest Yes
Round to zero No
Round to infinity No
IEEE754-2008 fused multiply-add No
Support is emulated in software No
Correctly-rounded divide and sqrt operations No
Double-precision Floating-point support (n/a)
Address bits 32, Little-Endian
Global memory size 2147483648 (2GiB)
Error Correction support No
Max memory allocation 1073741824 (1024MiB)
Unified memory for Host and Device Yes
Minimum alignment for any data type 128 bytes
Alignment of base address 1024 bits (128 bytes)
Global Memory cache type Read/Write
Global Memory cache size 8192
Global Memory cache line 64 bytes
Image support Yes
Max number of samplers per kernel 16
Max size for 1D images from buffer 65536 pixels
Max 1D or 2D image array size 2048 images
Max 2D image size 8192x8192 pixels
Max 3D image size 8192x8192x2048 pixels
Max number of read image args 128
Max number of write image args 8
Local memory type Global
Local memory size 65536 (64KiB)
Max constant buffer size 134217728 (128MiB)
Max number of constant args 8
Max size of kernel argument 1024
Queue properties
Out-of-order execution No
Profiling Yes
Profiling timer resolution 80ns
Execution capabilities
Run OpenCL kernels Yes
Run native kernels Yes
Prefer user sync for interop Yes
printf() buffer size 1048576 (1024KiB)
Built-in kernels __cl_copy_region_align4;__cl_copy_region_align16;__cl_cpy_region_unalign_same_offset;__cl_copy_region_unalign_dst_offset;__cl_copy_region_unalign_src_offset;__cl_copy_buffer_rect;__cl_copy_image_1d_to_1d;__cl_copy_image_2d_to_2d;__cl_copy_image_3d_to_2d;__cl_copy_image_2d_to_3d;__cl_copy_image_3d_to_3d;__cl_copy_image_2d_to_buffer;__cl_copy_image_3d_to_buffer;__cl_copy_buffer_to_image_2d;__cl_copy_buffer_to_image_3d;__cl_fill_region_unalign;__cl_fill_region_align2;__cl_fill_region_align4;__cl_fill_region_align8_2;__cl_fill_region_align8_4;__cl_fill_region_align8_8;__cl_fill_region_align8_16;__cl_fill_region_align128;__cl_fill_image_1d;__cl_fill_image_1d_array;__cl_fill_image_2d;__cl_fill_image_2d_array;__cl_fill_image_3d;
Device Available Yes
Compiler Available Yes
Linker Available Yes
Device Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_icd
NULL platform behavior
clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...) Intel Gen OCL Driver
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...) Success [Intel]
clCreateContext(NULL, ...) [default] Success [Intel]
clCreateContext(NULL, ...) [other] <error: no devices in non-default plaforms>
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU) Success (1)
Platform Name Intel Gen OCL Driver
Device Name Intel(R) HD Graphics Haswell Ultrabook GT2 Mobile
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL) Success (1)
Platform Name Intel Gen OCL Driver
Device Name Intel(R) HD Graphics Haswell Ultrabook GT2 Mobile
ICD loader properties
ICD loader Name OpenCL ICD Loader
ICD loader Vendor OCL Icd free software
ICD loader Version 2.2.3
ICD loader Profile OpenCL 1.2
Ergänzung ()
beignet selber Kompillieren schlägt fehl. Es gibt extrem viele Warnings und nach kurzer Zeit (weniger als 20%) wird ganz abgebrochen. Die Menge der Warnings und Fehler beim Linken lässt mich davon Abstand nehmen in diesen Weg noch mehr Arbeit zu stecken. Die potentiellen Vorteile sind zum langfristigem Aufwand zu groß. Ich ersetze ungern Pakete, die es in den Quellen gibt mit eigenem Kompilat, wenn der Ausgangspunkt derart instabil ist (im ernst, egal ob libclang 3.4, 3.5 oder 3.6 da werden so viel Warnings und Fehler geworfen obwohl ich mich sklavisch an die Anleitung gehalten habe, dass selbst wenn es durchlaufen würde, Instabilitäten zu erwarten sind!)
Ergänzung ()
Ich hab mal etwas gesucht und ein OpenCL Tutorial für meine Zwecke umgewidmet. Source:
CL_DEVICE_TYPE_xxx in main.c kann abgeändert werden wobei "xxx" mit "ALL", "CPU", und "GPU" abgeändert werden sollte. All sollte CPU und wenn verfügbar die GPU nutzen, CPU/GPU sind entsprechend Begrenzungen auf eben Jene.
Ergebnis für den Desktoprechner mit der 270X ist, dass das Programm auf exklusiv CPU und GPU läuft, jedoch keine nennenswerten Laufzeitunterschiede feststellbar sind. Problematisch wird das Ganze bei exklusiver GPU Nutzung, wenn die For-Schleife größer wird, friert der ganze Rechner ein. Je nach Größe verrechnet sich bei exklusiver CPU Nutzung das Programm mitunter jedoch massiv, während die GPU richtig rechnet. Vertrauen schafft das nicht!
Auf dem Notebook mit der Intel IGP kommt eine Fehlermeldung bei der GPU Nutzung:
"drm_intel_gem_bo_context_exec() failed: invalid argument"
Das Programm läuft danach jedoch durch.
An der Stelle ist Schluss für Heute. Mein Zwischenfazit: OpenCL unter Linux ist ohne Einschränkung für den Produktivbetrieb anscheinend nicht zu gebrauchen.
Edit: OK Fehlermeldung in die Suchmaschine schmeißen musste noch sein!
Der Fehler ist bekannt und ist bisher angeblich nur dadurch zu beheben, indem man einen Kernelpatch einspielt. Dieser bricht die Kompatibilität mit den Kernelupdates aus den Repos und deaktiviert Sicherheitsfeatures des Kernels. Wenn Keiner mit einer sauberen Lösung um die Ecke kommt ist das Ganze hiermit beendet!