OpenCL: interne Implementierungstests in MQL5 - Seite 52

 
joo:
Ich nehme an, dass, wenn wir ein zweidimensionales/mehrdimensionales Array mit Daten an die GPU übergeben wollen, wir die Datendarstellung in Form einer Struktur verwenden und die Struktur übergeben können?

Ich habe es über eine Struktur versucht - es hat funktioniert! Ich wäre selbst nie auf die Idee gekommen, mehrdimensionale Arrays auf diese Weise zu übergeben :) Danke!

Ich habe ein kleines Beispiel beigefügt, bei dem zweidimensionale Arrays verwendet werden - es funktioniert einwandfrei. Das Beispiel ist ein wenig schief - aber im Allgemeinen zeigt es die Möglichkeit einer solchen Perversion ganz gut :)

PS: Ihr UGA + OpenCL - es ist einfach nicht genug Emotionen :) Wie wir früher gelebt haben - es ist schrecklich, sich daran zu erinnern...

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
Dateien:
 
MigVRN:

PS: Dein UGA + OpenCL ist einfach kein Gefühl :) Wie wir früher gelebt haben, ist unheimlich...

Vielen Dank, ich bin froh, dass es Ihnen gefällt. Bei dieser Gelegenheit möchte ich Ilyas Sharapov(mql5) Hallo und vielen Dank sagen.
 

CL_DEVICE_ANY und CL_DEVICE_GPU sind veraltet?

Sind CL_USE_ANY und CL_USE_GPU_ONLY jetzt relevant?

 
joo:

CL_DEVICE_ANY und CL_DEVICE_GPU sind veraltet?

Sind CL_USE_ANY und CL_USE_GPU_ONLY jetzt relevant?

Ja.
 
MetaDriver:
Ja.

Durch die Methode von Prof. Tychkov habe ich ein mysteriöses Gerät 1 in meinem Computer entdeckt, das schneller ist als CL_USE_ANY und sogar schneller als CL_USE_GPU_ONLY.

Was ist das? :O

 
joo:

Ich habe ein mysteriöses Gerät 1 in meinem Computer gefunden, das mit der Methode von Professor Tychkov schneller läuft als CL_USE_ANY und sogar schneller als CL_USE_GPU_ONLY.

Was ist das? :O

Die Statistik, bitte. Für alle Geräte. :)
 
MetaDriver:
Statistiken auf der Tafel. Für alle Geräte. :)
CL_USE_ANY

2012.04.12 23:27:29 Struct_OpenCL (GBPUSD,H1) Differenz in der Berechnung zwischen GPY und CPY: 0.0
2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 1.326
2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) GPU-Zeit = 141 ms

2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) SPU Zeit = 187 ms


CL_USE_GPU_ONLY

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) Differenz in der Berechnung zwischen GPY und CPY: 0.0
2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 1.376
2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) GPU-Zeit = 125 ms

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) SPU Zeit = 172 ms


1

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) Differenz in der Berechnung zwischen GPY und CPY: 0.0
2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 2.397
2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) GPU time= 78 ms

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) SPU Zeit = 187 ms


Ich empfehle jedem, es auf die gleiche Weise wie ich zu versuchen, es ist durchaus möglich, dass Sie ein schnelleres Gerät als die hilflose diskrete Grafik finden werden. :D


PS. Ich vermute, dass CL_USE_ANY und CL_USE_GPU_ONLY dasselbe sind - Berechnung auf der CPU, aber Gerät 1 ist meine GPU. Es handelt sich um eine elementare Verwechslung bei den Standardkonstanten.

 
joo:

Ich empfehle jedem, damit herumzuspielen, wie ich es getan habe, Sie werden wahrscheinlich ein schnelleres Gerät als die nutzlose diskrete Grafik finden. :D

PS. Ich vermute, dass CL_USE_ANY und CL_USE_GPU_ONLY dasselbe sind - es ist eine CPU-Berechnung, aber Gerät 1 ist meine GPU. Es handelt sich um eine elementare Verwechslung bei den Standardkonstanten.

Hier ist , was ich gelesen habe! Das stand nicht in der Hilfe des Terminals! Der Code wurde angepasst, um diese Änderungen zu berücksichtigen. Sehen Sie, was Sie bekommen. Ich habe es so verstanden:

23:17:00 SPU-Zeit = 1155 ms
23:17:01 OpenCL-aktivierte Geräte insgesamt: 2
23:17:02 GPU Zeit #0 = 249 ms
23:17:02 CPY/GPU #0 = 4.639
23:17:03 GPU-Zeit #1 = 265 ms
23:17:03 CPY/GPU #1= 4.358

GPU: Advanced Micro Devices, Inc. Türken mit OpenCL 1.1 (6 Einheiten, 725 MHz, 1024 Mb, Version CAL 1.4.1703 (VM))
CPU: Original Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz mit OpenCL 1.1 (4 Einheiten, 2095 MHz, 5990 Mb, Version 2.0)
Dateien:
 
2012.04.12 22:37:07     OpenCL  GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 296.10)
2012.04.12 22:37:07     OpenCL  CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2998 MHz, 2048 Mb, version 2.0)
2012.04.12 22:39:46     Struct_OpenCL__1 (EURUSD,H1)    Время СPU = 686 ms
2012.04.12 22:39:47     Struct_OpenCL__1 (EURUSD,H1)    Всего устройств c возможностями OpenCL: 2
2012.04.12 22:39:50     Struct_OpenCL__1 (EURUSD,H1)    Время GPU №0 = 172 ms
2012.04.12 22:39:50     Struct_OpenCL__1 (EURUSD,H1)    CPY/GPU №0= 3.988
2012.04.12 22:39:51     Struct_OpenCL__1 (EURUSD,H1)    Время GPU №1 = 406 ms
2012.04.12 22:39:51     Struct_OpenCL__1 (EURUSD,H1)    CPY/GPU №1= 1.690
 
MigVRN:

Versuchen Sie, diese Struktur zu verwenden, bei mir hat es nicht funktioniert (ich vermute, die zweite Dimension muss eine feste Größe haben, deshalb hat es bei mir nicht funktioniert):

struct Array2dFloat
{
  float Column[];
  int LineCount(int lineCount)
  {
    int size = ArrayResize(Column,lineCount);
    ArrayInitialize(Column,0.0);
    return(size);
  }
};

Und, der Einfachheit halber, eine Funktion wie diese, um die Größe beider Dimensionen zu ändern:

void ArrayResize2DArrayFloat(Array2dFloat &ArrayOfArray[], int columnCount,int lineCount)
{
  // разбивка по вертикали
  ArrayResize(ArrayOfArray,columnCount);
  // разбивка по горизонтали
  for(int i=0;i<columnCount;i++)
    ArrayOfArray[i].LineCount(lineCount);
}
Grund der Beschwerde: