OpenCL:MQL5での内部実装テスト - ページ 52

 
joo:
データを含む2次元/多次元配列をGPUに渡す場合は、データ表現を構造体の形にして、その構造体を渡せばいいということですね?

構造を通して試したところ、うまくいきました。多次元配列を このような方法で渡すとは、私自身想像もしていませんでした :)ありがとうございます。

2次元配列を使用した小さな例を添付しますが、問題なく動作します。この例は少し曲がっていますが、一般的にはこのような曲解の可能性をよく示しています :)

PS: あなたのUGA + OpenCL - それだけでは感情が足りません :) 昔はどうやって生きていたのか - 思い出すと恐ろしい...。

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

PS:あなたのUGA+OpenCLは、まさに無感動です。 :) 昔はどうやって生きていたのか、思い出すと不気味です...。

ありがとうございます、気に入っていただけたようで良かったです。そして、この場を借りて、Ilyas Sharapov(mql5)に「こんにちは、ありがとう」と言いたいです。
 

CL_DEVICE_ANYと CL_DEVICE_GPUは 廃止?

CL_USE_ANYと CL_USE_GPU_ONLYは 今関係あるのでしょうか?

 
joo:

CL_DEVICE_ANYと CL_DEVICE_GPUは 廃止?

CL_USE_ANYと CL_USE_GPU_ONLYは 今関係あるのでしょうか?

はい。
 
MetaDriver:
はい。

Tychkov教授の方法で、私のコンピュータにCL_USE_ANYより 速く、CL_USE_GPU_ONLYより さらに速い不思議なデバイス1を 発見しました。

何ですか?:O

 
joo:

Tychkov教授の方法で、CL_USE_ANYより 速く、CL_USE_GPU_ONLYより さらに速く動作する不思議なデバイス1を 私のコンピュータで発見した。

何ですか?:O

統計をお願いします。すべてのデバイスに対応。:)
 
MetaDriver:
ボード上の統計情報すべてのデバイスに対応。:)
CL_USE_ANY

2012.04.12 23:27:29 Struct_OpenCL (GBPUSD,H1) GPYと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時間=141ms

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


cl_use_gpu_only。

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) GPYと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時間=125ms

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


1

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) GPYと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時間=78ms

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


皆さんも私と同じように試してみてください。無力なディスクリートグラフィックスよりも速いデバイスを見つけることができる可能性は十分にあります。:D


PS.CL_USE_ANYと CL_USE_GPU_ONLYは 同じ、つまりCPUで計算し、デバイス1は私のGPUであることを疑っています。標準定数の初歩的な混乱です。

 
joo:

皆さんも私のようにいじってみてください、きっと無駄なディスクリートグラフィックスより速いデバイスが見つかるはずです。:D

PS.CL_USE_ANYと CL_USE_GPU_ONLYは 同じものだと思われます。CPUの計算ですが、デバイス1が私のGPUなのです。標準定数の初歩的な混乱です。

読んだ感想は こちら!端末のヘルプになかった!?これらの変更を反映させるために、コードを微調整しました。ご覧ください。こんな感じで持っています。

23:17:00 SPU時間=1155ms
23:17:01 OpenCLが有効なデバイスの合計: 2
23:17:02 GPU時間#0 = 249 ms
23:17:02 cpy/gpu #0 = 4.639
23:17:03 GPU #1 時間 = 265 ms
23:17:03 cpy/gpu #1= 4.358

GPU:Advanced Micro Devices, Inc.OpenCL 1.1搭載タークス(6基、725MHz、1024Mb、バージョンCAL 1.4.1703 (VM)
CPU:純正Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz OpenCL 1.1 (4 units, 2095 MHz, 5990 Mb, version 2.0) 搭載。
ファイル:
 
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:

この構造を使ってみてください、私の場合はうまくいきませんでした(2番目の次元は固定サイズでなければならないのではと思います。)

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

そして、便宜上、両方の寸法を変更するために、このような機能があります。

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