2009-09-04 4 views
3

SSE 프리 페치 지침에 대한 인라인 어셈블리가 포함 된 코드로 작업하고 있습니다. 선행 처리 상수는 32-, 64- 또는 128- 바이 프리 페치에 대한 명령어가 사용되는지 여부를 결정합니다. 이 응용 프로그램은 다양한 플랫폼에서 사용되며, 지금까지는 각 경우에 주어진 CPU에 가장 적합한 옵션을 조사해야했습니다. 이것이 캐시 라인 크기라는 것을 이해합니다. 이 정보는 자동으로 얻을 수 있습니까?/proc/cpuinfo에 명시 적으로 나타나지 않는 것 같습니다.SSE 프리 페치 명령어 크기를 결정하는 방법은 무엇입니까?

답변

3

귀하의 질문은이 question 또는 this과 관련 있다고 생각합니다. OSID 또는 라이브러리 함수에 의존 할 수 없다면 CPUID 명령을 사용하는 것이 좋겠지 만 질문은 정확히 당신이 찾고있는 정보가됩니다. 물론 AMD와 Intel의 구현은 동의 할 필요가 없습니다. 이 page은 Cpuid.1.EBX [15 : 8] (즉, BH)를 사용하여 Intel에서 찾아서 AMD에서 80000005h로 작동하도록 제안합니다. 또한 인텔에서 CPUID.2는 관련 정보를 포함하고있는 것처럼 보이지만 원하는 정보를 파싱하는 것은 정말 고통스러운 것처럼 보입니다. CLFLUSH에 의해 사용되는 QUADWORDs에서 하나 개의 캐시 라인의 크기를 반환 : 내가 읽은 것을 모두 AMD와 인텔 CPUID 지침 CPUID.1.EBX [8 15] 지원에서

나는 생각한다 명령 (모든 프로세서에 존재하지 않으므로 항상 뭔가를 찾을 수 있는지 여부는 알 수 없습니다). 따라서 CPUID.1을 실행 한 후에는 BH에 8을 곱하여 캐시 라인 크기를 바이트 단위로 가져와야합니다. 이것은 CLFLUSH와 PREFETCHh 명령어에 대해 하나의 캐시 라인 크기 정의가 항상 동일하다는 내 암묵적인 가정 (모든 명령어가 실제로 유효한지 말할 수 있습니까?)에 달려 있습니다. 그것은 아무것도 인출을하는 경우도

, 인텔의 manuals PREFETCHh는 힌트 상태,하지만 즉, 항상 32 바이트
최소 될 것입니다.

EDIT1 : PREFETCHh의 최적화 된 사용을위한 또 다른 유용한 리소스 (질문에 직접 대답하지 않더라도)는 Intel의 최적화 설명서 here입니다.

관련 문제