KR20100017577A - 바운디드 에러 지연된 갱신 소프트웨어 캐싱 - Google Patents

바운디드 에러 지연된 갱신 소프트웨어 캐싱 Download PDF

Info

Publication number
KR20100017577A
KR20100017577A KR1020097025188A KR20097025188A KR20100017577A KR 20100017577 A KR20100017577 A KR 20100017577A KR 1020097025188 A KR1020097025188 A KR 1020097025188A KR 20097025188 A KR20097025188 A KR 20097025188A KR 20100017577 A KR20100017577 A KR 20100017577A
Authority
KR
South Korea
Prior art keywords
application code
code
cache
update
data
Prior art date
Application number
KR1020097025188A
Other languages
English (en)
Other versions
KR101145733B1 (ko
Inventor
마이클 케비 첸
디지-칭 주
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20100017577A publication Critical patent/KR20100017577A/ko
Application granted granted Critical
Publication of KR101145733B1 publication Critical patent/KR101145733B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

몇몇 실시예에서, 본 발명은 바운디드 에러(bounded-error)에 의해 지연되어 갱신된(delayed update) 소프트웨어 캐싱에 관한 시스템 및 방법을 포함한다. 본 발명의 실시예는 메모리 액세스 대기시간(latencies)을 줄이고 캐시된 값의 지연된 갱신으로 인한 에러를 허용하는 도메인-특정(domain-specific) 애플리케이션의 처리율을 향상시키는데 사용될 수 있는 지연된 갱신 소프트웨어 제어 캐시를 기술한다. 본 발명의 적어도 일 실시예에서, 소프트웨어 캐싱은 메모리를 액세스 및/또는 갱신해야 하는 애플리케이션 프로그램에서 캐싱 코드를 자동으로 생성하는 컴파일러를 이용하여 구현될 수 있다. 캐시는 비록 글로벌 데이터가 갱신되었을지라도 소정 주기동안 액세스되어 낭비적으로 메모리 액세스를 지연시킨다. 다른 실시예가 기술되고 청구된다.

Description

바운디드 에러 지연된 갱신 소프트웨어 캐싱{SOFTWARE CACHING WITH BOUNDED-ERROR DELAYED UPDATE}
본 발명의 실시예는 멀티프로세서 컴퓨팅 시스템에 관한 것으로서, 보다 구체적으로는 멀티프로세서 또는 멀티코어 시스템에서 바운디드 에러(bounded-error)를 고려하면서 충분한 데이터 일관성(data coherency)을 유지하기 위한 소프트웨어 캐싱에 관한 것이다.
프로세서를 최적화하는 각종 메커니즘이 존재한다. 특히, 많은 프로세서가 어떤 종류의 캐싱 메커니즘을 이용하기 위하여 디자인된다. 캐싱 메커니즘은 메모리 액세스 지연 때문에 문제를 나타낸다. 메모리 저장 소자의 용량을 증가하면 그와 연관된 지연이 증가하는 경우는 빈번하다. 그래서, 더 큰 메모리로의 액세스는 더 긴 지연으로 귀착된다. 메모리 액세스 지연은 프로세서 실행 성능에 영향을 미친다. 대부분의 애플리케이션은 액세스된 데이터의 단지 작은 집합만이 프로그램의 실행에 필요하다는 특성이 있다. 기본적으로, 빈번하게 메모리를 액세스한 것은 프로세서에 "가깝게", 즉, 하드웨어 캐시 내에 가져다 놓는다.
몇몇 특별한 내장형 프로세서, 예를 들면, 인텔 코포레이션에서 입수 가능한 IXP 네트워크 프로세서는 하드웨어 캐시가 없다. 이러한 내장형 프로세서는 셀룰러 폰, MP3 플레이어, 및 다른 장치에서 찾아볼 수 있다. 이러한 내장형 프로세서의 경우, 다이에 캐시를 포함시키는 것은 비용 때문에 금지될 수도 있다. 네트워크 프로세서는 많은 이종 정보 패킷을 처리하는 경향이 있다. 각 패킷은 개별적으로 처리될 수 있다. 더 많은 처리량/대역폭을 얻기 위하여, 각 패킷이 상이한 내장형 프로세서에 의해 처리될 수 있는 프로세서 다이는 많은 프로세서 요소들에 할당될 수 있다. 이들 시스템에 하드웨어 캐시를 구현하기보다는 추가적인 프로세서를 갖는 것이 바람직할 수 있다. 다른 애플리케이션에서 보다는 네트워크 애플리케이션에서 집약성(locality)이 더 적다고 또한 믿어진다. 그래서, 보다 덜 "빈번하게 사용된(frequently used)" 데이터가 캐시 내에 넣어진다.
일반적인 애플리케이션의 경우, 디자이너는 소프트웨어 캐시를 포함시키는 것 보다는 그 대신에 하드웨어 캐시를 포함시키는 경향이 있다. 기존의 시스템에서는 전형적으로 하드웨어 캐싱도 소프트웨어 캐싱도 수행하지 못한다. 몇몇 연구원은 어떤 소프트웨어 제어와 함께 온-칩 메모리를 이용하려고 시도하였다. 예를 들면, 한 논문에는
"몇몇 디지털 신호 처리 (dsp) 칩은 프로그래머가 액세스 시간을 향상시키기 위하여 사용할 수 있는 작고, 빠른, 온-칩 메모리를 가지고 있다. 이들 온-칩 메모리는 캐시가 아니다, 그 대신에, 이들 온-칩 메모리는 디스조인트(disjoint) 어드레스 공간에 배치된다. 이것은 결합 룩업(associative lookup)을 위해, 그리고 자동 교체(automatic replacement)를 위해 온-칩 메모리 어드레스를 오프-칩(off-chip) 메모리 어드레스와 관련시키는 모든 필요를 없앰으로써 단순하게 구현한다. 그 대신에, 디자이너는 프로그래머로 하여금 적시에 그리고 능률적인 방법으로 메인 메모리와 온-칩 메모리 사이에서 데이터를 이동시키는 책임을 지게한다."라고 기술하고 있다.
[K.D. Cooper와 T.J. Harvey의 "Compiler-Controlled Memory," In Proceedings of ASPLOS-VIII, 산호세, 캘리포니아, 1998년 10월, 참조할 것] 이러한 연구에서 논의된 방법은 흩어진 값을 보유하는 장소로서 온-칩 메모리의 작은 부분, 또는 작은 컴파일러-제어 메모리(cpmplier-controlled memory (CCM))의 대용 방법을 제시한다.
기존 프로세서 아키텍쳐는 동적 랜덤 액세스 메모리(DRAM)와 같이 크지만 느린 메모리 또는 디스크 드라이브에까지 연장하는 프로세서의 가까이에 캐시처럼 작지만 빠른 메모리의 메모리 계층구조(hierarchy)를 이용한다. 이러한 디자인은 빈번하게 액세스된 데이터에 대한 메모리 액세스 대기시간을 최소화하면서 양측의 큰 메모리 공간을 용이하게 해준다.
전문화된 프로세서 아키텍쳐는 특별한 요구가 있는 애플리케이션에 점차 중요시 되어왔다. 예를 들면, 전술한 바와 같은 인텔 IXP 프로세서는 패킷 처리를 위하여 라우터 내에 내장될 수 있다. 개개의 패킷이 다른 것들과 독립적으로 처리될 수 있기 때문에, 하나의 IXP 프로세서는 패킷을 처리하는 작업에 전념할 수 있는 많은 경량의 멀티쓰레드(multi-threaded) 마이크로 엔진(micro engine: ME) 코 어를 포함한다. XScale® 기술을 사용하는 인텔 플랫폼에서는 제어-평면 코드(control-plane code)를 처리하는 Xscale® 코어가 있다. Xscale®은 스트롱암(StrongARM) 기술에서 파생된 내장형 마이크로프로세서 아키텍쳐이다. 소프트웨어 캐시는 빈번하게 판독되고 빈번하지 않게 기록된 데이터를 캐시하도록 시도한다. IXP 내 메모리 계층구조는 각 ME에서 작지만 빠른 로컬 메모리, 및 모든 ME들 사이에서 공유된 (액세스 대기시간을 증가시키는) 스크래치패드 메모리, 스태틱 RAM (SRAM) 및 DRAM 메모리를 포함한다.
이들 ME는 각 코어의 크기를 최소화하기 위하여 캐시 없이 디자인되어 왔는데, 이것은 네트워크 애플리케이션에서 패킷은 캐싱으로부터 혜택받을 아무런 공간적 또는 시간적 메모리 집약성도 없다고 믿어졌기 때문이다. 이러한 가정은 네트워크 프로세서가 패킷을 단순히 일회 판독하고, 그 패킷에 대하여 어떤 작업을 수행하고, 완료 후에 그 패킷을 단순히 그대로 송신한다라는 개념으로부터 발생한다.
소프트웨어 제어 캐싱(software-controlled caching)은 작지만 빠른 로컬 메모리를 이용함으로써 하드웨어 캐시 없이 데이터 집약성으로부터 이득을 취하는 방법으로 제안되었다. 여기에서, 하드웨어 캐시의 기능은 소프트웨어 루틴에 따라 에뮬레이트될 수 있다. 소프트웨어 제어 캐싱은 소프트웨어 오버헤드를 극소화하기 위하여 제한된 특성으로 구현될 수 있다. 예를 들면, 캐시 일관성은 상이한 ME들에서 캐시된 데이터의 복사본이 동일한 값을 갖는 모든 애플리케이션에서 정확한 실행을 보장하는 필요 조건이다. 그러나, 기존 시스템에서, 소프트웨어 제어 캐싱에서 캐시 일관성을 지원하는 것은 비싸고 비효율적이다.
본 발명은 지연된 갱신 소프트웨어 캐싱을 허용하는 애플리케이션 코드를 최적화하는 시스템 및 방법을 제공하기 위한 것이다.
본 발명은 바운디드 에러(bounded-error)에 의해 지연되어 갱신된(delayed update) 소프트웨어 캐싱에 관한 시스템 및 방법을 포함한다. 본 발명의 실시예는 메모리 액세스 대기시간(latencies)을 줄이고 캐시된 값의 지연된 갱신으로 인한 에러를 허용하는 도메인-특정(domain-specific) 애플리케이션의 처리율을 향상시키는데 사용될 수 있는 지연된 갱신 소프트웨어 제어 캐시를 기술한다. 본 발명의 적어도 일 실시예에서, 소프트웨어 캐싱은 메모리를 액세스 및/또는 갱신해야 하는 애플리케이션 프로그램에서 캐싱 코드를 자동으로 생성하는 컴파일러를 이용하여 구현될 수 있다.
본 발명에 따르면, 지연된 갱신 소프트웨어 캐싱을 허용하는 애플리케이션 코드를 최적화하는 시스템 및 방법이 제공된다.
본 발명의 특징과 장점은 다음의 본 발명의 상세한 설명에서 명백해질 것이다.
본 발명의 실시예는 바운디드 에러 지연된 갱신 소프트웨어 캐싱(bounded-error delayed updates)과 관련한 시스템 및 방법이다. 본 발명의 실시예들은 메모리 액세스 지연시간을 줄이고 캐시된 값이 지연된 갱신에 의해 야기된 에러를 허용하는 도메인 특정(domain-specific) 애플리케이션의 처리량을 향상시키는데 사용될 수 있는 지연된 갱신 소프트웨어 제어 캐시를 개시한다. 본 발명의 적어도 일 실시예에서, 소프트웨어 캐싱은 메모리를 액세스 및/또는 갱신해야 하는 애플리케이션 프로그램에서 캐싱 코드를 자동으로 생성하는 컴파일러를 사용하여 구현될 수 있다. 본 명세서에서 기술된 바와 같이, 소프트웨어 캐싱은 약간은 하드웨어 캐싱의 이익을 내지만, 하드웨어의 비용은 들지 않는다. 하드웨어 캐시의 한가지 문제점은 캐시 일관성이다. 이것은 캐시가 하나 보다 많은 프로세서를 갖는 시스템에서 이용될 때 캐시의 문제점이다. 이 문제점은 데스크 탑 시스템, 멀티프로세서 시스템, 많은 처리 요소를 갖는 네트워크 프로세서, 및 멀티코어 시스템과 같이 다중 프로세서(multiple processors)를 갖는 다른 시스템에 적용한다. 후술하는 설명의 간결성을 위하여, 멀티프로세서라는 용어는 멀티프로세서 시스템, 많은 처리 요소를 갖는 네트워크 프로세서, 및 멀티코어 시스템과 같이 다중 프로세서(multiple processors)를 갖는 다른 시스템을 의미하는 것으로 사용된다.
명세서에서 본 발명의 "일 실시예" 또는 "실시예"를 참조한다는 것은 실시예 와 관련하여 기술된 특정한 특징, 구조 또는 특성이 본 발명의 적어도 일 실시예에 포함된다는 것을 의미한다. 따라서, 명세서를 통하여 여러 곳에서 나타나는 "일 실시예"라는 어구가 출현한다고 반드시 모두 동일한 실시예를 언급하는 것은 아니다.
설명을 위해, 특정 구성 및 세부사항은 본 발명의 철저한 이해를 돕기 위해 명시된다. 그러나, 당 분야에서 통상의 지식을 가진 자에게는 본 발명의 실시예들이 본 명세서에서 제시된 특정 세부사항이 없이도 실시될 수 있음이 자명할 것이다. 또한, 본 발명을 불명료하지 않도록 하기 위하여 공지된 특징은 생략되거나 간략화될 수 있다. 각종 예는 본 설명을 통하여 제시될 수 있다. 이들 예는 단지 본 발명의 특정 실시예의 설명일 뿐이다. 본 발명의 범위는 제시된 예들로 국한되지 않는다.
캐시 일관성은 프로세서 가까이, 즉 캐시 또는 온-칩 메모리 내에 캐시된 데이터의 복사본을 저장하기 위하여, 홈 또는 원래 기억 장소에서와 동일한 값을 유지하는 것을 반드시 필요로 한다. 캐시 일관성은 많은 프로세서가 있을 때 완강한 저항을 받는다.
버스 프로토콜은 다중 프로세서에 캐시 일관성을 수용하기 위하여 개발되었다. 예를 들면, 수정(modified), 배타적(exclusive), 공유(shared), 및 부당(invalid) (MESI) 프로토콜이 사용되어 왔다. 캐시 라인(cache line)은 캐시가 멀티프로세서 시스템에서 어떻게 존재하는지를 설명하는 각종 상태에 있을 수 있다. 상태는, 예를 들면, 다중 프로세서가 캐시로부터 판독하는 것을 의미하는 "공 유" 일 수도 있다. 캐시는 데이터가 프로세서에 의해 수정되고 있는 "배타적" 상태에 있을 수도 있다. 이러한 변경은 이러한 상태들을 통신함으로써 다른 프로세서들에게 전해진다. 이러한 프로토콜은 구현하는데 시간과 하드웨어 비용이 든다.
하드웨어 캐시 메커니즘은 모든 프로세서, 특히 내장형 또는 전문적인 애플리케이션에서 사용된 프로세서용으로 사용되지 않을 수도 있다. 예를 들면, IXP 프로세서에는 하드웨어 캐시가 없다. 이들 네트워크 프로세서는 캐싱의 기회를 예상하지 못한 채 다중 프로세서로 개발된 것이다. 캐싱의 기회는 이들 네트워크 프로레서에서 존재하지만, 이들 프로세서에는 처리될 패킷이 있는 것이 아니고 애플리케이션 프로그램 데이터 구조를 갖는다. 예를 들면, 캐시에 바람직할 수 있는 빈번하게 사용한 데이터는 라우팅 테이블 정보이다.
실시예에서, 지연-갱신된 소프트웨어 제어 캐시는 하드웨어 캐시를 갖지 않는 다중 프로세서와 시스템에서 캐싱 메커니즘의 장점을 이용하여 구현될 수 있다. 지연-갱신은 하나의 프로세서로 하여금 데이터가 갱신되기 전 얼마간의 기간 동안 오래된 데이터를 캐시에서 지속적으로 액세스하도록 한다. 지연-갱신된 소프트웨어 제어 캐시를 적용함으로써 메모리 액세스를 최적화하는 것에 도움이 될 수 있다. 이 기술의 실시예를 구현하는 애플리케이션 코드에 대한 최적화는 프로그래머에 의해 수동으로 또는 최적화 컴파일러에서 한번 통과함으로써 적용될 수 있다.
지연-갱신된 캐시는 정규적으로 일관성을 체크하지만, 관련된 모든 액세스에 대하여 반드시 그러하지는 않다. 네트워크 애플리케이션에서, 예를 들면, 데이터 구조의 수정은 단지 매 100번째마다 또는 1000번째 패킷마다 체크될 수 있다. 이 러한 캐싱은 캐시된 값으로 갱신할 때 변경을 검출하기 위하여 메모리 액세스가 줄어든 상태에서 메모리 성능을 개선할 수 있다. 이러한 최적화는 에러율 당 비용으로 나타난다. 결과적으로, 이것은 예상되는 에러율이 작거나 또는 에러가 이치에 맞지 않을 때 적용되어야만 할 것이다. 에러는 갱신이 지연되어 이행되기 때문에 발생하는 것이므로, 빈번하게 판독되지만, 빈번하지 않게 갱신되는 데이터 구조에서는 에러율이 낮게 발생할 것이다. 최적화 컴파일러에서, 본 발명의 실시예에 따르면, 프로파일링(profiling)의 결과는 이러한 특성을 갖는 데이터 구조를 선택하는데 지원할 수 있다.
네트워크 애플리케이션에서, 기록되고 판독되지만, 명시적인 잠금(explicit locks)에 의해 보호되지 않는 어떠한 공유 글로벌 데이터 구조라도 지연된 갱신 캐싱용 후보라고 간주될 수 있다. 메모리 성능을 향상하기 위하여 종종 잠금이 생략된다. 공유 메모리에 동시적인 판독 및 기록의 정확성은 주의깊은 코딩을 통해 확보된다. 동기화는 원자 메모리 기록(atomic memory write)으로부터 명시적으로 성취된다. 원자 기록이란 메모리 어드레스(예를 들면, 32-비트 양)가 메모리 기록에 의해 항상 완전하게 바뀐다는 것을 의미한다. 그것의 반이 기록되고 그 다음에는 그 기록이 실패하거나 중단된다는 사례는 결코 아니다. 소정 인스트럭션의 원자성(atomicity)의 관념은 다중 프로세서 시스템에서 일관성을 유지하기 위한 기본이다. 지연-갱신된 캐시에서, 이 원자 기록은 지연된 갱신의 눈에 보이는 정도만으로 동기화 시점으로서 작용할 수 있다.
도면을 참조하면, 특히 도 1을 참조하면, 예시적인 실시예로서 네트워크 애 플리케이션에서 패킷 전송을 위한 트라이 테이블이 도시된다. 전통적인 가정과 반대로, 네트워크 애플리케이션은 중요한 집약성을 갖는 것으로 나타나지만, 집약성은 애플리케이션 프로그램 데이터 구조에서 나타나는 것이지 처리되고 있는 패킷에서 나타나지는 않는다. 따라서, 약간 정적인 라우팅 테이블에 대한 캐싱 데이터 구조는 이득을 제공할 수도 있다. 네트워크 라우터용 트라이 테이블(100)은 노드(원형)와 커넥터(화살표)로 나타난다. "트라이(trie)"는 바이너리 서치 트리의 일종으로서 본 기술에서 알려져 있다. 트라이라는 용어는 수 년간 사용되어 왔고 "복구(Retrieval)"을 약기한 것이다. 트라이 테이블(100)은 패킷의 소스 및 목적지 어드레스를 조사하는데 근거하여 패킷을 어디에 송신하는지를 정의할 수 있다. 예를 들면, 노드(101)는 꼭대기 노드, 또는 엔트리 노드이다. 매칭된 스트링에 따라서, 다음 노드는 "00"와 매치하는 노드(103)일 수 있다.
트라이 테이블(100)을 새로운 라우팅 엔트리(111)로 갱신하기 위하여, 새로운 노드(109)는 그 노드를 현존하는 테이블에 연결하지 않고 처음부터 존재한다. 갱신은 이러한 새로운 노드(109)로의 포인터(110)가 테이블에 기록될 때 현존 트라이 테이블에 반영될 뿐이다. 이러한 단일의 포인터 갱신은 새로운 라우팅 엔트리를 위한 극소의 동기화 포인트로서 작용할 수 있다. 이것은 점선 화살표(110)로 예시된다.
라우터는 패킷을 어느 곳에 송신하는지를 결정하기 위하여 이 테이블의 복사본을 필요로 한다. 이러한 예시적인 트라이 테이블은 가장 긴 매칭 프리픽스 테이블로 이용될 수도 있다. 네트워크 패킷이 라우팅될 때, 인터넷 프로토콜 (IP) 어 드레스는 패킷을 그의 목적지에 송신하는데 이용된다. 가장 긴 매칭 프리픽스 테이블에서, 프리픽스는 비트의 스트링이고 매칭 비트의 가장 긴 스트링은 테이블에 있는 엔트리와 매치시키기 위해 발견된다. 매치하는 엔트리가 발견되지 않으면, 패킷을 라우트하는 더 짧은 어떤 것에 대한 디폴트가 있다는 것이 전형적이다. 트라이 테이블은 IP 어드레스를 나타낼 때 아주 클 수도 있다.
소프트웨어에 있는 네트워크 라우팅 트라이 테이블을 캐싱하는 기회가 있을 수도 있다. 최고(top) 엔트리는 패킷마다 빈번하게 히트된다. 전체 라우터 테이블은 캐시될 필요는 없다. 그러나 테이블의 가장 빈번하게 이용한 부분을 캐싱하는 데는 이점이 있다.
패킷 라우팅에서, 라우터는 소정의 에러율을 허용할 수 있다. 잘못 라우트되거나 라우트되지 않은 패킷은 에러를 표시함에 따라 다시 라우트될 수 있다. 라우터 테이블은 드물게 갱신될 수 있다. 따라서, 네트워크 라우터는 짧은 기간 동안 오래된 데이터를 가지고 동작할 수 있다. 네트워크 프로토콜은 이러한 라우팅 에러를 허용하도록 디자인된다. 또한, 패킷이 잘못 라우팅되면, 더 아래 라인의 라우터는 갱신된 정보를 가질 수도 있고 그 패킷을 그의 적당한 목적지로 성공적으로 라우트할 수 있어서, 서비스 시 아무런 인터럽트를 발생하지 않게 된다.
본 실시예에서, 지연된 갱신을 제어하는데 아래에 기술한 바와 같은 수학식이 이용될 수 있다.
Figure 112009074490412-PAT00001
예시적인 실시예에서, 라우터 테이블에 대한 일관성 체크를 실행하기 위하여 코드가 컴파일러에서 생성될 수 있다. 본 실시예에서, 희망하는 에러 보율(error bound rate)(rerror)이 선택된다. 테이블이 체크되는 비율(rcheck)은 알려져 있거나 추정될 수 있다. 체크 비율은 세 개의 입력 rst, rid 및 rerror의 함수이다. 여기서, rst는 저장 비율(rate of stores)이고, rid는 로드 비율(rate of loads)이고, rerror는 최대 허용 가능 에러율(maximum tolerable error rate)이다. "로드"는 판독된 데이터이고 "저장"은 기록 또는 갱신된 데이터이다. 최대 허용 가능 에러율은 (저장 비율) ×(1 - 체크율)을 로드 비율로 나눈 값보다 적거나 같은 값으로 규정될 수 있다. 체크 회수는 1 - (최대 허용 가능 에러율과 작업 비율과의 곱)을 저장 비율로 나눈 값 보다 적거나 같은 값으로 규정될 수 있다.
지연된 갱신 캐싱을 적용하는 이러한 가능성은 절차간 분석 지원(inter-procedural analysis support)을 하는 컴파일러에 의해 식별될 수 있다. 절차간 분석은 기록되거나 판독되지만, 록(locks)에 의해 보호되지 않는 전역 변수를 결정할 수 있다.
메모리 프로파일링(memory profiling)(또는 다른 분석 또는 모니터링 메커니즘)의 결과와 결합된 절차간 분석의 이러한 결과는 지연-갱신 캐시에서 가장 유익 할 전역 변수를 식별할 수 있다.
대중적인 네트워크 애플리케이션을 조사할 때, 본 발명자들은 빈번하게 판독되지만 드물게 기록되는 많은 전역 데이터 구조를 찾아냈다. 패킷 프로세싱 코어에서 판독이 이루어지지만, 드문 기록은 일반적으로 새로운 테이블 엔트리를 추가하거나 공유 통계를 갱신하는 사용자 제어 코어에서 이루어진다. 이러한 특성을 보이는 데이터 구조의 몇 가지 예가 표 1에 리스트된다.
Figure 112009074490412-PAT00002
이 구조는 잠금의 I/O 비용이 높기 때문에 잠금으로 보호받지 않는다. 그 대신에, 이들 구조는 원자 기록(atomic write)에 의존하여 기록 갱신의 정확성을 보장받는다.
보통 이례적일 것이라 여겨질 관찰된 속성은 캐시된 복사본으로 갱신하라는 전갈이 이러한 구조에서는 수시로 지연될 수 있다는 것이다. 네트워크 애플리케이션과 같은 도메인-특정 애플리케이션에서, 갱신된 공유 데이터 구조로부터 유래하는 것으로, 캐시된 복사본으로 즉시 이행되지 않은 우발적인 에러는 허용될 수 있다. 표 2에는 일예의 네트워크 애플리케이션의 가능한 에러의 예가 도시된다. 네트워크 어드레스 변환(NAT)과 패킷 전송 애플리케이션에서, 패킷이 때때로 잘못 라우트될 수 있다고 추정하는 것은 합당하다. 서비스 품질(QoS)을 지원하는 라우터에 있는 플로우 파라미터(flow parameter)는, 장기간 평균이 정확하게 이행하고 있는 한, 사용자 정의 플로우(user-defined flow)의 갱신 동안 단기간에 경미하게 일탈할 수 있다.
Figure 112009074490412-PAT00003
애플리케이션들의 도메인으로서, 네트워크 프로그램은 전형적으로 수많은 소스로부터의 에러를 취급하도록 디자인된다. 실제로, 에러를 취급하는 패킷은 많은 광범위한 네트워크 애플리케이션에서 거의 절대적으로 사용된다. 물리적 계층 이더넷은 패킷 충돌을 확인하기 위하여 에러를 검출해야 한다. 전송 제어 프로토콜 (TCP)은 패킷이 수신기에 도달했다는 것을 보장하기 위하여 수신기에 의한 전송된 패킷의 확인(ACKs)을 요하는 커넥션 지향 프로토콜이다(예를 들면, W.R. Stevens, "TCP/IP Illustrated Vol. 1", 에디슨-웨슬리, 1994년)을 참조할 것). 송신기에 의해 ACKs를 수신하지 못하면 미확인 패킷을 재전송하는 것으로 귀착된다. (스케쥴링 및 미터링 알고리즘을 통해) QoS 라우터는 확실하게 패킷을 드롭하여 미리 규정된 플로우에 대역폭을 할당한다(예를 들면, S. Floyd 와 V. Jacobson의 "Random Early Detection Gateways for Congestion Avoidance," IEEE/ACM Transaction on Networking, 1993년 8월, 을 참고할 것)
도 2는 공유 글로벌 데이터로의 최적하지 못한 액세스를 도시한다. 빈번하지 않은 기록 경로(210)는 공유 데이터(220)에 있는 라우팅 테이블을 갱신한다. 패킷을 처리할 때 빈번한 읽기 경로(230)는 패킷 프로세서의 각각에 의해 실행된다. 라우트될 모든 패킷은 공유 메모리에 있는 테이블 구조로의 액세스를 유발한다. 일 실시예에서, 라우팅 테이블이 갱신될 때, 글로벌_데이터(global_data)(221)는 글로벌_데이터(global_data)(221) 공유 데이터 영역(220)에 저장된다(211). 일례로, 라우팅 테이블이 애플리케이션에 의해 판독될 때(231), 공유 데이터는 글로벌_데이터(global_data)(221)에서 검색된다.
도 3은 본 발명의 실시예에 따라서 메모리 성능을 향상시키기 위하여 어떻게 캐시 일관성이 지연 허용 글로벌 데이터로 이완될 수 있는지를 설명하는 최적화된 액세스 시퀀스의 블록 및 플로우 다이어그램을 도시한다. 본 발명의 실시예들은 공유 데이터를 액세스하는 다중 프로세서(350)를 이용하여 실행하도록 디자인된다. 이들 프로세서는 멀티프로세서 시스템, 많은 프로세싱 요소를 갖는 네트워크 프로세서, 및 멀티코어 시스템과 같은 다중 프로세서를 갖는 다른 시스템일 수도 있다. 글로벌_데이터(global_data)(305)는 멀티-프로세서와 멀티코어 시스템 내 프로세서들(350) 사이에서 공유될 수 있다. 이 도면에서, 실선의 수직 화살표는 판독/로드 및 기록/저장 모듈의 일시적인 실행을 나타낸다. 가로지르는 점선의 화살표는 판독 및 기록 모듈에 의한 공유 데이터로의 액세스를 나타낸다. 본 발명의 실시예에서, 데이터에 대한 갱신은 데이터의 액세스와 비교하여 빈번하지 않게 일어난다. 데이터가 프로세서 n에 의해 빈번하지 않은 기록 경로(300)에서 갱신될 때, 갱신된 데이터는 공유 메모리 내에 글로벌_데이터(global_data)(305)로서 저장될 수 있다. 그 다음에 갱신_플래그(update_flag)가 참(true)으로 세트되고(303), 공유 메모리(307)에 저장된다.
네트워크 프로세스는 갱신을 체크하기 전에 수차례에 걸쳐 필요한 데이터를 캐시로부터 지속적으로 액세스할 수도 있다. 이것은 애플리케이션이 약간의 에러율을 허용할 수 있기 때문에 가능하다. 로컬 카운터에서, 카운트(count)는 데이터 구조로의 액세스의 트랙을 유지하는데 사용된다. 프로세서 m의 판독 경로(310)는 카운트(count)가 특정한 임계치(threshold) 보다 큰지의 여부를 결정한다(311). 만일 그렇다면, 카운트(count)는 제로로 리셋된다(313). 갱신_플래그(update_flag)(307)는 공유 메모리, 또는 다른 지정된 위치로부터 로드된다. 일 실시예에서, 갱신_플래그(update_flag)는 시스템 레지스터에 상주한다. 다른 실시예에서, 갱신_플래그(update_flag)는 제어 라인에 따라 세트된다. (315)에서 결정된 바와 같이, 글로벌_데이터(global_data)가 갱신되었다면, (319)에서 캐시는 클리어 된다. 또한, 갱신_플래그(update_flag) 역시 클리어된다. 그 다음, (321)에서 카운트(count)는 증분되며 갱신된 데이터는 공유 메모리로부터 로드된다. (311)에서 결정된 바와 같이, 카운트(count)가 임계치(threshold) 보다 크지 않으면, 또는 아무런 갱신이 없었다면(갱신_플래그(updata_flag)는 거짓(False)과 같음), 데이터는, 유효하다면, 간단하게 캐시로부터 로드된다(317). 데이터가 현재 캐시 내에 없다면, 전통적인 방법을 사용하여 자동으로 공유 메모리에서 데이터를 검색할 수도 있다.
당 분야에서 통상의 지식을 가진 자에게는 프로세서 n과 m이 동일한 프로세서일 수 있음이 자명할 것이다. 다시 말해서, 글로벌_데이터(global_data)에서 판독을 실행하는 프로세서 m이 실제로 같은 프로세서인 것을 빈번하지 않은 기록 경로에서 프로세서 n에 의해 실행된 갱신 동안에 시간을 맞출 수도 있다.
당 분야에서 통상의 지식을 가진 자에게는 빈번하게 판독된 데이터가 캐시 메모리에 배치될 때에 관한 방책이 본 발명의 실시예를 수용하기 위하여 수정될 필요가 없다는 것이 자명할 것이다. 갱신_플래그(update_flag)를 사용하여 보호될 글로벌_데이터(global_data)는 전체 데이터 구조, 또는 데이터 구조의 일부분일 수도 있다. 언제라도, 보호된 데이터 구조, 또는 그의 일부분은 공유 메모리, 또는 부가적으로 캐시에 있을 수 있다. 메모리는 데이터가 메모리로부터 검색되거나 또는 캐시로부터 검색되는 것을 제어하기 위하여 소프트웨어 핸들러를 포함할 수 있다. 일 실시예에서, 갱신_플래그(update_flag)를 설정하고 루프를 임계치(threshold)의 체크에 삽입하기 위한 추가적인 코드는 편집 시간 동안에 네트워크 코드 내로 삽입될 수 있다.
캐시는 태그 어레이와 액추얼 라인(actual line) 또는 값을 갖는다. 태그 어레이는 어드레스를 포함한다. 캐시된 값이 어드레스를 위해 요구될 때, 태그 어레이는 매칭 어드레스에 대해 체크된다. 태그 어레이에서 매칭이 있다면, 라인이 캐시에서 당겨진다. 그렇지 않으면 메인 메모리로 가서 그 데이터를 검색하는 것이 필요하다. 그 다음 최근에 검색된 데이터에게 자리를 내주기 위하여 하나의 아이템이 캐시에서 제거될 수 있다. 하드웨어 캐시의 경우, 이러한 프로세스는 제어 라인에서 실행된다. 소프트웨어 캐시의 경우, 하드웨어라기 보다, 소프트웨어 핸들러가 캐시로의 액세스를 제어한다. 메모리에 액세스하는 애플리케이션 코드는 전술한 바와 같이 추가적인 코드 라인을 삽입하기 위하여 컴파일된다. 소스 코드가 로드(LOAD)를 나타낼 때마다, (310)에서 예시된 바와 같이, 체크 임계치 루프가 실행 코드내로 삽입된다. 저장(STORE)이 나타날 때마다, 컴파일러는 (300)에서 기술된 바와 같이, 갱신_플래그(update_flag)를 설정하기 위하여 코드를 삽입할 것이다. 컴파일러는 갱신_플래그(update_flag)가 배치된 위치를 표시하는 것으로 커스터마이즈된다. 그래서 적합한 코드는 생성될 수 있다. 임계치(threshold)는 또한 루프가 희망하는 임계치로 생성될 수 있도록 결정될 수 있으며 컴파일러에게 알려지게 할 수도 있다. 디폴트 임계치는 컴파일러에서 하드 코드되며(hard-coded) 그리고 선택적으로 중첩기록될 수 있다. 실시예들에서, 임계치(reshold)는 동작중에 설정될 수도 있으며 코드가 실행중에 있을 때 검색될 수도 있는 동적 변수일 수도 있다. 임계치는 메모리, 또는 런타임 동안에 애플리케이션 코드에 액세스 가능한 시스템 레지스터 또는 다른 어떤 장소에 상주할 수 있다. 그래서, 오퍼레이터가 에러율이 너무 높다고 판단하면, 시스템을 오프 라인으로 조치하지 않고도 임계치(threshold)가 낮추어질 수 있다.
도 4는 본 발명의 실시예에 따른 애플리케이션 코드를 최적화하기 위한 예시적인 시스템을 설명하는 블록도이다. 최적화를 요구하는 갱신 지연 에러 허용 애플리케이션(401)은 글로벌_데이터(global_data)를 갱신하고 액세스하기 위한 저장(STORE)(413)과 로드(LOAD)(415) 인스트럭션을 갖는 소스 코드(411)를 가질 수 있다. 애플리케이션 소스 코드는 최적화 컴파일러(403)에 의해 컴파일되어 최적화된 실행(405)을 생성할 수 있다. 일 실시예에서, 최적화 컴파일러는 저장(STORE) 인스트럭션이 확인될 때 갱신 코드를 생성하기 위한 갱신 코드 생성 모듈(433), 및 로드(LOAD) 인스트럭션(415)이 확인될 때 확장된 로드 코드를 생성하기 위한 로드 코드 생성 모듈(443)을 가질 수 있다. 당 분야에서 통상의 지식을 가진 자에게는 최적화 컴파일러가 하나의 모듈로 합쳐진 갱신 및 로드 코드 생성용 모듈로 구현될 수 있음이 자명할 것이며, 이들은 별개의 모듈로 구현될 수도 있다.
일 실시예에서, 갱신 코드 생성 모듈(433) 및 로드 코드 생성 모듈(443)은 원래 애플리케이션 코드에 있는 저장(STORE)(413)과 로드(LOAD)(415) 인스트럭션을 확인한다. 저장(STORE)(413) 인스트럭션 및 로드(LOAD)(415) 인스트럭션은 최적화된 코드(420)에서 캐시 일관성 및 갱신 지연을 다루는 추가 인스트럭션들을 포함하도록 컴파일된다. 저장(STORE) 인스트럭션은 저장(STORE) 인스트럭션 및 셋 갱신_플래그(SET update_flag) 인스트럭션(421) 두 가지를 포함하도록 확장될 수 있다. 로드(LOAD) 인스트럭션은 도 3의 (310)에서 설명된 바와 같이, 루프(423)와 동등한 컴파일된 코드로 확장될 수 있다.
도 5는 본 발명의 실시예에 따라서, 애플리케이션 프로파일러(application profiler)를 사용하여 애플리케이션 코드를 최적화하기 위한 예시적인 시스템을 설명하는 블록도이다. 애플리케이션 소스 코드(501)는 메모리 또는 애플리케이션 프로파일러(502)를 통해서 통과될 수 있다. 몇몇 실시예에서, 메모리 프로파일러는 최적화 컴파일러(503)의 일부분일 수도 있다. 프로파일러는 빈번하게 데이터가 갱신-지연을 받아야 하는 지의 결정을 도와주는 분석을 실행할 수 있다. 일 실시예에서, 애플리케이션 프로파일러는 어느 전역 변수(506)가 가장 잘 공유 메모리에 넣어지는지, 즉, 빈번하게 액세스되고 드물게 갱신되는지를 결정한다. 프로파일러는 또한 적당한 임계치 값(504)을 결정할 수 있다. 실시예들에서, 임계치 값(504)은 애플리케이션 코드에서 허용 가능 에러율, 로드 및 저장에 근거될 수 있으며, 오프라인으로 결정될 수도 있고, 또는 애플리케이션 프로파일러에 의해 결정되기 보다는 역동적으로 선택될 수도 있다. 전역 변수 선택(506) 및 임계치 정보(504)는 최적화 컴파일러(503)에 공급될 수 있다. 애플리케이션 소스 코드(501)는 최적화 컴파일러(503)를 통과하여 최적화된 컴파일 코드(505)를 생성한다. 일 실시예에서, 최적화 컴파일러는 도 4와 함께 설명한 바와 같이, 갱신 코드 생성 모듈(533) 및 로드 코드 생성 모듈(543)을 포함한다.
일 실시예에서, 최적화 컴파일러는 절차간 분석 모듈(553)을 더 포함한다. 몇몇 실시예에서 최적화 컴파일러는 머신-독립 글로벌 최적화(machine-independent global optimizations), 루프-네스트 최적화(loop-nest optimizations), 및/또는 코드 생성을 더 포함한다. 절차간 분석 모듈(553)로부터의 결과는 지연된 갱신 캐시에서 가장 유익할 전역 변수를 식별하기 위하여 메모리 프로파일링(502) (또는 다른 분석 또는 감시 메커니즘)으로부터의 결과와 합쳐질 수 있다. 절차간 분석은 기록 및 판독되지만 잠금으로 보호받지 않는 전역 변수를 결정할 수 있다. 임계치 값(504)은 런타임 동안에 동적으로 갱신될 수도 있고, 또는 정체될 수도 있다.
당 분야에서 통상의 지식을 가진 자에게는 전술한 시스템 및 방법의 실시예가 네트워크 라우팅 이외의 애플리케이션에 사용될 수 있음이 자명할 것이다. 예를 들면, 스크린 또는 디스플레이 연출을 위한 실시예가 사용될 수 있다. 어떠한 경우에는, 그래픽스에서의 포지티브 에러율 또는 컴퓨팅 시스템에서의 다른 스크린 요소를 허용하는 것이 수용가능할 수도 있다. 이 경우에, 사용자는 데이터 갱신 플래그가 체크될 때까지 짧은 기간 동안 갱신되지 않은 픽셀 또는 스크린 부분을 볼 수도 있다. 이러한 스크린 부분은 컴퓨팅 시스템 상의 애플리케이션 프로그램의 동작에 중요하지 않을 수도 있다. 에러 허용 애플리케이션의 다른 실시예가 구현될 수 있다.
일 실시예에서, 임계치가 제로로 설정되면, 갱신 플래그는 프로세싱 루프를 통과할 때마다 체크된다. 더 적은 에러가 허용되게 하는 애플리케이션은 이 수준으로 설정된 임계치를 가질 수 있다. 몇몇 실시예에서, 임계치는 예상된 트래픽과 갱신을 수용하기 위하여 일(day), 또는 주 중의 기설정 시간 때로 설정되고 그 때의 여러 값으로 리셋될 수 있다. 더 적은 에러를 허용하는 다른 애플리케이션은 전술한 시스템 및 방법을 사용하여 구현될 수 있다. 예를 들면, 중요한 계산이 압박을 받고 있을 때 먼저 실행되도록 그 계산의 중요성을 중시하는 애플리케이션은 캐시 검색에서 에러의 경향이 있는 중요하지 않은 계산을 드롭(drop)시킬 수도 있다. 이것은 계산적인 압박 시간 동안에 성능과 에러율 사이에서 실행 가능한 맞교환일 수도 있다.
일 실시예에서, 소정 데이터 블록에 대하여 하나의 공유 메모리 유닛이 있으며 각 프로세서는 그 자신의 내장 캐시(on-board cache)를 가지고 있다. 다른 실시예에서, 프로세서의 서브셋만이 내장 캐시를 가지고 있다. 내장 캐시가 없는 프로세서는 액세스가 요구될 때마다 주 (공유) 메모리에 액세스할 것이다.
도 6은 에러 분석에 근거한 임계치의 동적인 갱신을 설명하는 블록도이다. 본 발명의 실시예에서, 에러율 분석 모듈(601)은 런타임 때 동작한다. 에러율 분석 모듈(601)은 공유 메모리(305)와 동기가 맞지 않는 캐시 데이터를 이용하는 프로세서와 관련된 에러와 연관된 매트릭스를 캡쳐할 수 있다. 만약에 에러율이 너무 높은 것으로 (또는 너무 낮은 것으로) 판단되면, 에러율 분석 모듈은 최적화된 애플리케이션 코드에서 이용된 임계치(603)를 자동으로 갱신할 수 있다. 임계치(603)는 프로세서(350)에서 실행중인 최적화된 애플리케이션 코드에 즉시 이용가능한 런타임 변수일 수도 있다. 다른 실시예에서, 에러 분석은 수동으로 실행될 수 있다. 또 다른 실시예에서, 임계치가 컴파일러에서 하드 코드화되면, 애플리케이션 코드는 다시 컴파일되고 다시 최적화될 필요가 있을 수 있다. 다른 실시예에서, 임계치(603)는 다음 편집을 위한 입력으로서 최적화 컴파일러(503)에 자동으로 전송될 수 있다.
본 명세서에서 개시된 기법은 어떤 특정한 하드웨어 또는 소프트웨어 구성으로도 제한되지 않는다, 이들은 어떤 계산, 소비자 전자공학, 또는 프로세싱 환경에서 적용가능성을 찾을 수 있다. 이 기법은 하드웨어, 소프트웨어, 또는 이들의 조합에서 실행될 수 있다. 이 기법은 모바일 또는 고정 컴퓨터, 개인 휴대용 정보 단말기, 셋탑 박스, 셀룰러 폰 및 페이저(pager), (DVD 플레이어, 개인 비디오 레코더, 개인 비디오 플레이어, 인공 위성 수신 장치, 스테레오 수신기, 케이블 TV 수신기를 포함하는) 소비자 전자공학 장치, 및 하나 이상의 프로세서, (휘발성 및 비휘발성 메모리 및/또는 저장 소자를 포함하는) 프로세서에 의해 액세스 가능한 저장 매체, 적어도 하나의 입력 장치, 및 하나 이상의 출력 장치를 포함할 수 있는 다른 전자 장치와 같은 프로그램 가능 머신에서 실행하는 프로그램으로 구현될 수 있다. 프로그램 코드는 입력 장치를 이용하여 입력된 데이터에 제공되어 서술한 기능을 실행하고 출력 정보를 생성한다. 출력 정보는 하나 이상의 출력 장치에 제공될 수 있다. 당 분야에서 통상의 지식을 가진 자에게는 본 발명이 멀티프로세서 시스템, 미니 컴퓨터, 메인프레임 컴퓨터, 독립적인 소비자 전자공학 장치 등을 포함하는 각종 시스템 구성으로 실시될 수 있음을 인식할 것이다. 본 발명은 또한 업무 또는 업무의 부분이 통신 네트워크를 통해 링크된 원격 처리 장치에 의해 실행될 수 있는 분산 컴퓨팅 환경에서 실시될 수 있다.
각 프로그램은 처리 시스템과 통신하기 위하여 고도의 절차상 또는 객체 지향 프로그램 언어에서 구현될 수 있다. 그러나, 필요하다면, 프로그램은 어셈블리어 또는 기계어로 구현될 수 있다. 임의의 경우에서도, 언어는 컴파일되거나 해석될 수 있다.
프로그램 인스트럭션은 인스트럭션대로 프로그램되는 범용 목적 또는 특수 목적 처리 시스템이 본 명세서에서 기술된 동작을 실행하도록 하는데 이용될 수 있다. 이와 달리, 동작을 실행하기 위한 하드와이어드 로직을 포함하는 특정 하드웨어 구성요소에 의해, 또는 프로그램된 컴퓨터 구성요소 및 커스톰 하드웨어 구성요소의 어떠한 조합에 의해서도 동작이 실행될 수 있다. 본 명세서에 기술된 방법은 프로세싱 시스템 또는 그 방법을 실행하는 다른 전자 장치를 프로그램하는데 사용될 수 있는 인스트럭션어가 저장된 머신 액세스 가능한 매체(machine accessible medium)를 포함할 수 있는 컴퓨터 프로그램 제품으로 제공될 수 있다. 본 명세서에서 사용된 "머신 액세스 가능한 매체"라는 용어는 머신에 의하여 실행을 위한 인스트럭션의 순서를 저장하거나 부호화할 수 있는 그리고 그 머신이 본 명세서에서 기술된 방법들 중 어느 하나를 실행하게 하는 어떠한 매체라도 포함할 것이다. "머신 액세스 가능한 매체"라는 용어는 고상(solid-state) 메모리, 광학 및 자기 디스크, 및 데이터 신호를 부호화하는 반송파를 포함하지만, 이것들로 제한하지 않을 것이다. 더욱이, 본 기술에서는 소프트웨어에 대하여 한가지 양식 또 다른 양식 (예를 들면, 프로그램, 절차, 프로세스, 애플리케이션, 모듈, 로직, 등등)에서 동작을 취하거나 결과를 일으키는 것이라고 말하는 것이 공통적이다. 이와 같은 표현은 프로세싱 시스템에 의해 소프트웨어의 실행을 말하는 약칭 방식에 불과한 것으로, 프로세서로 하여금 결과를 산출하는 동작을 실행하게 한다.
본 발명이 설명적인 실시예를 참조하여 기술되었지만, 이러한 설명은 제한적인 의미로 해석되도록 예정한 것은 아니다. 본 발명의 설명적인 실시예 뿐만 아니라 다른 실시예의 여러가지 수정은 본 발명이 속하는 기술에서 숙련된 자들에게는 자명하며, 본 발명의 정신 그리고 범위 내에 속한다고 간주된다.
도 1은 본 발명의 실시예에 사용될 수 있는 네트워크 애플리케이션에서 패킷 전송을 위한 예시적인 트라이 테이블을 도시한 도면.
도 2는 공유 글로벌 데이터로의 최적화되지 않은 액세스를 도시한 도면.
도 3은 본 발명의 실시예에 따른 소프트웨어 캐시의 최적화된 액세스의 흐름도.
도 4는 본 발명의 실시예에 따른 애플리케이션 코드를 최적화하는 예시적인 시스템의 블록도.
도 5는 본 발명의 실시예에 따른 애플리케이션 프로파일러를 이용하여 애플리케이션 코드를 최적화하는 예시적인 시스템의 블록도.
도 6은 본 발명의 실시예에 따른 런타임(runtime) 때 실행된 에러율 분석을 설명하는 블록도.

Claims (10)

  1. 지연된 갱신 소프트웨어 캐싱(delayed update sofrware cashing)을 허용하는 애플리케이션 코드를 최적화하는 시스템에 있어서,
    상기 애플리케이션 코드에 대하여 절차간 분석을 수행하는 제 1 분석 모듈-상기 제 1 분석은 상기 애플리케이션 코드에서 사용된 전역 변수를 결정하며, 상기 결정된 전역 변수는 기록되고 판독됨-과,
    최적화된 애플리케이션 코드를 생성하는 코드 생성 모듈을 포함하되,
    상기 최적화된 애플리케이션 코드는 지연된 캐시 갱신을 허용하고 허용 가능한 에러율에 기초하여 갱신되지 않은 캐시로부터 보다 오래된 데이터의 제한된 검색을 허용함으로써 지연 공차 전역 데이터의 캐시 일관성을 완화하여 메모리 성능을 향상시키는 코드이고, 상기 캐시는 프로세싱 요소에 통신가능하게 결합되며, 상기 프로세싱 요소는 또한 메인 메모리에 결합되는
    애플리케이션 코드 최적화 시스템.
  2. 제 1 항에 있어서,
    상기 코드 생성 모듈은
    상기 최적화된 애플리케이션 코드에 코드를 삽입하여 갱신 플래그를 설정하고 수정된 데이터를 상기 전역 변수에 저장하는 갱신 코드 생성 모듈과,
    상기 전역 변수가 판독될 위치를 결정하기 위해, 상기 최적화된 애플리케이션 코드에 코드를 삽입하는 로드 코드 생성 모듈을 포함하며,
    상기 위치는 캐시 및 공유 메모리 중 하나이며, 상기 위치는 상기 갱신 플래그의 주기적인 체크에 기초하여 결정되는
    애플리케이션 코드 최적화 시스템.
  3. 제 2 항에 있어서,
    상기 갱신 플래그를 체크하는 주기성은 허용 가능한 에러율, 상기 애플리케이션 코드 내의 저장 횟수 및 최적화 전의 상기 애플리케이션 코드 내의 로드 횟수로부터 도출된 임계치에 의해 결정되고,
    상기 전역 데이터는 캐시로부터 판독되고, 상기 갱신 플래그는 상기 임계치에 도달할 때까지 체크되지 않는
    애플리케이션 코드 최적화 시스템.
  4. 제 3 항에 있어서,
    에러율 분석을 수행하고 상기 임계치를 상기 코드 생성 모듈에 제공하는 제 2 분석 모듈을 더 포함하는
    애플리케이션 코드 최적화 시스템.
  5. 제 3 항에 있어서,
    상기 임계치는 실행 동안 액세스 가능한 위치로부터 상기 최적화된 애플리케이션 코드로의 런타임(runtime) 동안에 동적으로 검색되는
    애플리케이션 코드 최적화 시스템.
  6. 지연된 갱신 소프트웨어 캐싱을 위한 애플리케이션 코드를 최적화하는 방법에 있어서,
    상기 애플리케이션 코드에 대하여 절차간 분석을 수행하고 상기 애플리케이션 코드에서 사용된 전역 변수를 결정하는 단계 -상기 결정된 전역 변수는 기록되고 판독됨- 와,
    최적화된 애플리케이션 코드를 생성하는 단계를 포함하되,
    상기 최적화된 애플리케이션 코드는 지연된 캐시 갱신을 허용하고 허용 가능한 에러율에 기초하여 갱신되지 않은 캐시로부터 보다 오래된 데이터의 제한된 검색을 허용함으로써 지연 공차 전역 데이터의 캐시 일관성을 완화하여 메모리 성능을 향상시키는 코드이고, 상기 캐시는 프로세싱 요소에 통신가능하게 결합되며, 상기 프로세싱 요소는 또한 메인 메모리에 결합되는
    애플리케이션 코드 최적화 방법.
  7. 제 6 항에 있어서,
    상기 최적화된 애플리케이션 코드 생성 단계는
    상기 최적화된 애플리케이션 코드에 갱신 코드를 삽입하여 갱신 플래그를 설정하고 수정된 데이터를 상기 전역 변수에 저장하는 갱신 코드 삽입 단계와,
    상기 전역 변수가 판독될 위치를 결정하기 위해, 상기 최적화된 애플리케이션 코드에 로드 코드를 삽입하는 단계를 포함하고,
    상기 위치는 캐시 및 공유 메모리 중 하나이며, 상기 위치는 상기 갱신 플래그의 주기적인 체크에 기초하여 결정되는
    애플리케이션 코드 최적화 방법.
  8. 제 7 항에 있어서,
    허용 가능한 에러율, 상기 애플리케이션 코드 내의 저장 횟수 및 최적화 전의 상기 애플리케이션 코드 내의 로드 횟수로부터 도출된 임계치에 기초하여 상기 갱신 플래그를 체크하는 주기성을 결정하는 단계를 더 포함하되,
    상기 전역 데이터는 캐시로부터 판독되고, 상기 갱신 플래그는 상기 임계치에 도달할 때까지 체크되지 않는
    애플리케이션 코드 최적화 방법.
  9. 제 8 항에 있어서,
    에러율 분석을 수행하여 상기 임계치를 식별하는 단계와,
    상기 임계치를 상기 코드 생성 모듈에게 제공하는 단계를 더 포함하는
    애플리케이션 코드 최적화 방법.
  10. 제 8 항에 있어서,
    실행 동안 액세스 가능한 위치로부터 상기 최적화된 애플리케이션 코드로의 런타임(runtime) 동안에 상기 임계치를 동적으로 검색하는 단계를 더 포함하는
    애플리케이션 코드 최적화 방법.
KR1020097025188A 2004-11-19 2005-11-17 바운디드 에러 지연된 갱신 소프트웨어 캐싱 KR101145733B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/993,957 2004-11-19
US10/993,957 US7529888B2 (en) 2004-11-19 2004-11-19 Software caching with bounded-error delayed update
PCT/US2005/042334 WO2006055955A2 (en) 2004-11-19 2005-11-17 Software caching with bounded-error delayed update

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020077007265A Division KR100953458B1 (ko) 2004-11-19 2005-11-17 바운디드 에러 지연된 갱신 소프트웨어 캐싱

Publications (2)

Publication Number Publication Date
KR20100017577A true KR20100017577A (ko) 2010-02-16
KR101145733B1 KR101145733B1 (ko) 2012-05-22

Family

ID=36061326

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020077007265A KR100953458B1 (ko) 2004-11-19 2005-11-17 바운디드 에러 지연된 갱신 소프트웨어 캐싱
KR1020097025188A KR101145733B1 (ko) 2004-11-19 2005-11-17 바운디드 에러 지연된 갱신 소프트웨어 캐싱

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020077007265A KR100953458B1 (ko) 2004-11-19 2005-11-17 바운디드 에러 지연된 갱신 소프트웨어 캐싱

Country Status (6)

Country Link
US (1) US7529888B2 (ko)
EP (2) EP1965302B1 (ko)
JP (2) JP5000529B2 (ko)
KR (2) KR100953458B1 (ko)
CN (1) CN101036124B (ko)
WO (1) WO2006055955A2 (ko)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006270303A (ja) * 2005-03-23 2006-10-05 Hitachi Ltd 通信制御方法、通信制御装置および通信制御プログラムを記録した記憶媒体
US7493452B2 (en) * 2006-08-18 2009-02-17 International Business Machines Corporation Method to efficiently prefetch and batch compiler-assisted software cache accesses
US20080127214A1 (en) * 2006-10-05 2008-05-29 Holt John M Contention detection with counter rollover
WO2009027138A1 (en) 2007-08-30 2009-03-05 International Business Machines Corporation Accessing data entities
US7453910B1 (en) 2007-12-18 2008-11-18 International Business Machines Corporation Synchronization of independent clocks
US8561043B2 (en) * 2008-03-28 2013-10-15 International Business Machines Corporation Data transfer optimized software cache for irregular memory references
US8527974B2 (en) * 2008-03-28 2013-09-03 International Business Machines Corporation Data transfer optimized software cache for regular memory references
US8561044B2 (en) * 2008-10-07 2013-10-15 International Business Machines Corporation Optimized code generation targeting a high locality software cache
US8312219B2 (en) 2009-03-02 2012-11-13 International Business Machines Corporation Hybrid caching techniques and garbage collection using hybrid caching techniques
KR101644653B1 (ko) 2010-03-19 2016-08-02 삼성전자주식회사 단말 적합성 애플리케이션 최적화장치 및 방법
WO2012043789A1 (ja) 2010-09-30 2012-04-05 ブラザー工業株式会社 印刷装置
US8676920B2 (en) * 2010-12-08 2014-03-18 GM Global Technology Operations LLC Intelligent cache management protocol for vehicular networks
CN102571419A (zh) * 2011-12-19 2012-07-11 曙光信息产业(北京)有限公司 一种软硬件结合实现的端口列表高效管理系统和方法
US8850406B1 (en) * 2012-04-05 2014-09-30 Google Inc. Detecting anomalous application access to contact information
CN103246616B (zh) * 2013-05-24 2017-09-26 浪潮电子信息产业股份有限公司 一种长短周期访问频度的全局共享缓存替换方法
US9426663B2 (en) 2013-06-26 2016-08-23 Cable Television Laboratories, Inc. Capacity sharing between wireless systems
KR20160003485A (ko) * 2014-07-01 2016-01-11 삼성전자주식회사 원격 함수 호출을 위한 자동 코드 생성
US9730196B2 (en) 2014-07-29 2017-08-08 Cable Television Laboratories, Inc. LTE control channel reservation in RF bands with competing communication systems
US10063479B2 (en) * 2014-10-06 2018-08-28 Barefoot Networks, Inc. Fast adjusting load balancer
US9529531B2 (en) 2014-10-06 2016-12-27 Barefoot Networks, Inc. Proxy hash table
US10067967B1 (en) 2015-01-27 2018-09-04 Barefoot Networks, Inc. Hash table storing reduced search key
US10560228B2 (en) 2015-05-14 2020-02-11 Cable Television Laboratories, Inc. Hybrid automatic repeat request (HARQ) in listen before talk systems
US10158573B1 (en) 2017-05-01 2018-12-18 Barefoot Networks, Inc. Forwarding element with a data plane load balancer
US10599567B2 (en) 2017-10-06 2020-03-24 International Business Machines Corporation Non-coherent read in a strongly consistent cache system for frequently read but rarely updated data
US11184446B2 (en) 2018-12-05 2021-11-23 Micron Technology, Inc. Methods and apparatus for incentivizing participation in fog networks
US11013043B2 (en) 2019-01-08 2021-05-18 Micron Technology, Inc. Methods and apparatus for routine based fog networking
US11256778B2 (en) 2019-02-14 2022-02-22 Micron Technology, Inc. Methods and apparatus for checking the results of characterized memory searches
US11327551B2 (en) 2019-02-14 2022-05-10 Micron Technology, Inc. Methods and apparatus for characterizing memory devices
US10957416B2 (en) 2019-02-14 2021-03-23 Micron Technology, Inc. Methods and apparatus for maintaining characterized memory devices
US12118056B2 (en) 2019-05-03 2024-10-15 Micron Technology, Inc. Methods and apparatus for performing matrix transformations within a memory array
US10867655B1 (en) 2019-07-08 2020-12-15 Micron Technology, Inc. Methods and apparatus for dynamically adjusting performance of partitioned memory
US11449577B2 (en) 2019-11-20 2022-09-20 Micron Technology, Inc. Methods and apparatus for performing video processing matrix operations within a memory array
US11853385B2 (en) 2019-12-05 2023-12-26 Micron Technology, Inc. Methods and apparatus for performing diversity matrix operations within a memory array

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03266046A (ja) * 1990-03-16 1991-11-27 Nippon Telegr & Teleph Corp <Ntt> データベース高速アクセス方法
JPH0410051A (ja) * 1990-04-27 1992-01-14 Hitachi Ltd マルチプロセッサシステムの共有メモリ制御方法
US5249284A (en) * 1990-06-04 1993-09-28 Ncr Corporation Method and system for maintaining data coherency between main and cache memories
EP0460852A3 (en) * 1990-06-04 1992-08-05 Ncr Corporation System for maintaining data coherency between main and cache memories
US5175856A (en) * 1990-06-11 1992-12-29 Supercomputer Systems Limited Partnership Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
JPH04205234A (ja) * 1990-11-30 1992-07-27 Oki Electric Ind Co Ltd データベース更新バッファ吐き出し装置
JPH0869405A (ja) * 1994-08-30 1996-03-12 Nec Software Ltd 分散処理システムのメモリ共有化装置
JPH10124372A (ja) * 1996-10-18 1998-05-15 Nippon Telegr & Teleph Corp <Ntt> 自律キャッシュ制御システム
US5909698A (en) * 1997-03-17 1999-06-01 International Business Machines Corporation Cache block store instruction operations where cache coherency is achieved without writing all the way back to main memory
JP3563591B2 (ja) * 1997-09-29 2004-09-08 株式会社リコー 分散型データベースシステムの一貫性管理方法およびその方法の各工程をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
US6134710A (en) * 1998-06-26 2000-10-17 International Business Machines Corp. Adaptive method and system to minimize the effect of long cache misses
US6370614B1 (en) * 1999-01-26 2002-04-09 Motive Power, Inc. I/O cache with user configurable preload
JP2002157158A (ja) * 2000-11-20 2002-05-31 Hitachi Ltd データベースシステムにおけるデータ管理方法
JP3661614B2 (ja) * 2001-07-12 2005-06-15 日本電気株式会社 キャッシュメモリ制御方法及びマルチプロセッサシステム
JP3632635B2 (ja) * 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US6792510B1 (en) * 2002-02-14 2004-09-14 Novell, Inc. System and method for updating a cache
JP4381655B2 (ja) * 2002-05-31 2009-12-09 株式会社日立製作所 ストレージシステム、ストレージ装置、及び該ストレージ装置を利用した情報共有方法
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US7356813B2 (en) * 2002-09-26 2008-04-08 Hewlett-Packard Development Company, L.P. System and method for optimizing a program

