OpenCL: testes internos de implementação em MQL5 - página 52

 
joo:
Presumo que se quisermos passar uma matriz bidimensional/multidimensional com dados para a GPU, podemos usar a representação de dados sob a forma de uma estrutura e passar a estrutura?

Experimentei-o através de uma estrutura - funcionou! Eu próprio nunca teria adivinhado que passaria por matrizes multidimensionais desta forma :) Obrigado!

Anexei um pequeno exemplo, utilizando matrizes bidimensionais - funciona muito bem. O exemplo é um pouco torto - mas em geral demonstra bastante bem a possibilidade de tal perversão :)

PS: A sua UGA + OpenCL - não é emoção suficiente :) Como costumávamos viver - é terrível recordar...

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

PS: A sua UGA + OpenCL não é emoção nenhuma. :) Como costumávamos viver é sinistro recordar...

Obrigado, fico contente por gostar. E aproveitando a oportunidade, gostaria de dizer olá e muito obrigado a Ilyas Sharapov(mql5).
 

CL_DEVICE_ANY e CL_DEVICE_GPU obsoletos?

Será que CL_USE_ANY e CL_USE_GPU_ONLY são agora relevantes?

 
joo:

CL_DEVICE_ANY e CL_DEVICE_GPU obsoletos?

Será que CL_USE_ANY e CL_USE_GPU_ONLY são agora relevantes?

Sim.
 
MetaDriver:
Sim.

Descoberto pelo método do Prof. Tychkov um misterioso dispositivo 1 no meu computador, que é mais rápido que o CL_USE_ANY e até mais rápido que o CL_USE_GPU_ONLY.

O que é isso? :O

 
joo:

Encontrei um misterioso dispositivo 1 no meu computador, utilizando o método do Professor Tychkov, que corre mais rápido que o CL_USE_ANY e até mais rápido que o CL_USE_GPU_ONLY.

O que é isso? :O

Estatísticas, por favor. Para todos os dispositivos. :)
 
MetaDriver:
Estatísticas no quadro. Para todos os dispositivos. :)
CL_USE_ANY

2012.04.12 23:27:29 Struct_OpenCL (GBPUSD,H1) Diferença no cálculo entre GPY e 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) Tempo GPU = 141 ms

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


CL_USE_GPU_ONLY

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) Diferença no cálculo entre GPY e 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) Tempo GPU = 125 ms

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


1

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) Diferença no cálculo entre GPY e 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) Tempo GPU = 78 ms

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


Recomendo a todos que tentem da mesma forma que eu, é bem possível que encontrem um dispositivo mais rápido do que os gráficos discretos e indefesos. :D


PS. Suspeito que CL_USE_ANY e CL_USE_GPU_ONLY são o mesmo - cálculo no CPU, mas o dispositivo 1 é o meu GPU. É uma confusão elementar nas constantes padrão.

 
joo:

Recomendo a todos que mexam com ele como eu fiz, provavelmente encontrarão um dispositivo mais rápido do que os gráficos discretos inúteis. :D

PS. Suspeito que CL_USE_ANY e CL_USE_GPU_ONLY são a mesma coisa - é um cálculo de CPU, mas o dispositivo 1 é o meu GPU. É uma confusão elementar nas constantes padrão.

Eis o que eu li! Não estava na ajuda do terminal! Ajustou o código para reflectir estas alterações. Veja o que obtém. Tenho-o assim:

23:17:00 hora SPU = 1155 ms
23:17:01 Total de dispositivos OpenCL activados: 2
23:17:02 Hora GPU #0 = 249 ms
23:17:02 CPY/GPU #0 = 4,639
23:17:03 GPU #1 Tempo = 265 ms
23:17:03 CPY/GPU #1= 4.358

GPU: Advanced Micro Devices, Inc. Turcos com OpenCL 1.1 (6 unidades, 725 MHz, 1024 Mb, versão CAL 1.4.1703 (VM))
CPU: GenuineIntel Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz com OpenCL 1.1 (4 unidades, 2095 MHz, 5990 Mb, versão 2.0)
Arquivos anexados:
 
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:

Tente usar esta estrutura, não funcionou para mim (suspeito que a segunda dimensão tem de ser um tamanho fixo, é por isso que não funcionou para mim):

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

E, por conveniência, uma função como esta para redimensionar ambas as dimensões:

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