prefetch
글쓴이: hongwoo / 작성시간: 월, 2004/11/22 - 9:05오전
list_for_each에 대해서 찾아보니까..
#define list_for_each(pos, head) \ for (pos = (head)->next, prefetch(pos->next); pos != (head); \ pos = pos->next, prefetch(pos->next))
prefetch라는게 있어서 또 찾아보니까..
/* Prefetch instructions for Pentium III and AMD Athlon */ #ifdef CONFIG_MPENTIUMIII #define ARCH_HAS_PREFETCH extern inline void prefetch(const void *x) { __asm__ __volatile__ ("prefetchnta (%0)" : : "r"(x)); } #elif CONFIG_X86_USE_3DNOW #define ARCH_HAS_PREFETCH #define ARCH_HAS_PREFETCHW #define ARCH_HAS_SPINLOCK_PREFETCH extern inline void prefetch(const void *x) { __asm__ __volatile__ ("prefetch (%0)" : : "r"(x)); } extern inline void prefetchw(const void *x) { __asm__ __volatile__ ("prefetchw (%0)" : : "r"(x)); } #define spin_lock_prefetch(x) prefetchw(x) #endif
이런 형식으로 되어 있는데요 .. CPU 및 HW에 대한 공부를 깔짝거리고 있는 중이지만, fetch에 대한 개념이 잘 서지 않습니다. prefetch ?
어려운걸 쉽게 이해하려고 하는건 날강도 같지만.., 그래도 이 부분을 쉽게 접근하는 방법에 대한 조언 부탁드립니다.
제가 보고 있는 소스는 2.4.20입니다..
Forums:
혹시 ...
여기 저기 검색을 해보니깐 대충 알겠습니다.
캐시에 관련된거 같은데요..,
head->next를 가져올때 pos->next도 같이 읽어온다는 말인거 같습니다.
...
맞나요 ? :oops:
-----------------------------
in the real-time scheduler !
prefetch - Prefetch Data into Caches
메모리 상의 데이터를 캐시에 올려놓는 명령어 입니다.
prefetch 뒤에 T0, T1, T2, NTA 등의 힌트가 붙을 수 있는데
위에서 사용된 prefetchnta 명령어를 살펴보면
Pentium III 프로세서의 경우에는 1st-level cache 에
Pentium 4 나 Xeon 프로세서의 경우에는 2nd-level cache 에 올려놓게 되는군요
자세한 내용은 인텔 매뉴얼 2권 (Instruction Set Reference) 을 참조하세요..
prefetch란 fetch하는 동안에 CPU가 딩가딩가~ 노는 것을 방
prefetch란 fetch하는 동안에 CPU가 딩가딩가~ 노는 것을 방지하기 위해서 말하자면 미리미리 fetch해놓는 방법입니다. 캐쉬?의 일종이라고 보셔도 큰 문제는 없겠습니다만 좀 틀린점은 있겠죠.
나는 생각하는 갈대다?
댓글 달기