추신: 글쎄요, 속도를 좋아하는 팬이 많이 있습니다. 그들이 마음에 따라 모든 것을 평준화하기 시작하면 최소한 이론상으로는 훨씬 더 빨리 날 수 있을 것입니다.
일반적으로 나는 이것을 기대하지도 않았습니다.
#define WRONG_ALIGNED
#define CACHE_LINE_SIZE 64struct Data {
#ifdef WRONG_ALIGNED
short bad_pad;
#endif
uint ar[CACHE_LINE_SIZE/ sizeof ( int )];
};
#import "msvcrt.dll"long memcpy(Data &, Data &, long );
#import
#define getaddr(x) memcpy(x, x, 0 )
voidOnStart ()
{
Data data[ 32768 ];
if (getaddr(data[ 0 ])% 4 != 0 ) {
Alert ( "error" );
return ;
}
ZeroMemory (data);
int index = int (CACHE_LINE_SIZE - getaddr(data[ 0 ]) % CACHE_LINE_SIZE) / sizeof ( int ) - 1 ;
srand ( GetTickCount ());
ulong start_time = GetMicrosecondCount ();
for ( unsigned i = 0 ; i < 10000 ; ++ i) {
int rndnum = rand ();
while (++rndnum < 32768 )
for ( int j = ArraySize (data[rndnum].ar)- 1 ; j >= 0 ; -- j)
++ data[rndnum].ar[j];
}
Alert ( GetMicrosecondCount () - start_time);
for ( int j = ArraySize (data[ 100 ].ar)- 1 ; j >= 0 ; -- j)
Print (data[ 100 ].ar[j]);
}
/*
WRONG_ALIGNED:
6117940
6104068
6047416
RIGHT_ALIGNED
3341823
2565150
2565150
*/
코드가 약간 복잡합니다. 캐시 라인에 맞지 않는 요소를 쳐서 직접 두드려 보았지만 잘 되지 않았습니다. 그 중), 그러나 나는 코드를 많이 편집하지 않았습니다. 그러나 이 방법은 훨씬 더 인상적입니다. 캐시 라인에 속하지 않는 요소에 대해 16개의 추가 중 하나만 수행되지만 가시적인 결과를 제공합니다.
추신: 이 경우 하나의 단락을 삭제하지 않고 두 개의 단락을 삽입하여 RIGHT_ALIGNED를 수행하는 것이 더 객관적입니다(이렇게 하면 두 경우 모두에 대해 두 개의 캐시 라인 업데이트를 달성할 수 있음). 따라서 가속은 더 완만하지만 여전히 약 1.5배 중요합니다.
오류를 보여주기 위해 메타 트레이더의 전달에서 지그재그로 가져갔습니다. 내 프로그램에서 코드로 가져온 추가 버퍼를 추가했습니다. 이 코드에서는 추가 버퍼를 사용한 조작이 제공되지 않습니다. 그들은 단지 오류를 보여주기 위한 것입니다.
나는 이 지그재그를 EURUSD 차트, H1 시간대에 가져왔습니다. 터미널을 닫았습니다. 생성된 모든 EURUSD 시계열을 기록에서 삭제했습니다. 즉, EURUSD 통화 쌍에 대한 모든 *.hcc 및 *.hc 파일을 삭제했습니다. 이것은 터미널이 부팅될 때 .hcc 파일이 로드되기 시작하고 .hc 파일이 깨끗한 슬레이트에서 생성되도록 수행됩니다.
터미널을 실행 한 후 EURUSD 차트에 많은 아티팩트가 있습니다. 그리고 이러한 유물은 극복할 수 없습니다.
수정된 지그재그의 코드를 텍스트 형태로 파일로 첨부합니다.
#propert를 사용하여 ZigZag 매개변수 설정을 떠났다는 것을 경고합니다.
지그재그용 버퍼를 포함한 모든 것이 프로그래밍 방식으로 동적으로 변경되기 때문에 #propert를 통해 다른 모든 버퍼를 설정하지 않습니다.
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
오류를 보여주기 위해 메타 트레이더의 전달에서 지그재그로 가져갔습니다. 내 프로그램에서 코드로 가져온 추가 버퍼를 추가했습니다. 이 코드에서는 추가 버퍼를 사용한 조작이 제공되지 않습니다. 그들은 단지 오류를 보여주기 위한 것입니다.
나는 이 지그재그를 EURUSD 차트, H1 시간대에 가져왔습니다. 터미널을 닫았습니다. 생성된 모든 EURUSD 시계열을 기록에서 삭제했습니다. 즉, EURUSD 통화 쌍에 대한 모든 *.hcc 및 *.hc 파일을 삭제했습니다. 이것은 터미널이 부팅될 때 .hcc 파일이 로드되기 시작하고 .hc 파일이 깨끗한 슬레이트에서 생성되도록 수행됩니다.
터미널을 실행 한 후 EURUSD 차트에 많은 아티팩트가 있습니다. 그리고 이러한 아티팩트는 극복할 수 없습니다.
수정된 지그재그의 코드를 텍스트 형태로 파일로 첨부합니다.
#propert를 사용하여 ZigZag 매개변수 설정을 떠났다는 것을 경고합니다.
지그재그용 버퍼를 포함한 모든 것이 프로그래밍 방식으로 동적으로 변경되기 때문에 #propert를 통해 다른 모든 버퍼를 설정하지 않습니다.
터미널 개발자가 이 오류를 수정하도록 도와주세요.
유물이 있는 그림:
모든 버퍼를 초기화해야 합니다.
막대의 버퍼에 값이 없으면 버퍼에 명시적으로 기록해야 합니다. 즉, 계산된 값을 버퍼에 출력해야 하는 경우 버퍼에 쓰고, 그렇지 않으면 빈 값을 씁니다.
여러분, 정보를 공유하세요. 무엇을 위해 얼라인먼트를 사용하고 있습니까?
너구리 지향 프로그래밍 입니다!
아아, 어떤 식 으로든없이;)
너구리 지향 프로그래밍 입니다!
아아, 어떤 식 으로든없이;)
알아요. OOP를 가르쳐달라는 것이 아닙니다. 누가 어떤 목적으로 얼라인먼트를 사용하는지 물었습니다.
여러분, 정보를 공유하세요. 무엇을 위해 얼라인먼트를 사용하고 있습니까?
내가 보기에 이것은 모두 다중 스레드 환경에서 매우 유용합니다. 여기서 MKL은 어느 쪽입니까? 예 hz, 질문을 받았으므로 붙였습니다.
글쎄, 일반적으로 - 이것들은 기본 사항이며 모든 괜찮은 프로그래머에게는 기본적인 이해가 필요합니다.
추신: 글쎄요, 속도를 좋아하는 팬이 많이 있습니다. 그들이 마음에 따라 모든 것을 평준화하기 시작하면 최소한 이론상으로는 훨씬 더 빨리 날 수 있을 것입니다.여러분, 정보를 공유하세요. 무엇을 위해 얼라인먼트를 사용하고 있습니까?
Vict :
추신: 글쎄요, 속도를 좋아하는 팬이 많이 있습니다. 그들이 마음에 따라 모든 것을 평준화하기 시작하면 최소한 이론상으로는 훨씬 더 빨리 날 수 있을 것입니다.
일반적으로 나는 이것을 기대하지도 않았습니다.
코드가 약간 복잡합니다. 캐시 라인에 맞지 않는 요소를 쳐서 직접 두드려 보았지만 잘 되지 않았습니다. 그 중), 그러나 나는 코드를 많이 편집하지 않았습니다. 그러나 이 방법은 훨씬 더 인상적입니다. 캐시 라인에 속하지 않는 요소에 대해 16개의 추가 중 하나만 수행되지만 가시적인 결과를 제공합니다.
추신: 이 경우 하나의 단락을 삭제하지 않고 두 개의 단락을 삽입하여 RIGHT_ALIGNED를 수행하는 것이 더 객관적입니다(이렇게 하면 두 경우 모두에 대해 두 개의 캐시 라인 업데이트를 달성할 수 있음). 따라서 가속은 더 완만하지만 여전히 약 1.5배 중요합니다.
그건 그렇고, mql에서 pack의 기본값은 일종의 1입니다.
이전 게시물로 판단하면 모든 구조체와 클래스에 대해 8을 명시적으로 규정하는 것이 합리적일 수 있습니다.
오류를 극복할 수 없습니다.
오류를 보여주기 위해 메타 트레이더의 전달에서 지그재그로 가져갔습니다. 내 프로그램에서 코드로 가져온 추가 버퍼를 추가했습니다. 이 코드에서는 추가 버퍼를 사용한 조작이 제공되지 않습니다. 그들은 단지 오류를 보여주기 위한 것입니다.
나는 이 지그재그를 EURUSD 차트, H1 시간대에 가져왔습니다. 터미널을 닫았습니다. 생성된 모든 EURUSD 시계열을 기록에서 삭제했습니다. 즉, EURUSD 통화 쌍에 대한 모든 *.hcc 및 *.hc 파일을 삭제했습니다. 이것은 터미널이 부팅될 때 .hcc 파일이 로드되기 시작하고 .hc 파일이 깨끗한 슬레이트에서 생성되도록 수행됩니다.
터미널을 실행 한 후 EURUSD 차트에 많은 아티팩트가 있습니다. 그리고 이러한 유물은 극복할 수 없습니다.
수정된 지그재그의 코드를 텍스트 형태로 파일로 첨부합니다.
#propert를 사용하여 ZigZag 매개변수 설정을 떠났다는 것을 경고합니다.
지그재그용 버퍼를 포함한 모든 것이 프로그래밍 방식으로 동적으로 변경되기 때문에 #propert를 통해 다른 모든 버퍼를 설정하지 않습니다.
터미널 개발자가 이 오류를 수정하도록 도와주세요.
유물이 있는 그림:
오류를 극복할 수 없습니다.
오류를 보여주기 위해 메타 트레이더의 전달에서 지그재그로 가져갔습니다. 내 프로그램에서 코드로 가져온 추가 버퍼를 추가했습니다. 이 코드에서는 추가 버퍼를 사용한 조작이 제공되지 않습니다. 그들은 단지 오류를 보여주기 위한 것입니다.
나는 이 지그재그를 EURUSD 차트, H1 시간대에 가져왔습니다. 터미널을 닫았습니다. 생성된 모든 EURUSD 시계열을 기록에서 삭제했습니다. 즉, EURUSD 통화 쌍에 대한 모든 *.hcc 및 *.hc 파일을 삭제했습니다. 이것은 터미널이 부팅될 때 .hcc 파일이 로드되기 시작하고 .hc 파일이 깨끗한 슬레이트에서 생성되도록 수행됩니다.
터미널을 실행 한 후 EURUSD 차트에 많은 아티팩트가 있습니다. 그리고 이러한 아티팩트는 극복할 수 없습니다.
수정된 지그재그의 코드를 텍스트 형태로 파일로 첨부합니다.
#propert를 사용하여 ZigZag 매개변수 설정을 떠났다는 것을 경고합니다.
지그재그용 버퍼를 포함한 모든 것이 프로그래밍 방식으로 동적으로 변경되기 때문에 #propert를 통해 다른 모든 버퍼를 설정하지 않습니다.
터미널 개발자가 이 오류를 수정하도록 도와주세요.
유물이 있는 그림:
모든 버퍼를 초기화해야 합니다.
막대의 버퍼에 값이 없으면 버퍼에 명시적으로 기록해야 합니다. 즉, 계산된 값을 버퍼에 출력해야 하는 경우 버퍼에 쓰고, 그렇지 않으면 빈 값을 씁니다.
일반적으로 나는 이것을 기대하지도 않았습니다.
집에서의 발사는 눈에 띄는 차이를 보이지 않았습니다.
대신에
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
빅트 , 2019.07.09 07:17
Data data[ 32768 ];
하다
그러면 6배 느려집니다!
모든 버퍼를 초기화해야 합니다.
막대의 버퍼에 값이 없으면 버퍼에 명시적으로 기록해야 합니다. 즉, 계산된 값을 버퍼에 출력해야 하는 경우 버퍼에 쓰고, 그렇지 않으면 빈 값을 씁니다.
죄송합니다. 초기화를 놓쳤습니다. 나는 프로그램에 그것을 가지고 있지만 나는 예제에서 그것을 놓쳤다.
초기화된 첨부파일입니다. 효과는 동일합니다.
개발자에게 질문이 남아 있습니다. 이 오류를 수정하십시오.
----------
제 생각에는 다음과 같은 일이 일어나고 있습니다. 터미널과 함께 프로그램을 실행할 때 시계열 크기는 0과 같거나 최소값을 갖습니다.
초기화는 기존 기록에 대해 수행됩니다. 그리고 시계열 크기가 증가하면 버퍼 배열은 초기화를 거치지 않은 메모리 섹션을 사용합니다. 결과적으로 우리는 그러한 효과를 얻습니다.
터미널 이벤트를 통해 이 효과를 제거하려고 했습니다. 마찬가지로 아티팩트가 잠시 동안 나타납니다. 나쁜거야? 그러한 프로그램은 대중에게 공개되어서는 안됩니다.
이렇게 고칠 수 있습니다. 버퍼에 메모리를 할당한 후 즉시 이 메모리를 지웁니다. 하지만 어떻게 해야 할까요? 터미널용 애플리케이션 개발자 입장에서는 그런 기회를 찾지 못했습니다.