오류, 버그, 질문 - 페이지 2506

 
Vict :
신이 옳다고 하다

레지스터는 바이트 단위가 아니라 비트 단위로 측정됩니다. 따라서 이 줄은 나머지 코드에서 잘못 사용됩니다.

 #define CACHE_LINE_SIZE 64
 
Francuz :

레지스터는 바이트 단위가 아니라 비트 단위로 측정됩니다. 따라서 이 줄은 나머지 코드에서 잘못 사용됩니다.

아니, 이상한 말을 하시는군요. 나는 그것을 증명하지 않을거야. 프로세서 설명서를 참조하십시오. 여기에서 읽으십시오. https://stackoverflow.com/questions/7281699/aligning-to-cache-line-and-knowing-the-cache-line-size/7284876

x86에서 캐시 라인은 64바이트입니다.

나는 레지스터가 필요하지 않습니다. 나는 그것에 대해 전혀 이야기하지 않습니다.

Aligning to cache line and knowing the cache line size
Aligning to cache line and knowing the cache line size
  • 2011.09.02
  • MetallicPriestMetallicPriest 12.1k2929 gold badges135135 silver badges259259 bronze badges
  • stackoverflow.com
To prevent false sharing, I want to align each element of an array to a cache line. So first I need to know the size of a cache line, so I assign each element that amount of bytes. Secondly I want the start of the array to be aligned to a cache line. I am using Linux and 8-core x86 platform...
 
Vict :

아니, 이상한 말을 하시는군요. 나는 그것을 증명하지 않을거야. 프로세서 설명서를 참조하십시오. 여기에서 읽으십시오. https://stackoverflow.com/questions/7281699/aligning-to-cache-line-and-knowing-the-cache-line-size/7284876

나는 레지스터가 필요하지 않습니다. 나는 그것에 대해 전혀 이야기하지 않습니다.

흠... 알았어. 일반적으로 프로세서 모델마다 캐시가 다릅니다. 그리고 프로그래밍 방식으로 크기를 알 수 없습니다. 그렇기 때문에 그를 보는 것은 어리석은 일입니다. 그러나 모든 프로세서의 레지스터는 두 가지 유형이며 숙련 된 프로그래머는 레지스터 크기에 따라 안내됩니다. 그리고 컴파일러와 운영 체제가 프로그램과 프로세서 사이에 있기 때문에 레지스터 방향이 항상 저장되는 것은 아닙니다.

또한 이 줄은 잘못 계산되어 대소문자를 구분하지 않습니다.

 int index = int (CACHE_LINE_SIZE - getaddr(data[rndnum].ar[ 0 ]) % CACHE_LINE_SIZE) / sizeof ( int );
 
Francuz :

흠... 알았어. 일반적으로 프로세서 모델마다 캐시가 다릅니다. 그리고 프로그래밍 방식으로 크기를 알 수 없습니다. 그렇기 때문에 그를 보는 것은 어리석은 일입니다. 그러나 모든 프로세서의 레지스터는 두 가지 유형이며 숙련 된 프로그래머는 레지스터 크기에 따라 안내됩니다. 그리고 컴파일러와 운영 체제가 프로그램과 프로세서 사이에 있기 때문에 레지스터 방향이 항상 저장되는 것은 아닙니다.

다시 말하지만, 모든 것이 발전하고 있으며, 멀티스레딩이 점점 더 강조되고 있습니다. 여기에 오신 것을 환영합니다. 크로스 std 라이브러리가 모든 것을 알려줄 것입니다.

https://en.cppreference.com/w/cpp/thread/hardware_destructive_interference_size

또한 이 줄은 잘못 계산되어 대소문자를 구분하지 않습니다.
아마도, 하지만 당신은 아직 나를 설득하지 못했습니다.
std::hardware_destructive_interference_size, std::hardware_constructive_interference_size - cppreference.com
  • en.cppreference.com
These constants provide a portable way to access the L1 data cache line size.
 
Vict :

다시 말하지만, 모든 것이 발전하고 있으며, 멀티스레딩이 점점 더 강조되고 있습니다. 여기에 오신 것을 환영합니다. 크로스 std 라이브러리가 모든 것을 알려줄 것입니다.

https://en.cppreference.com/w/cpp/thread/hardware_destructive_interference_size

아마도, 하지만 당신은 아직 나를 설득하지 못했습니다.

그는 말하지 않는다, 그는 추측한다. 사양을 주의 깊게 읽으십시오.


거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

아마도, 하지만 당신은 아직 나를 설득하지 못했습니다.

나는 당신이 얻고자 하는 오프셋의 종류를 잘 이해하지 못했지만 캔트를 이해하는 것은 쉽습니다. 절대 주소는 계산에서 완전히 쓸모가 없습니다. 메모리의 기준점이 구조체의 주소라는 사실을 잊으셨나요? 그리고 아마도 구조체의 메모리 블록에서 배열의 오프셋을 얻고 싶었을 것입니다. 그리고 이것은 구조체의 주소와 배열의 0 요소 사이의 차이에 의해 얻어진다.

 
Artyom Trishkin :

막대의 버퍼에 값이 없으면 버퍼에 명시적으로 기록해야 합니다. 즉, 계산된 값을 버퍼에 출력해야 하는 경우 버퍼에 쓰고, 그렇지 않으면 빈 값을 씁니다.

Artem 감사합니다.

 
Francuz :

나는 당신이 얻고자 하는 오프셋의 종류를 잘 이해하지 못했지만 캔트를 이해하는 것은 쉽습니다. 절대 주소는 계산에서 완전히 쓸모가 없습니다. 메모리의 기준점이 구조체의 주소라는 것을 잊으셨나요? 그리고 아마도 구조체의 메모리 블록에서 배열의 오프셋을 얻고 싶었을 것입니다. 그리고 이것은 구조체의 주소와 배열의 0 요소 사이의 차이에 의해 얻어진다.

 int index = int (CACHE_LINE_SIZE - getaddr(data[rndnum].ar[ 0 ]) % CACHE_LINE_SIZE) / sizeof ( int );
                                3        1                    2                  4

순서대로 조치:

1 - 현재 데이터 구조에서 첫 번째 요소 ar[]의 주소를 가져옵니다.

2. 캐시 라인의 시작 부분에서 오프셋을 찾습니다.

3. 캐시 라인의 끝까지 바이트 수를 찾습니다.

4. 캐시 라인이 끝날 때까지 이 공간에 들어갈 정수의 수를 찾습니다.


자신을 발사 했습니까? 속도차이가 있나요? 아니면 저만 그런가요?

 
Vict :

2. 캐시 라인의 시작 부분에서 오프셋을 찾습니다.

일종의 오프셋을 결정할 수 있다는 아이디어는 어디서 얻었습니까?

 
이 브레이크는 무엇에서 나온 것입니까?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2019.07.09 11:13

    Data data[];
   
   ArrayResize (data, 32768 );

6배 느려집니다!

 
fxsaber :
그 브레이크는 무엇에서 나온 것입니까?
동적 배열 에는 더 많은 검사가 있습니다. Renat은 한 번 썼습니다. 인덱스로 액세스하는 것에 대한 대화에서 게시물을 찾을 수 없습니다. 왜 플러스보다 훨씬 느린가요?