Hallo!
Danke für die Hinweise zu dem Kernel und der Paralellisierung!! Hatte mich schon gefragt wieso jedes mal andere Ergebnisse zustande kommen - Der Kernel selber konnte es nicht sein, das gibt es nichts zum falsch machen... Aber es wird jetzt immer besser mit OCL
>Gibst mir so eine Aufgabe, und wartest nichtmals das Wochenende ab...< Hatte mich extra damit beschäftigt weil ich mich darüber geärgert hatte, Habe 3 weitere Kernel geschrieben und den 4ten spare ich mir jetzt... Ich hänge das Script jetzt aus Trotz an
Ausserdem habe ich den 2ten Kernel vom vorigen Script lauffähig bekommen Es wird endlich richtig gezählt, aber die Auswertung folgt noch in Au3 und benötigt entsprechend viel Zeit. Gibt es vielleicht noch einen besseren (schnelleren) Weg die Daten zu sortieren?
Ich kläre diese Woche das Kompressionsscript, und prüfe mal welche Teile sich dafür eignen. Das war ja eh in meinem Sinn das Ding Aufzurollen. Die Standartmethode sollte jedoch gut umsetzbar sein, aber ich fände es trotzdem schön so nah an dem Orginal wie möglich zu bleiben...
Wenn man eine Lastanalyse für einen Kernel auf allen Devices durchführen möchte, dann muß ich doch so vorgehen das der Kernel auf jedem Device einzeln für nur einige Durchläufe ausgeführt werden soll - dabei die Zeit stoppen. Kann ich das z.B. so in etwa machen '_CL_RunKernel(StringLen($sInput) / 100, 0)' oder muß ich den Kernel extra dafür anpassen?
Theoretisch kann man Kernel im vorraus so Planen, das diese Multi fähig sind. Aber ich würde noch gerne 'Clustern' also alle OCL-Devices nutzen können (CPU/GPU Mix) - ich weiß inzwischen auch wie ich mit diesen umgehen muß
OpenCL Update
Hatte mich vielleicht undeutlich ausgedrückt
Vor dem Update:
>Device verfügbar= 1;1;2;CPU;Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz;18910080;18975064
>Device verfügbar= 2;1;4;GPU;GeForce GTX 460;57417256;57417200
>Device verfügbar= 2;2;4;GPU;GeForce GTX 460;9218672;57417200
CPU: _CL_GetDevice("cpu", 1,1)
GPU1: _CL_GetDevice("gpu", 2,1)
GPU2: _CL_GetDevice("gpu", 2,2)
Nach Update - Versuch 1:
>Device verfügbar= 1;1;4;GPU;GeForce GTX 460;57417256;57417200
>Device verfügbar= 1;2;4;GPU;GeForce GTX 460;9218672;57417200
>Device verfügbar= 2;1;2;CPU;Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz;18910080;18975064
CPU: _CL_GetDevice("cpu", 1,2)
GPU1: _CL_GetDevice("gpu", 1,1)
GPU2: _CL_GetDevice("gpu", 2,1)
Nach Update - Versuch 2:
Update auf: Nvidia (344.60), Intel (intel_sdk_for_ocl_applications_2014_x64):
32Bit:
>Device verfügbar= 1;1;2;CPU;Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz;46960640;46867144
>Device verfügbar= 2;1;4;GPU;GeForce GTX 460;69475744;69468584
>Device verfügbar= 2;2;4;GPU;GeForce GTX 460;69475800;69468584
64Bit:
WARNING: Linking two modules of different data layouts!
WARNING: Linking two modules of different target triples: C:\Program Files (x86)\Common Files\Intel\OpenCL\bin\common\clbltfnshared.rtl: 'i686-pc-win32-elf' and 'x86_64-pc-win32-elf'
>Device verfügbar= 1;1;2;CPU;Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz;43352304;42695744
>Device verfügbar= 2;1;4;GPU;GeForce GTX 460;45596064;44965392
>Device verfügbar= 2;2;4;GPU;GeForce GTX 460;45596176;44965392
CPU: _CL_GetDevice("cpu", 1,1)
GPU1: _CL_GetDevice("gpu", 1,2)
GPU2: _CL_GetDevice("gpu", 2,2)
Alles anzeigen
Nach erneuter Neu-Installation aller OpenCL Komponenten, hat sich der Fehler immer noch nicht ganz geklärt...
So wie ich das sehe, hat das Update die komplette OCL-Installation durcheinander gebracht...
$num_device_used und $num_platform_used sind vertauscht, deswegen geht kein _cl_GetALLDevice("multi") mehr bei mir!
Seltsammerweise funktioniert aber _CL_GetALLDevice2("multi") mit $all=1 bei mir, _CL_GetALLDevice2("cpu") und $all=0 jedoch nicht... (aus 'tunnel_forum_ALL2.au3')
Die Aufrufe für die Grafikkarten muss ich umbedingt wieder so hinbiegen, wie sie zum Anfang waren - Das sorgt für Probleme bei der Multi Verwendung! Kennst du vielleicht irgendwelche Reg-Key´s (oder so) wo ich händisch eintragen kann wie die DeviceID´s auf die Platformen verteilt werden???
Grüsse!
P.S:
Diesmal hänge ich das Script an, zerstört sonst immer die Formatierung... Die Funktion 'CountChar_OCL2()' enthällt den zählenden Kernel, die anderen Funktionen sind experimentell.