DLL 없이 MetaTrader 5 터미널에서 직접 OpenCL로 할 수 있는 일은 다음과 같습니다. - 페이지 5

 
Renat Fatkhullin :

이러한 배경에서 AMD는 분명히 더 빠른 수학 계산(AMD의 광부 농장이 일반적으로 수집)뿐만 아니라 공개 표준 전략(많은 것을 공개하고 대중에게 홍보)으로 인해 유리해 보입니다. AMD 카드에 OpenCL 2.0이 도입되면서 이 사양은 CUDA의 기능에 매우 근접했으며 이제 CUDA에 의존하는 것은 의미가 없습니다 .

이것은 유용한 정보입니다. 그렇지 않으면 약 7년 전에 CUDA를 사용했지만 여전히 규칙적이라고 생각했습니다.

질문 - OpenCL에서 디버거는 어떻습니까? MT5 터미널에 대해 말하는 것이 아니라 일반적인 용어로 말하는 것입니다. 지금까지 Visual Studio 용 플러그인 및 독립 실행형 디버거(더 이상 사용되지 않음)인 Intel의 디버거만 보았습니다. 그러나 Intel의 프로세서와 통합 그래픽에 대한 선명도가 특히 높아진 것 같습니다. 그리고 일반적으로 병렬 코드를 디버깅하는 방법을 이해하지 못합니다. 저에게는 여전히 순수한 블랙박스입니다.

 

Nvidia 카드의 명시적 존재를 요구할 수 있는 특정 영역 또는 자신을 위해서만 CUDA로 작업할 수 있습니다.

예, CUDA에는 더 많은 기능이 있었습니다. 그러나 OpenCL 2.0이 포함된 AMD 하드웨어가 출시되고 OpenCL 2.1의 새 버전이 출시됨에 따라 공급업체에 종속되는 것은 의미가 없습니다. 특히 이 공급업체가 기능을 축소하는 경우.

최대 적용 범위의 관점에서 볼 때 기존 프로세서에서 잘 작동하는 OpenCL이라는 하나의 선택만 있습니다. 즉, GPU의 무조건적인 존재를 요구하거나 GPU와 CPU에 대한 두 가지 버전의 코드를 작성할 필요가 없습니다. 작성된 OpenCL 코드는 다른 구성에서 작동합니다.

특수 디버거에서만 CUDA/OpenCL을 디버그할 수 있습니다. 여기에는 기적이 있을 수 없습니다.

 
Renat Fatkhullin :

예에서

if ((cl_ctx= CLContextCreate ())== INVALID_HANDLE )

사용 가능한 CPU 장치가 있는 구성에서 "OpenCL을 찾을 수 없음"이 표시됨

그래서 -

if ((cl_ctx= CLContextCreate (CL_USE_ANY))== INVALID_HANDLE )

공장

* 질문은 장치의 기본 선택입니다.

 

그렇다면 이 모든 것을 인용 없이 신성한 형태로 가질 수 있습니까? PPC는 지각과 창조에 얼마나 불편한가

그리고 신경망의 경우 이미 표준 클래스 가 있어야 하며 wellslab과 같은 opcl)을 즉시 사용할 수 있습니다.

"#define HL1Count "              + ( string )hl1NeuronCount + "                     \r\n"
           "#define HL2Count "              + ( string )hl2NeuronCount + "                     \r\n"
           //------------------------------------------------------------------------------------
           "#define NeuronSensitivity  "    + ( string )NeuronSensitivity_P + "                \r\n"
           //------------------------------------------------------------------------------------
           "#define sampleCount "           + ( string )sampleCount + "                        \r\n"
           //------------------------------------------------------------------------------------
           "#define signalCount "           + ( string )signalCount + "                        \r\n"
           //------------------------------------------------------------------------------------
           "#define StrArrSaSize "          + ( string )( sizeof (ArrSample) / sizeof ( float )) + "\r\n"
           "typedef struct{float C[StrArrSaSize];} ArrSa;                                   \r\n"
           //------------------------------------------------------------------------------------
           "#define StrArrWeSize "          + ( string )( sizeof (ArrWe) / sizeof ( float )) + "    \r\n"
           "typedef struct{float C[StrArrWeSize];} ArrWe;                                   \r\n"
           //------------------------------------------------------------------------------------
           "#define StrArrCrSize "          + ( string )( sizeof (ArrCr) / sizeof ( float )) + "    \r\n"
           "typedef struct{float C[StrArrCrSize];}ArrCr;                                    \r\n"
           //------------------------------------------------------------------------------------
           "#define Spread "                + ( string )(Spread_P * Point ()) + "               \r\n"
           //------------------------------------------------------------------------------------
           "#define Point "                 + ( string ) Point () + "                            \r\n"
           "#define SL "                    + ( string )(StopLoss_P * Point ()) + "             \r\n"
           "#define TP "                    + ( string )(TakeProfit_P * Point ()) + "           \r\n"
           //------------------------------------------------------------------------------------
           "                                                                                \r\n"
           "__kernel void Work(__global ArrSa *Sample,                                      \r\n"
           "                   __global ArrWe *Weights,                                     \r\n"
           "                   __global ArrCr *Result)                                      \r\n"
           "{                                                                               \r\n"
           "  int thread       = get_global_id(0);                                          \r\n"
           "                                                                                \r\n"
           "  //------------------Переменные нейронной сети---------------------------------\r\n"
 
Maxim Dmitrievsky :

그렇다면 이 모든 것을 인용 없이 신성한 형태로 가질 수 있습니까? PPC는 지각과 창조에 얼마나 불편한가

그리고 신경망의 경우 이미 표준 클래스 가 있어야 하며 wellslab과 같은 opcl)을 즉시 사용할 수 있습니다.

그럼 왜 안될까요? 보세요, MQL이 모르는 단일 특정 기능은 없습니다. MQL에서 OCL용으로 이 함수를 작성하고 디버깅한 다음 모든 것을 해킹했습니다. 코드 변환기를 OCL로 만들 수도 있지만 직접 하는 데에는 별 의미가 없습니다. 아마도 MQ가 그렇게 할 것입니다. 그러나 나는 그것을 의심합니다.
 
Renat Fatkhullin :

이것은 MQL5 코드의 GPU 계산뿐만 아니라 터미널의 그래픽 기능에 대한 데모입니다.

스크립트 형태의 전체 소스 코드가 첨부되어 있습니다. OpenCL 1.2의 버그가 수정되었습니다.

자수도 할 줄 압니다. 그리고 타자기에서... (c) 이 모든 것이 거래 단말기 를 위한 것입니까?
 
에이전트를 위해 클라우드로 이동합니까?
 
GKS :
에이전트를 위해 클라우드로 이동합니까?
아니다
 
GKS :
에이전트를 위해 클라우드로 이동합니까?
 

모든 것이 훌륭하지만! 일반적으로 OCL과 모든 병렬화 도구에는 큰 문제가 있습니다. 알고리즘의 아주 작은 부분을 효과적으로 병렬화할 수 있습니다. 병렬 컴퓨팅 의 예에서 파동의 모방, 파괴와 함께 피라미드에 공이 떨어지는 것, 즉 작은 입자로 쪼개질 수 있고 각각이 자체 프로세스에 따라 계산되는 모든 것이 그렇게 사랑받는 이유는 무엇입니까?

핸디캡/익스체인지에서는 물론 신경망, 푸리에, 웨이블릿, 필터 등과 같은 다양한 변환이며 모두 완벽하게 병렬입니다. 그러나 병렬화할 수 없는 선형 알고리즘이 있습니다. 일반적으로 알고리즘의 다음 단계의 결과가 이전 단계의 결과를 기반으로 하는 경우입니다.

나는 이제 2개의 멋진 비디오를 사고 모든 것이 내 테스터에서 날아갈 것이라고 생각하는 사람들을 위해 이것을 썼습니다.