OpenCL: MQL5의 내부 구현 테스트 - 페이지 20

 

코드가 추가됩니다:

ERR_OPENCL_NOT_SUPPORTED           5100     
ERR_OPENCL_INTERNAL                 5101
ERR_OPENCL_INVALID_HANDLE           5102
ERR_OPENCL_CONTEXT_CREATE           5103
ERR_OPENCL_QUEUE_CREATE             5104
ERR_OPENCL_PROGRAM_CREATE           5105
ERR_OPENCL_TOO_LONG_KERNEL_NAME     5106
ERR_OPENCL_KERNEL_CREATE           5107
ERR_OPENCL_SET_KERNEL_PARAMETER     5108
ERR_OPENCL_EXECUTE                 5109
ERR_OPENCL_WRONG_BUFFER_SIZE       5110
ERR_OPENCL_WRONG_BUFFER_OFFSET     5111
ERR_OPENCL_BUFFER_CREATE           5112
 
Rosh :

코드가 추가됩니다:

감사합니다. 그러면 핸들의 유효성을 검사하는 기능이 충분하지 않습니다.

CL 함수에서 포인터 자체가 아닌 포인터 값만 취하므로 포인터를 다른 위치에 저장할 때 잘못된 프로세스(컨텍스트, 버퍼, 프로그램 또는 핵심).

필요한 기능:

 bool CLCheckHandle( int handle);
 
또한 프로그래밍 방식으로 장치의 메모리 크기를 가져와야 합니다. 그렇지 않으면 메모리 유형이 프로세서의 연산보다 적은 메모리를 갖고 동시에 존재하는 모든 컨텍스트가 동일한 메모리를 사용합니다.
 
Urain :
또한 프로그래밍 방식으로 장치의 메모리 크기를 가져와야 합니다. 그렇지 않으면 메모리 유형이 프로세서의 연산보다 적은 메모리를 갖고 동시에 존재하는 모든 컨텍스트가 동일한 메모리를 사용합니다.

로드를 처리하기 위해 표준 mql 도구를 사용하여 카드(그리고 CPU도)의 온도를 얻는 것이 좋을 것입니다.

// 그리고 여기서 정말 헤어졌어요.. :)

 
MetaDriver :
이 스레드를 실제로 읽는 사람이 있습니까? 독백을 게시하는 것과 같습니다. :)
 
OpenCL에는 GPU의 온도와 부하를 가져오는 기능이 없습니다.
OpenCL 개체의 속성을 가져오는 기능이 곧 제공될 예정입니다.
우리는 또한 핸들 검사를 구성할 것입니다.
 
mql5 :
1. OpenCL에는 GPU의 온도와 부하를 가져오는 기능이 없습니다.
2. OpenCL 개체의 속성을 가져오는 기능이 곧 제공될 예정입니다.
3. 우리는 또한 핸들의 점검을 구성할 것입니다.

1. 알아요. OpenCL을 통해 필요하지 않고 시스템을 통해 필요합니다. 아이디어는 기능을 기본으로 만드는 것입니다(mql5 프로그램에서 DLL 호출 없이).

다음은 몇 가지 훌륭한 기능입니다.

터미널 정보 정수

mql5 프로그램 환경의 해당 속성의 정수 유형 값을 반환합니다.

터미널 정보 문자열

mql5 프로그램 환경의 해당 속성의 문자열 유형 값을 반환합니다.

MQL5Info정수

실행 중인 mql5 프로그램의 해당 속성에 대한 정수 유형 값을 반환합니다.

MQL5InfoString

실행 중인 mql5 프로그램의 해당 속성의 문자열 유형 값을 반환합니다.

그것들에 다음을 추가하는 것은 훌륭하고 논리적일 것입니다:

SystemInfoInteger 및 그에 따라

시스템 정보 문자열

코어 수, 운영 체제의 이름 및 비트 수, 메모리 양(총), 사용 가능한(사용 가능한) 메모리 양(RAM 및 디스크) 등 시스템 환경에 대한 필요한 정보를 얻을 수 있는 기능 . 등.

그럼에도 불구하고 끝없는 영원의 공간에서 터미널은 작동하지 않습니다. 그리고 어떻게 든 그것은 모래처럼 보입니다.

2, 3. 건배.

4. 두 시작 오프셋(mql 어레이의 오프셋과 cl 버퍼의 오프셋 모두)을 나타내는 버퍼(cl_Read/WriteBuffer)를 정상적으로 호출해야 합니다. 그렇지 않으면 거의 모든 배열을 두 번 복사해야 합니다. 필요합니까? 글쎄, 우리는 빈에서 빈으로 다시 쓰는 데 시간을 낭비하기 위해 OpenCL로 작성하지 않습니다. 공정하지 않다. :)

 
MetaDriver :
...

4. 두 시작 오프셋(mql-array 오프셋 및 cl-buffer의 오프셋 모두)을 지정하여 버퍼(cl_Read/WriteBuffer)를 정상적으로 호출해야 합니다. 그렇지 않으면 거의 모든 배열을 두 번 복사해야 합니다. 필요합니까? 비어 있는 상태에서 비어 있는 상태로 다시 쓰는 데 시간을 낭비하기 위해 OpenCL로 글을 쓰는 것이 아닙니다. 공정하지 않다. :)

당신이 의미하는 바를 지정하십시오.

필요한 경우, 나는 아직 당신이 설명하는 상황에 직면하지 않았습니다.

 
Urain :

당신이 의미하는 바를 지정하십시오.

필요한 경우, 나는 아직 당신이 설명하는 상황에 직면하지 않았습니다.

괜찮아요. 다음은 최근의 예입니다. Ema 가족 만들기

...........  
 while (limit/(cl_BufLength- 1 )> 0 )
     {
       for ( int i= 0 ;i<CountLine;i++)
         {
          dOut[i] =EmaBuffer[i].B[limit];   // переписываем начальные значения Ema
                            // в промежуточный массив, поскольку напрямую с указанного смещения 
                            // загрузить в буфер невозможно.
         }
       CLBufferWrite(cl_Mem_Out, dOut , 0 ,CountLine* sizeof ( double ));   // загружаем в gpu
       for ( int i= 1 ;i<cl_BufLength;i++)
         {
          dIn[i] =price[limit-i];                 // переписываем цены
                                                // То же самое с ценами.
         }
       CLBufferWrite(cl_Mem_In, dIn );   // загружаем в gpu

       CLExecute(cl_Krn, 1 ,kOfs,kWork);
.........
..........

이국적인 것은 필요하지 않습니다. 나는 단지 다음과 같기를 원한다:

int   ArrayCopy (
    void    dst_array[] ,        // куда копируем
    void    src_array[] ,        // откуда копируем
    int     dst_start=0 ,        // с какого индекса пишем в приемник
    int     src_start=0 ,        // с какого индекса копируем из источника
    int     cnt=WHOLE_ARRAY      // сколько элементов
   );

 
MetaDriver :

괜찮아요. 다음은 최근의 예입니다. Ema 가족 만들기

이국적인 것은 필요하지 않습니다. 나는 단지 다음과 같기를 원한다:

int   ArrayCopy (
    void    dst_array[] ,        // куда копируем
    void    src_array[] ,        // откуда копируем
    int     dst_start=0 ,        // с какого индекса пишем в приемник
    int     src_start=0 ,        // с какого индекса копируем из источника
    int     cnt=WHOLE_ARRAY      // сколько элементов
   );



네, 알겠습니다. 알고리즘의 복잡성과 응용 프로그램의 메모리 오버런에 만족하지 않으신 것 같습니다.

 //Выполняет OpenCL программу.
bool   CLExecute( int           kernel,                 // хендл на кернел OpenCL
                 uint          work_dim,               // размерность пространства задач 
                 const uint &  global_work_offset[],   // начальное смещение индексов
                 const uint &  global_work_size[]     // общее количество индексов
                );

그리고 복사하는 단계에서도 이동할 수 있기를 원합니다.

ZY 100000개 요소를 복사한 다음 998000개 오프셋을 수행할 필요가 없었습니다. 그러나 오프셋이 있는 옵션은 그대로 두어야 합니다. 동일한 데이터를 여러 번 복사하지 않고 새 오프셋을 사용하여 이미 준비된 CL 버퍼에서 새 작업을 수행할 수 있기 때문입니다.

위협하고 크기 재분할을 추가하거나 CL 버퍼의 데이터 일부를 덮어쓸 수 있으면 좋을 것입니다. 그러면 모든 데이터를 중지하지 않고 틱에서 새로 수신된 데이터를 추가할 수 있습니다. 실시간으로 이것은 유용할 것 같지 않지만 테스터에서는 파도입니다.