그러나 작업 속도를 테스트할 때 상수로 초기화하면 테스트가 실행될 때 "가속"됩니다 - 코드 최적화 런타임 시 MQL 에서 제대로 작동하지 않음
일반적으로 이것은 두 번 이상 확인됩니다.
알렉산드르 안드레예프 :
그리고 많은 것들이 생성된 변수의 양에 달려 있습니다)))
물론, 메모리 할당은 런타임 측면에서 비싸고, 이미 확인했고, 동적으로 생성된 개체( 포인터 new ) 및 로컬 범위 의 개체만 테스트했습니다. 100500번 테스트할 때 시간은 new + delete까지 실행됩니다.
전체적인 질문은 변수에 대한 전역 가시성의 테스터에서 메모리가 모든 패스가 아니라 한 번 할당된다는 사실 때문에였습니다. 그러나 uint 배열이 필요하므로 내가 쓴 것이 아니라 그러한 스크립트로 테스트했습니다. 처음으로
알렉산드르 안드레예프 :
그리고 그러한 반복 횟수에 필요한 코드는 0ms가 걸립니다.
대답은 '아니오
또는 코드 최적화 프로그램이 불필요한 것을 잘라냅니다.
내 스크립트로 테스트 했습니까? - 테스트가 끝날 때까지 기다리지 않고 중단되었거나 ulong 오버플로됨 - 매크로의 첫 번째 매개변수는 10^ count입니다.
안드레이 트루하노비치 :
컴파일러가 두 경우 모두에 대해 동일한 코드를 생성했을 가능성이 높습니다. 이 경우 주관적으로 좋아하는 것을 선택하십시오.
예, 아마도 그렇게
일반적으로 질문은 무엇이었습니까? 최신 프로세서는 명령 파이프 라인의 최적화로 인해 한 사이클에서 둘 이상의 기본 작업을 수행 할 수 있다는 것을 반복해서 읽었습니다 .... 많은 bla-bla-bla .. . 요점은 프로세서가 예측할 수 없는 주기 수 동안 산술 명령을 실행한다는 것입니다.
그러나 분기 및 메모리 할당 작업은 프로세서에 의해 매우 최적화되지 않으므로 산술 단순화에서 최적화를 찾지 말고 분기를 최소화하여 가능한 한 선형 코드로 작성하려고 하며 변수를 선언하고 값을 할당하는 것이 좋습니다 계산 직전에 명령 파이프라인과 캐시 페치 예측이 이 코드를 최적화할 수 있도록 합니다.
저것들. 아마도 배열의 요소 값 선택(어드레싱)은 속도 면에서 중요하지 않을 것입니다. 여기서 나는 조합에 대해 교대 승리가 있을 것이라고 생각했는데, 모두
최적화할 때 더 빠르게 작동하는 변환 옵션
이것은 전체 패스에 대해 한 번만 호출합니다. 따라서 중요하지 않습니다.
이것은 전체 패스에 대해 한 번만 호출합니다. 따라서 중요하지 않습니다.
그래서 예 ...하지만 며칠 동안 최적화를 위해 컴퓨터를 실행할 것입니다. 어떤 식 으로든 성능을 측정하고 싶습니다 ..... 옵션 1이 더 효율적일 것이라고 생각하지만 배열에 100500번 복사
그래서 예 ...하지만 며칠 동안 최적화를 위해 컴퓨터를 실행할 것입니다. 어떤 식 으로든 성능을 측정하고 싶습니다 ..... 옵션 1이 더 효율적일 것이라고 생각하지만 배열에 100500번 복사
Union은 배열에 복사하는 것이 아니라 동일한 메모리 영역에 대한 다른 해석입니다. 따라서 두 번째 옵션이 더 빠를 가능성이 높지만 위에서 언급했듯이 중요하지 않습니다.
그래서 예 ...하지만 며칠 동안 최적화를 위해 컴퓨터를 실행할 것입니다. 어떤 식 으로든 성능을 측정하고 싶습니다 ..... 옵션 1이 더 효율적일 것이라고 생각하지만 배열에 100500번 복사
속도를 측정하는 오래된 방법이 있습니다
스타일
for (int i=0; i< 1000000; i++) {우리 코드1}....
for (int i=0; i< 1000000; i++) {우리 코드2}....
연합은 보이는 것만큼 빠르지 않습니다. 나는 첫 번째 것에 내기.
저도 먼저 올려요! 이항 연산자는 if 연산자보다 몇 배 빠르지만 두 번째 연산자에는 없습니다.
확인:
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst1 : : 루프=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst2 : : 루프 = 10000000000 ms = 10862287
큰 차이는 아니지만 테스트를 바꾸면 결과가 반대일 가능성이 높습니다.
일반적으로 중요하지 않습니다.
큰 차이는 아니지만 테스트를 바꾸면 결과가 반대일 가능성이 높습니다.
컴파일러가 두 경우 모두에 대해 동일한 코드를 생성했을 가능성이 높습니다. 이 경우 주관적으로 좋아하는 것을 선택하십시오.
확인:
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst1 : : 루프=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst2 : : 루프 = 10000000000 ms = 10862287
큰 차이는 아니지만 테스트를 바꾸면 결과가 반대일 가능성이 높습니다.
일반적으로 중요하지 않습니다.
난수를 생성하는 시간이 고르지 않을 수 있고 많은 것이 생성된 변수의 양에 따라 달라진다는 것을 보여주는 스크립트와 같습니다)))
그리고 그러한 반복 횟수에 필요한 코드는 0ms가 걸립니다.
대답은 '아니오
또는 코드 최적화 프로그램이 불필요한 것을 잘라냅니다.다음은 난수 생성 시간이 고르지 않을 수 있음을 보여주는 스크립트입니다.
rand()는 일반 함수가 아니며 항상 같은 방식으로 작동합니다.
그러나 작업 속도를 테스트할 때 상수로 초기화하면 테스트가 실행될 때 "가속"됩니다 - 코드 최적화 런타임 시 MQL 에서 제대로 작동하지 않음
일반적으로 이것은 두 번 이상 확인됩니다.
그리고 많은 것들이 생성된 변수의 양에 달려 있습니다)))
물론, 메모리 할당은 런타임 측면에서 비싸고, 이미 확인했고, 동적으로 생성된 개체( 포인터 new ) 및 로컬 범위 의 개체만 테스트했습니다. 100500번 테스트할 때 시간은 new + delete까지 실행됩니다.
전체적인 질문은 변수에 대한 전역 가시성의 테스터에서 메모리가 모든 패스가 아니라 한 번 할당된다는 사실 때문에였습니다. 그러나 uint 배열이 필요하므로 내가 쓴 것이 아니라 그러한 스크립트로 테스트했습니다. 처음으로
그리고 그러한 반복 횟수에 필요한 코드는 0ms가 걸립니다.
대답은 '아니오
또는 코드 최적화 프로그램이 불필요한 것을 잘라냅니다.내 스크립트로 테스트 했습니까? - 테스트가 끝날 때까지 기다리지 않고 중단되었거나 ulong 오버플로됨 - 매크로의 첫 번째 매개변수는 10^ count입니다.
컴파일러가 두 경우 모두에 대해 동일한 코드를 생성했을 가능성이 높습니다. 이 경우 주관적으로 좋아하는 것을 선택하십시오.
예, 아마도 그렇게
일반적으로 질문은 무엇이었습니까? 최신 프로세서는 명령 파이프 라인의 최적화로 인해 한 사이클에서 둘 이상의 기본 작업을 수행 할 수 있다는 것을 반복해서 읽었습니다 .... 많은 bla-bla-bla .. . 요점은 프로세서가 예측할 수 없는 주기 수 동안 산술 명령을 실행한다는 것입니다.
그러나 분기 및 메모리 할당 작업은 프로세서에 의해 매우 최적화되지 않으므로 산술 단순화에서 최적화를 찾지 말고 분기를 최소화하여 가능한 한 선형 코드로 작성하려고 하며 변수를 선언하고 값을 할당하는 것이 좋습니다 계산 직전에 명령 파이프라인과 캐시 페치 예측이 이 코드를 최적화할 수 있도록 합니다.
저것들. 아마도 배열의 요소 값 선택(어드레싱)은 속도 면에서 중요하지 않을 것입니다. 여기서 나는 조합에 대해 교대 승리가 있을 것이라고 생각했는데, 모두