캔버스 멋지다! - 페이지 16

 

현재 프로세서 수준에서는 이중 수학의 브레이크를 잊을 수 있습니다. 브레이크가 없습니다.

그리고 정수로 옮기는 최적화 방법은 이미 구식입니다. 수학에서 얻는 것보다 변환에서 잃는 것이 훨씬 더 많습니다.


64비트 코드와 컴파일러를 고려할 때 이중 계산을 기반으로 하는 작업 클래스의 정수를 잊어버려야 합니다.

다음은 Nikolay의 최적화 시도를 분석한 이전 예입니다. https://www.mql5.com/en/forum/1111/page2164#comment_6796332

컴파일러 는 서로 다른 표현식 의 2개의 64비트 이중근 계산을 하나의 128비트 어셈블러 명령어로 결합했습니다. 이중 수학으로 작업할 때 정수 유형으로 점프/변환하는 것을 강력히 권장하지 않습니다. 변환에 야생 프로세서(저희가 아님) 오버헤드 헤드가 있습니다.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.03.11
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Nikolai Semko :

반올림할 필요가 없습니다

다음은 좋은 예로서 여러분을 위한 스크립트입니다.

기본 매개변수로 먼저 실행(매끄러운 원 및 이중 좌표 및 치수 포함)

그런 다음 매개변수 typ = not_smoothed_circles(평활화되지 않은 원 및 int 유형의 좌표 및 크기 - CCanvas 클래스에서)로 실행합니다.

그것은 훌륭하게 밝혀졌습니다.

앤티 앨리어싱이 없는 초당 347 프레임과 2100x550 픽셀의 캔버스에 앤티 앨리어싱이 있는 97 프레임이 있습니다.

참고로 초당 500프레임의 창 업데이트 속도 제한기가 있습니다. 이것은 그래픽에서 얼마나 많은 성능을 얻을 수 있는지 보여줍니다.

 
Renat Fatkhullin :

현재 프로세서 수준에서는 이중 수학의 브레이크를 잊을 수 있습니다. 브레이크가 없습니다.

그리고 정수로 옮기는 최적화 방법은 이미 구식입니다. 수학에서 얻는 것보다 변환에서 잃는 것이 훨씬 더 많습니다.


64비트 코드와 컴파일러를 고려할 때 이중 계산을 기반으로 하는 작업 클래스의 정수를 잊어버려야 합니다.

다음은 Nikolay의 최적화 시도를 분석한 이전 예입니다. https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

컴파일러 는 서로 다른 표현식 의 2개의 64비트 이중근 계산을 하나의 128비트 어셈블러 명령어로 결합했습니다. 이중 수학으로 작업할 때 정수 유형으로 점프/변환하는 것을 강력히 권장하지 않습니다. 변환에 야생 프로세서(저희가 아님) 오버헤드 헤드가 있습니다.

틱을 정수로 만들면 "테스터"가 훨씬 빠르게 작동하기 시작할 것이라고 거의 확신합니다.

 
Artyom Trishkin :

아니요, 이것은 모핑이 아닙니다. 스트레칭으로 모핑이라고 부를 수 있습니다.


일반적으로 실제를 직접 만들기에는 너무 게으르며 예제 폴더에서 찾았습니다.

모핑, 말 그대로 - 살인.

 
fxsaber :

틱을 정수로 만들면 "테스터"가 훨씬 빠르게 작동하기 시작할 것이라고 거의 확신합니다.

Elena Yurievna가 말했듯이 말은 이해합니다.

 
Nikolai Semko :

Doom에서 영감을 얻었고 @fxsaber 의 조언을 받았습니다.

이 사이트 의 알고리즘은 약간의 수정과 함께 기본으로 사용되었습니다.

정말 멋진!

사진 뭐하는거야, 니콜라이?

 
fxsaber :

틱을 정수로 만들면 "테스터"가 훨씬 빠르게 작동하기 시작할 것이라고 거의 확신합니다.

아니요.

시작하려면 다음 사항을 알아두십시오.

  1. 모든 것이 int로 변환되어야 합니다.
  2. 데이터 변환에 여러 브레이크를 걸다
  3. 야생 메모리 소비 얻기
  4. 각 작업에서 오버플로 및 전체 시스템 사망의 100% 확률을 얻습니다.
  5. 지표를 읽겠다고 제안한 개발자를 완전히 무시하고 모든 작업은 double 대신 int로 작동합니다.
  6. 그리고 예, 속도면에서 double과 int 사이에는 차이가 없습니다. 믿기 어렵지만 그렇습니다
나는 위의 증거를 헛되이 인용하지 않았다. 거기에서 Nikolai는 미리 계산된 루트 테이블을 통해 최적화 방법을 적용하려고 했지만 프로세스에서 이중 루트의 실시간 계산에 실패했습니다.
 
Алексей Тарабанов :

모핑, 말 그대로 - 살인.

여기서 논의할 가치는 없지만 여전히 Morphing (영어 모핑 - 변형) 죽은 사람을 어디에서 보았습니까? 정신 차려 ...

 
Artyom Trishkin :

여기서 논의할 가치는 없지만 여전히 Morphing (영어 모핑 - 변형) 죽은 사람을 어디에서 보았습니까? 정신 차려 ...

형태 분석 - 죽은 세포 분석. 먼저 우리는 현미경으로 죽입니다.

 
Renat Fatkhullin :

아니요.

 #define BENCH(A)                                                              \
{                                                                             \
   const ulong StartTime = GetMicrosecondCount ();                              \
  A;                                                                          \
   Print ( "Time[" + #A + "] = " + ( string )( GetMicrosecondCount () - StartTime)); \
}  

template < typename T>
T Tester( const int Amount = 1 e7 )
{
  T Sum = 1 ;
  T Price = 1 ;
  
   for ( int i = 0 ; i < Amount; i++)
  {
    Price = 1 - Price;
    
    Sum += (Sum > Price) ? 1 : 0 ;
  }
  
   Print (Sum);
  
   return (Sum);
}

void OnStart ()
{
  BENCH(Tester< int >());
  BENCH(Tester< double >());
}


Int는 double보다 두 배 빠릅니다.

 10000001
Time [Tester< int >()] = 25523
10000001.0
Time [Tester< double >()] = 51253