Also Published As

Publication number Publication date
JP2012150830A (ja) 2012-08-09
EP1965302B1 (en) 2015-07-29
KR101145733B1 (ko) 2012-05-22
KR100953458B1 (ko) 2010-04-16
CN101036124A (zh) 2007-09-12
CN101036124B (zh) 2010-07-21
EP1825363B1 (en) 2017-05-17
JP2008521146A (ja) 2008-06-19
JP5000529B2 (ja) 2012-08-15
EP1825363A2 (en) 2007-08-29
JP5529194B2 (ja) 2014-06-25
KR20070052335A (ko) 2007-05-21
WO2006055955A3 (en) 2007-01-11
US7529888B2 (en) 2009-05-05
WO2006055955A2 (en) 2006-05-26
EP1965302A1 (en) 2008-09-03
US20060112237A1 (en) 2006-05-25

Similar Documents

Publication Publication Date Title
KR101145733B1 (ko) 바운디드 에러 지연된 갱신 소프트웨어 캐싱
US7350024B2 (en) Automatic generation of software-controlled caching and ordered synchronization
KR101038963B1 (ko) 캐쉬 할당을 위한 장치, 시스템, 방법 및 기계 액세스가능 매체
US7784037B2 (en) Compiler implemented software cache method in which non-aliased explicitly fetched data are excluded
US10558569B2 (en) Cache controller for non-volatile memory
US10068041B2 (en) Multi-core compact executable trace processor
KR20200123188A (ko) 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅
KR100714766B1 (ko) 비인접 데이터 구조를 선인출하는 방법
US20180300258A1 (en) Access rank aware cache replacement policy
US6782453B2 (en) Storing data in memory
KR20200123187A (ko) 상위 계층 캐시의 항목을 기반으로 하위 계층 캐시로의 유입을 로깅함으로써 트레이스 기록
KR20150057798A (ko) 캐시 제어 장치 및 방법
KR100243319B1 (ko) 비포함적 메모리 억세스 메커니즘
JP2006516168A (ja) ストライド予測テーブルにアドレスするためにキャッシュミスパターンを使用する方法
JP2003186742A (ja) ディレクトリ・キャッシュの更新
JP2014115851A (ja) データ処理装置及びその制御方法
Muthukrishnan et al. Finepack: Transparently improving the efficiency of fine-grained transfers in multi-gpu systems
US8266379B2 (en) Multithreaded processor with multiple caches
CN111078620A (zh) 具有软件-硬件共同管理的高速缓存系统的多核处理器
US10187488B2 (en) Methods for managing replacement in a distributed cache environment and devices thereof

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160427

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170504

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180427

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee