KR102584950B1 - 에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술 - Google Patents

에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술 Download PDF

Info

Publication number
KR102584950B1
KR102584950B1 KR1020187001105A KR20187001105A KR102584950B1 KR 102584950 B1 KR102584950 B1 KR 102584950B1 KR 1020187001105 A KR1020187001105 A KR 1020187001105A KR 20187001105 A KR20187001105 A KR 20187001105A KR 102584950 B1 KR102584950 B1 KR 102584950B1
Authority
KR
South Korea
Prior art keywords
transaction
transaction sequence
volatile memory
computing device
sequence
Prior art date
Application number
KR1020187001105A
Other languages
English (en)
Other versions
KR20180030523A (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 KR20180030523A publication Critical patent/KR20180030523A/ko
Application granted granted Critical
Publication of KR102584950B1 publication Critical patent/KR102584950B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/329Power saving characterised by the action undertaken by task scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1441Resetting or repowering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1474Saving, restoring, recovering or retrying in transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3013Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is an embedded system, i.e. a combination of hardware and software dedicated to perform a certain function in mobile devices, printers, automotive or aircraft systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3058Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations
    • G06F11/3062Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations where the monitored property is the power consumption
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4432Reducing the energy consumption
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/805Real-time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/85Active fault masking without idle spares
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/87Monitoring of transactions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Retry When Errors Occur (AREA)
  • Devices For Executing Special Programs (AREA)
  • Power Sources (AREA)

Abstract

불연속 실행을 위한 기술들은 컴파일러 컴퓨팅 디바이스 및 하나 이상의 대상 컴퓨팅 디바이스를 포함한다. 컴파일러 컴퓨팅 디바이스는 컴퓨터 프로그램을 원자 트랜잭션 시퀀스로 변환하고 그 트랜잭션들을 합체하여 추가적인 트랜잭션 시퀀스들을 생성한다. 컴파일러 컴퓨팅 디바이스는 상이한 세분성을 갖는 2개 이상의 트랜잭션 시퀀스를 포함하는 실행 가능 프로그램을 생성한다. 대상 컴퓨팅 디바이스는 실행 가능 프로그램으로부터 활성 트랜잭션 시퀀스를 해당 시퀀스의 세분성 및 신뢰 레벨에 기초하여 선택한다. 신뢰 레벨은 대상 컴퓨팅 디바이스의 에너지 하베스팅 유닛에 의해 생성된 이용 가능한 에너지를 나타낸다. 대상 컴퓨팅 디바이스는 활성 트랜잭션 시퀀스로부터의 트랜잭션들을 비휘발성 메모리에 성공적으로 커밋한 것에 응답하여 신뢰 레벨을 증가시킨다. 정전에 응답하여, 대상 컴퓨팅 디바이스는 신뢰 레벨을 리셋하고 트랜잭션들의 실행을 재개한다. 다른 실시예들이 설명되고 청구된다.

Description

에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술
관련 출원에 대한 상호 참조
본 출원은 35 U.S.C. § 119(e)의 규정하에, 2015년 8월 13일에 출원된 "에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술(TECHNOLOGIES FOR DISCONTINUOUS EXECUTION BY ENERGY HARVESTING DEVICES)"이라는 명칭의 미국 임시 특허 출원 제62/204,815호에 대한 우선권을 주장하는, 2015년 12월 26일에 출원된 "에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술(TECHNOLOGIES FOR DISCONTINUOUS EXECUTION OF ENERGY HARVESTING DEVICES)"이라는 명칭의 미국 특허 출원 제14/998,273호에 대한 우선권을 주장한다.
전형적인 컴퓨팅 시스템들은 하드 디스크 드라이브 또는 솔리드-스테이트(solid-state) 드라이브와 같은 영구 데이터 스토리지에 연결된 랜덤 액세스 메모리(RAM)와 같은 휘발성 메모리를 포함한다. 휘발성 메모리는 동작을 위해 전원을 필요로 한다; 휘발성 메모리의 내용은 컴퓨팅 시스템에 대한 전원이 꺼지면 손실될 수 있다. 비휘발성 스토리지는 컴퓨팅 시스템에 대한 전력이 꺼져 있는 동안 그 내용을 유지한다.
현재, 소형 컴퓨팅 디바이스들(예를 들어, 사물 인터넷을 구성하는 디바이스들)은 태양, 기계적 진동, 및 RF 신호와 같은 에너지 소스들을 사용할 수 있으며, 따라서 예측할 수 없는, 버스티한(bursty), 그리고 매우 간헐적인 전원을 가질 수 있다. 기존 기술들은 전력이 이용 가능할 때 자주 휘발성 시스템 상태를 체크 포인트하고 장시간 실행되는 프로그램들을 조금씩 실행함으로써 그러한 초 저전력 디바이스들로 계산을 수행한다. 그러나, 전체 프로그램 상태를 체크 포인트하는 것은 비교적 상당한 시간과 에너지를 수반할 수 있고, 이는 프로그램 실행 자체를 위해 이용 가능한 시간 량을 제한할 수 있다.
ASPLOS 2011에서 공개된 메멘토(Mementos)는 이용 가능한 전압 레벨을 판독하는 프로브들 - 각 루프 백-에지 이후 및 각 함수 호출 이후에 삽입됨 - 을 프로그램에 정적으로 인스트루먼트(instrument)한다. 런타임시, 전압 레벨이 특정 임계 값 아래로 떨어지면, 전체 프로그램 상태가 비휘발성 메모리에 백업된다. 따라서, 메멘토 시스템에서는, 비휘발성 데이터에 대한 업데이트들이 재시작 후에 일관되도록 보장되지 않는다. 추가적으로, Vcc(전압)를 판독하는 것은 비용이 많이 들 수 있고, 매번 비휘발성 메모리에 전체 프로그램 상태를 체크 포인트하는 것은 효율적이지 않을 수 있다. 추가적으로, Vcc가 매우 자주 프로빙되지 않으면 트랜잭션 크기는 유연하지 않다. Benjamin Ransford 외, "Mementos: System Support for Long-Running Computation on RFID-Scale Devices", ASPLOS' 11(2011년 3월 5-11일) 참조.
DINO는 메멘토(Mementos)에 기초한다. DINO는 사용자가 작업/트랜잭션 경계들을 프로그램에 수동으로 주석할 것을 요구한다. 동시 프로그램에서 비휘발성 데이터의 일관성 요건들을 데이터 경쟁 조건으로 모델링하기 위해 정적 분석이 사용된다. 실행이 작업 경계에 도달하면, 체크 포인트하기 직전에, DINO는 작업 경계가 실행된 후 그리고 또 다른 작업 경계가 실행되기 전에 기입될 수 있는 각 비휘발성 변수의 휘발성 사본을 만든다. DINO에 의해 로그될 수 있는 비휘발성 데이터의 양은 마이크로컨트롤러 내의 휘발성 메모리의 크기에 의해 제한되고, 이는 전형적으로 비휘발성 메모리의 크기에 비해 작다. 메멘토와 유사하게, DINO는 비휘발성 메모리에 전체 스택 및 휘발성 데이터를 체크 포인트한다. DINO에서의 트랜잭션 크기는 고정되어 있다. Brandon Lucia & Benjamin Ransford, "A Simpler, Safer Programming and Execution Model for Intermittent Systems", PLDI' 15(2015년 6월 13-17일) 참조.
본 명세서에 설명된 개념들은 첨부된 도면에서 제한적인 것이 아니라 예로서 도시된다. 도시의 간명화를 위해, 도면들에 도시되는 요소들은 반드시 일정 비율로 도시되지는 않는다. 적절한 것으로 간주되는 경우, 도면들 사이에서 대응하거나 유사한 요소들을 지시하기 위해 참조 라벨들이 반복되었다.
도 1은 에너지 하베스팅 디바이스들에 의한 불연속 실행을 위한 시스템의 적어도 하나의 실시예의 간략화된 블록도이다.
도 2는 도 1의 시스템의 다양한 환경들의 적어도 하나의 실시예의 간략화된 블록도이다.
도 3은 도 1 및 도 2의 시스템의 컴퓨팅 디바이스에 의해 실행될 수 있는 다중-버전 코드 컴파일을 위한 방법의 적어도 하나의 실시예의 간략화된 흐름도이다.
도 4는 도 1 및 도 2의 시스템에 의해 수행될 수 있는 트랜잭션 영역 합체를 도시하는 간략화된 블록도이다.
도 5a 및 도 5b는 다양한 세분성을 갖는 트랜잭션 코드를 도시하는 의사 코드(pseudocode) 다이어그램이다.
도 6은 도 1 및 도 2의 시스템의 대상 컴퓨팅 디바이스에 의해 실행될 수 있는 다중-버전 코드를 실행하기 위한 방법의 적어도 하나의 실시예의 간략화된 흐름도이다.
도 7은 도 1 및 도 2의 시스템의 대상 컴퓨팅 디바이스에 의해 실행될 수 있는 전력 상실 이후의 복구 방법의 적어도 하나의 실시예의 간략화된 흐름도이다.
도 8은 도 1 및 도 2의 시스템의 대상 컴퓨팅 디바이스에 의해 유지될 수 있는 메모리 모델을 도시하는 간략화된 블록도이다.
도 9는 도 1 및 도 2의 시스템의 대상 컴퓨팅 디바이스에 의해 실행될 수 있는 다중-버전 코드를 실행하기 위한 루틴을 도시하는 의사 코드 다이어그램이다.
도 10은 도 1 및 도 2의 시스템의 대상 컴퓨팅 디바이스에 의해 실행될 수 있는 트랜잭션들을 커밋하기 위한 루틴을 도시하는 의사 코드 다이어그램이다.
도 11은 도 1 및 도 2의 시스템의 대상 컴퓨팅 디바이스에 의해 실행될 수 있는 전력 상실 이후의 복구 루틴을 도시하는 의사 코드 다이어그램이다.
본 개시의 개념들은 다양한 변경들 및 대안적인 형태들이 가능하지만, 그 특정 실시예들이 도면들에 예로서 도시되고, 본 명세서에서 상세히 설명될 것이다. 그러나, 본 개시의 개념들을 개시된 특정한 형태들로 제한하고자 하는 의도는 없으며, 오히려 그 의도는 본 개시 및 첨부된 청구항들에 따른 모든 변경들, 균등물들 및 대안들을 커버하려는 것임을 이해해야 한다.
본 명세서에서의 “일 실시예”, “실시예”, “예시적인 실시예” 등에 대한 언급은 설명된 실시예가 특정한 특징, 구조, 또는 특성을 포함할 수 있음을 나타내지만, 모든 실시예가 반드시 그 특정한 특징, 구조, 또는 특성을 포함하는 것은 아닐 수 있다. 또한, 그러한 문구들은 반드시 동일한 실시예를 언급하는 것은 아니다. 또한, 특정한 특징, 구조, 또는 특성이 실시예와 관련하여 설명될 때, 명시적인 설명 여부에 관계없이 다른 실시예들과 관련하여 그러한 특징, 구조, 또는 특성을 달성하는 것은 본 기술분야의 통상의 기술자의 지식 범위 내에 있다고 제안한다. 추가적으로, "A, B 및 C 중 적어도 하나"의 형태로 목록에 포함된 항목들은 (A); (B); (C); (A 및 B); (A 및 C); (B 및 C); 또는 (A, B 및 C)를 의미할 수 있음을 이해해야 한다. 유사하게, "A, B, 또는 C 중 적어도 하나"의 형태로 열거된 항목들은 (A); (B); (C); (A 및 B); (A 및 C); (B 및 C); 또는 (A, B, 및 C)를 의미할 수 있다.
개시된 실시예들은, 일부 경우에, 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 개시된 실시예들은 또한 하나 이상의 프로세서에 의해 판독 및 실행될 수 있는, 하나 이상의 일시적인 또는 비일시적인 머신 판독가능(예를 들어, 컴퓨터 판독가능) 저장 매체에 의해 전달 또는 그에 저장된 명령어들로서 구현될 수 있다. 머신 판독가능 저장 매체는 머신에 의해 판독가능한 형태로 정보를 저장하거나 송신하기 위한 임의의 저장 디바이스, 메커니즘, 또는 다른 물리적 구조체(예를 들어, 휘발성 또는 비휘발성 메모리, 매체 디스크(media disc), 또는 다른 매체 디바이스(media device))로서 구현될 수 있다.
도면들에서, 일부 구조 또는 방법 특징들은 특정 배열들 및/또는 순서들(orderings)로 도시될 수 있다. 그러나, 이러한 특정 배열들 및/또는 순서들은 요구되지 않을 수도 있다는 점을 이해해야 한다. 오히려, 일부 실시예들에서, 이러한 특징들은 예시적인 도면들에 도시된 것과는 상이한 방식 및/또는 순서로 배열될 수 있다. 추가적으로, 특정한 도면 내에 구조 또는 방법 특징의 포함은 이러한 특징이 모든 실시예들에서 요구되는 것임을 암시하려는 것은 아니며, 일부 실시예들에서는, 포함되지 않을 수도 있거나 다른 특징들과 결합될 수도 있다.
이제 도 1을 참조하면, 일 실시예에서, 시스템(100)은 컴파일러 컴퓨팅 디바이스(102) 및 대상 컴퓨팅 디바이스(104)를 포함한다. 대상 컴퓨팅 디바이스(104)는 에너지 하베스팅 유닛에 의해 전력을 공급받는 소형 임베디드 디바이스(예를 들어 마이크로컨트롤러)로서 구현될 수 있다. 대상 컴퓨팅 디바이스(104)는 또한 에너지 하베스팅 디바이스(104)로 지칭될 수 있다. 컴파일러 컴퓨팅 디바이스(102)는 프로그램 코드의 정적 분석을 수행하고 대상 컴퓨팅 디바이스(104)에 대한 다중-버전 실행 가능 코드를 생성한다. 다중-버전 실행 가능 코드는 다양한 트랜잭션 세분성을 갖는 실행 가능 코드를 포함한다. 런타임시, 대상 컴퓨팅 디바이스(104)는 이용 가능한 에너지에 기초하여 더 미세한 입도의(finer-grained) 트랜잭션들을 갖는 코드와 더 조대한(coarser) 트랜잭션들을 갖는 코드 사이를 전환한다. 각 트랜잭션 내에서, 트랜잭션이 커밋되기 전에 정전(power failure)이 발생하면, (비휘발성 데이터에 대해) 이루어진 모든 변경들은 번복된다. 재부팅시에, 프로그램은 비휘발성 메모리로부터 마지막 일관된 버전의 휘발성 데이터를 로딩하고 마지막 실패한 트랜잭션의 시작부터 실행을 재개한다. 따라서, 시스템(100)은 순방향 진행을 하면서 항상 일관된 상태로 유지된다. 따라서, 시스템(100)은 대상 컴퓨팅 디바이스(104)와 같은 에지 디바이스들에서 실행되는 애플리케이션들이 애플리케이션 개발자들로부터의 노력이 거의 없이 에너지 이용 가능성에 실시간으로 적응할 수 있게 한다. 일부 실시예들에서, 시스템(100)은 또한 더 높은 성능을 낼 수 있다. 이러한 애플리케이션들의 몇몇 예로는 디지털 신호 처리, 암호화, 피처 추출, 및 분류 알고리즘들이 포함된다.
컴파일러 컴퓨팅 디바이스(102)는 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 유형의 컴퓨팅 디바이스로서 구현될 수 있는데, 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 스마트폰, 모바일 컴퓨팅 디바이스, 웨어러블 컴퓨팅 디바이스, 마이크로프로세서 시스템, 서버, 랙마운트 서버, 블레이드 서버, 네트워크 어플라이언스, 웹 어플라이언스, 분산 컴퓨팅 시스템, 프로세서 기반 시스템, 및/또는 소비자 전자 디바이스를 포함하지만, 이들로 제한되지 않는다. 도 1에 도시된 바와 같이, 컴파일러 컴퓨팅 디바이스(102)는 프로세서(120), 입력/출력 서브시스템(122), 메모리(124), 데이터 저장 디바이스(126), 및 통신 회로(128)를 포함한다. 물론, 컴파일러 컴퓨팅 디바이스(102)는 다른 실시예들에서, 컴퓨터에서 일반적으로 발견되는 것들(예를 들어, 다양한 입력/출력 디바이스들)과 같은 다른 또는 추가인 컴포넌트들을 포함할 수 있다. 게다가, 일부 실시예들에서, 예시적인 컴포넌트들 중 하나 이상은 또 다른 컴포넌트에 통합되거나 또는 다르게 그의 부분을 형성할 수 있다. 예를 들어, 메모리(124), 또는 그의 부분들은 일부 실시예들에서 하나 이상의 프로세서(120)에 통합될 수 있다.
프로세서(120)는 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 유형의 프로세서로서 구현될 수 있다. 예를 들어, 프로세서는 단일 또는 멀티코어 프로세서(들), 디지털 신호 프로세서, 마이크로컨트롤러, 또는 다른 프로세서 또는 처리/제어 회로로서 구현될 수 있다. 유사하게, 메모리(124)는 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 유형의 휘발성 또는 비휘발성 메모리 또는 데이터 스토리지로서 구현될 수 있다. 동작 시에, 메모리(124)는 운영 체제들, 애플리케이션들, 프로그램들, 라이브러리들, 및 드라이버들과 같은 컴파일러 컴퓨팅 디바이스(102)의 동작 중에 사용되는 다양한 데이터 및 소프트웨어를 저장할 수 있다. 메모리(124)는, 컴파일러 컴퓨팅 디바이스(102)의 프로세서(120), 메모리(124), 및 다른 컴포넌트들과의 입력/출력 동작들을 용이하게 하기 위한 회로 및/또는 컴포넌트들로서 구현될 수 있는, I/O 서브시스템(122)을 통해 프로세서(120)에 통신가능하게 연결된다. 예를 들어, I/O 서브시스템(122)은 메모리 제어기 허브들, 입력/출력 제어 허브들, 펌웨어 디바이스들, 통신 링크들(즉, 포인트-투-포인트 링크들, 버스 링크들, 와이어들, 케이블들, 도광체들, 인쇄 회로 기판 트레이스들 등), 및/또는 입력/출력 동작들을 용이하게 하기 위한 다른 컴포넌트들 및 서브시스템들로서 구현되거나, 또는 다르게 이들을 포함할 수 있다. 일부 실시예들에서, I/O 서브시스템(122)은 시스템-온-칩(SoC)의 부분을 형성하고, 컴파일러 컴퓨팅 디바이스(102)의 프로세서(120), 메모리(124), 및 다른 컴포넌트들과 함께, 단일 집적 회로 칩 상에 통합될 수 있다.
데이터 저장 디바이스(126)는, 예를 들어, 메모리 디바이스들 및 회로들, 메모리 카드들, 하드 디스크 드라이브들, 솔리드 스테이트 드라이브들, 또는 다른 데이터 저장 디바이스들과 같은, 데이터의 단기간 또는 장기간 저장을 위해 구성되는 임의의 유형의 디바이스 또는 디바이스들로서 구현될 수 있다. 데이터 저장 디바이스(126)는, 예를 들어, 하나 이상의 대상 컴퓨팅 디바이스(104)에 대한 프로그램 소스 코드 및/또는 실행 가능 코드를 저장할 수 있다.
컴파일러 컴퓨팅 디바이스(102)의 통신 회로(128)는 컴파일러 컴퓨팅 디바이스(102), 대상 컴퓨팅 디바이스(104), 및/또는 다른 원격 디바이스들 사이의 통신을 가능하게 할 수 있는 임의의 통신 회로, 디바이스, 또는 이들의 집합으로서 구현될 수 있다. 통신 회로(128)는 임의의 하나 이상의 통신 기술(예를 들어, 유선 또는 무선 통신) 및 연관된 프로토콜들(예를 들어, 시리얼 통신, USB, Ethernet, Bluetooth®, Wi-Fi®, WiMAX 등)을 사용하여 그러한 통신을 실행하도록 구성될 수 있다.
일부 실시예들에서, 컴파일러 컴퓨팅 디바이스(102)는 또한 하나 이상의 주변 디바이스(130)를 포함할 수 있다. 주변 디바이스들(130)은 임의의 수의 추가적인 입력/출력 디바이스들, 인터페이스 디바이스들, 및/또는 다른 주변 디바이스들을 포함할 수 있다. 예를 들어, 일부 실시예들에서, 주변 디바이스들(130)은 디스플레이, 터치 스크린, 그래픽 회로, 키보드, 마우스, 스피커 시스템, 마이크로폰, 네트워크 인터페이스, 및/또는 다른 입력/출력 디바이스들, 인터페이스 디바이스들, 및/또는 주변 디바이스들을 포함할 수 있다.
대상 컴퓨팅 디바이스(104)는 아래에 더 설명되는 바와 같이 컴파일러 컴퓨팅 디바이스(102)에 의해 생성된 실행 가능 프로그램 코드를 실행하도록 구성된다. 대상 컴퓨팅 디바이스(104)는 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 유형의 계산 또는 컴퓨터 디바이스로서 구현될 수 있는데, 임베디드 컴퓨팅 디바이스, 임베디드 컨트롤러, 센싱 디바이스, 마이크로컨트롤러, 컴퓨터, 분산 컴퓨팅 시스템, 프로세서 기반 시스템, 및/또는 소비자 전자 디바이스를 포함하지만, 이들로 제한되지 않는다. 따라서, 대상 컴퓨팅 디바이스(104)는 프로세서(140), I/O 서브시스템(142), 메모리(144), 데이터 저장 디바이스(150), 및/또는 통신 회로(152)와 같은, 마이크로컨트롤러 또는 유사한 컴퓨팅 디바이스에 통상 발견되는 컴포넌트들 및 디바이스들을 포함한다. 대상 컴퓨팅 디바이스(104)의 그런 개개의 컴포넌트들은 컴파일러 컴퓨팅 디바이스(102)의 대응하는 컴포넌트들과 유사할 수 있는데, 그에 대한 설명은 대상 컴퓨팅 디바이스(104)의 대응하는 컴포넌트들에 적용 가능하고, 본 개시를 모호하게 하지 않기 위해 본 명세서에서 반복되지 않는다.
대상 컴퓨팅 디바이스(104)의 메모리(144)는 휘발성 메모리(146) 및 비휘발성 메모리(148)를 추가로 포함한다. 휘발성 메모리(146)는 종래의 RAM으로서 구현될 수 있는데, 이는 대상 컴퓨팅 디바이스(104) 및/또는 휘발성 메모리(146)로부터 전력이 제거될 때 휘발성 메모리(146)에 포함된 임의의 데이터가 상실된다는 것을 의미한다. 비휘발성 메모리(148)는 강유전성 RAM과 같은 임의의 임베디드 비휘발성 메모리로서 구현될 수 있다. 비휘발성 메모리(148)는 보통의 미세한 입도의 로드/저장 프로세서 명령어들을 사용하여 액세스될 수 있다. 비휘발성 메모리(148)는 플래시 메모리와 유사한 비휘발성을 제공하는데, 이는 비휘발성 메모리(148)로의 전력이 상실될 때 데이터가 유지된다는 것을 의미한다. 추가적으로, 플래시 메모리와 비교하여, 비휘발성 메모리(148)는 바이트-어드레싱 가능하고, 더 빠르고, 더 낮은 전력이고, 더 미세한 입도인 기입, 그리고 더 낮은 기입 내구성을 제공할 수 있다. 많은 실시예들에서, 비휘발성 메모리(148)는 휘발성 메모리(146)보다 큰 용량을 가질 수 있다. 예를 들어, 예시적인 실시예에서, 비휘발성 메모리(148)는 64 킬로바이트(kB)의 용량을 가질 수 있고 휘발성 메모리(146)는 2 kB의 용량을 가질 수 있다.
일부 실시예들에서, 프로세서(140), I/O 서브시스템(142), 및/또는 메모리(144)와 같은, 대상 컴퓨팅 디바이스(104)의 하나 이상의 컴포넌트는 마이크로컨트롤러 또는 시스템-온-칩(SoC)의 부분을 형성할 수 있고 단일 집적 회로 칩 상에 통합될 수 있다. 예를 들어, 대상 컴퓨팅 디바이스(104)는 텍사스 인스트루먼츠(Texas Instruments)에 의해 제조된 MSP430 계열의 마이크로컨트롤러들 중 하나와 같은, 임베디드 비휘발성 메모리(148)를 갖는 저전력 마이크로컨트롤러를 포함할 수 있다.
대상 컴퓨팅 디바이스(104)는 에너지 하베스팅 유닛(154)을 추가로 포함하거나 또는 다르게 그와 연결된다. 에너지 하베스팅 유닛(154)은 대상 컴퓨팅 디바이스(104)의 환경으로부터 에너지를 회수하여, 대상 컴퓨팅 디바이스(104)가 프로그램들을 실행할 수 있게 하는 에너지를 제공한다. 에너지 하베스팅 유닛(154)은 예를 들어 태양 에너지, 기계적 진동 및/또는 무선 주파수(RF) 신호로부터 에너지를 하베스팅할 수 있다. 많은 실시예들에서, 에너지 하베스팅 유닛(154)은 예측할 수 없는, 버스트(bursty)한, 및/또는 매우 간헐적인 방식으로 에너지를 제공할 수 있다.
컴파일러 컴퓨팅 디바이스(102) 및 대상 컴퓨팅 디바이스(104)는 직접 연결을 통해 또는 네트워크(도시되지 않음)를 통해 서로 및/또는 시스템(100)의 다른 디바이스들과 데이터를 송신 및 수신하도록 구성될 수 있다. 네트워크는 임의의 수의 다양한 유선 및/또는 무선 네트워크들로서 구현될 수 있다. 예를 들어, 네트워크는 유선 또는 무선 근거리 네트워크(LAN), 유선 또는 무선 광역 네트워크(WAN), 셀룰러 네트워크, 및/또는 인터넷과 같은 공개적으로 액세스 가능한 글로벌 네트워크로서 구현되거나, 또는 다르게 이들을 포함할 수 있다. 그와 같이, 네트워크는 시스템(100)의 디바이스들 간의 통신을 용이하게 하기 위한 추가적인 컴퓨터들, 라우터들, 및 스위치들과 같은 임의의 수의 추가적인 디바이스들을 포함할 수 있다.
추가적으로, 예시적인 시스템(100)은 컴파일러 컴퓨팅 디바이스(102) 및 대상 컴퓨팅 디바이스(104) 둘 다를 포함하지만, 일부 실시예들에서, 시스템(100)은 상이한 수 또는 배열의 디바이스들을 포함할 수 있음을 이해해야 한다. 예를 들어, 일부 실시예들에서, 시스템(100)은 2개 이상의 대상 컴퓨팅 디바이스(104)를 포함할 수 있다. 또 다른 예로서, 일부 실시예들에서, 컴파일러 컴퓨팅 디바이스(102) 및 대상 컴퓨팅 디바이스(104)의 기능들의 일부 또는 전부가 단일 디바이스로 결합될 수 있다.
이제 도 2를 참조하면, 예시적인 실시예에서, 컴파일러 컴퓨팅 디바이스(102)는 동작 중에 환경(200)을 설정한다. 예시적인 환경(200)은 컴퓨터 프로그램(202), 컴파일러 분석 모듈(204), 프로파일러 모듈(206), 코드 생성 모듈(210), 및 실행 가능 프로그램(212)을 포함한다. 환경(200)의 다양한 모듈들은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합으로서 구현될 수 있다. 이와 같이, 일부 실시예들에서, 환경(200)의 모듈들 중 하나 이상은 회로 또는 전기적 디바이스들의 집합(예를 들어, 컴파일러 분석 회로(204), 프로파일러 회로(206), 및/또는 코드 생성 회로(210))으로서 구현될 수 있다. 그러한 실시예들에서, 컴파일러 분석 회로(204), 프로파일러 회로(206), 및/또는 코드 생성 회로(210) 중 하나 이상은 컴파일러 컴퓨팅 디바이스(102)의 프로세서(120), I/O 서브시스템(122), 및/또는 다른 컴포넌트들 중 하나 이상의 부분을 형성할 수 있다는 것을 알아야 한다. 추가적으로, 일부 실시예들에서, 예시적인 모듈들 중 하나 이상은 또 다른 모듈의 부분을 형성할 수 있고, 및/또는 예시적인 모듈들 중 하나 이상은 서로 독립적일 수 있다. 또한, 일부 실시예들에서, 환경(200)의 모듈들 중 하나 이상은 컴파일러 컴퓨팅 디바이스(102)의 프로세서(120) 또는 다른 컴포넌트들에 의해 설정되고 유지될 수 있는, 가상화된 하드웨어 컴포넌트들 또는 에뮬레이트된 아키텍처로서 구현될 수 있다.
전술한 바와 같이 하드웨어, 펌웨어, 소프트웨어, 가상화된 하드웨어, 에뮬레이트된 아키텍처, 및/또는 이들의 조합으로서 구현될 수 있는 컴파일러 분석 모듈(204)은 컴퓨터 프로그램(202)을 원자 트랜잭션 시퀀스로 변환하고 원자 트랜잭션 시퀀스를 합체하여 하나 이상의 추가적인 트랜잭션 시퀀스를 생성하도록 구성된다. 트랜잭션 시퀀스들 각각은 연관된 세분성을 가지며, 이는 미세한 것에서 조대한 것까지 다양할 수 있다. 컴퓨터 프로그램(202)은 대상 컴퓨팅 디바이스(104)에 의한 실행을 위해 컴파일되거나 또는 다르게 준비될 수 있는 임의의 소스 코드, 중간 코드, 또는 다른 컴퓨터 프로그램으로서 구현될 수 있다.
전술한 바와 같이 하드웨어, 펌웨어, 소프트웨어, 가상화된 하드웨어, 에뮬레이트된 아키텍처, 및/또는 이들의 조합으로서 구현될 수 있는 프로파일러 모듈(206)은 컴퓨터 프로그램(202)과 연관된 각 트랜잭션 시퀀스에 대해 대상 컴퓨팅 디바이스(104)에 관련하여 에너지 프로파일(208)을 수집하도록 구성된다. 에너지 프로파일(208)은 대응하는 트랜잭션 시퀀스의 트랜잭션을 실행하기 위해 대상 컴퓨팅 디바이스(104)에 의해 소비되는 에너지를 나타낸다. 프로파일러 모듈(206)은 추가로, 대상 컴퓨팅 디바이스(104)에 관련하여 이용 가능한 에너지 프로파일(208)을 수집하도록 구성될 수 있다.
전술한 바와 같이 하드웨어, 펌웨어, 소프트웨어, 가상화된 하드웨어, 에뮬레이트된 아키텍처, 및/또는 이들의 조합으로서 구현될 수 있는 코드 생성 모듈(210)은 대상 컴퓨팅 디바이스(104)에 대한 실행 가능 프로그램(212)을 생성하도록 구성된다. 실행 가능 프로그램(212)은 2개 이상의 트랜잭션 시퀀스를 포함한다. 실행될 때, 실행 가능 프로그램(212)은 대상 컴퓨팅 디바이스(104)에 이용 가능한 에너지에 기초하여 트랜잭션 시퀀스들 중에서 선택한다. 코드 생성 모듈(210)은 대상 컴퓨팅 디바이스(104)에 이용 가능한 에너지 및/또는 트랜잭션을 실행하는 데 필요한 에너지를 포함하는 에너지 프로파일들(208)에 기초하여 실행 가능 프로그램(212)에 포함시킬 트랜잭션 시퀀스들을 선택하도록 구성될 수 있다.
다시 도 2를 참조하면, 예시적인 실시예에서, 대상 컴퓨팅 디바이스(104)는 동작 중에 환경(220)을 설정한다. 예시적인 환경(220)은 실행 가능 프로그램(212), 코드 실행 모듈(222), 전력 관리 모듈(224), 및 복구 모듈(226)을 포함한다. 환경(220)의 다양한 모듈들은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합으로서 구현될 수 있다. 이와 같이, 일부 실시예들에서, 환경(220)의 모듈들 중 하나 이상은 회로 또는 전기적 디바이스들의 집합(예를 들어, 코드 실행 회로(222), 전력 관리 회로(224), 및/또는 복구 회로(226))으로서 구현될 수 있다. 그러한 실시예들에서, 코드 실행 회로(222), 전력 관리 회로(224), 및/또는 복구 회로(226) 중 하나 이상은 대상 컴퓨팅 디바이스(104)의 프로세서(140), I/O 서브시스템(142), 및/또는 다른 컴포넌트들 중 하나 이상의 부분을 형성할 수 있다는 것을 알아야 한다. 추가적으로, 일부 실시예들에서, 예시적인 모듈들 중 하나 이상은 또 다른 모듈의 부분을 형성할 수 있고, 및/또는 예시적인 모듈들 중 하나 이상은 서로 독립적일 수 있다. 또한, 일부 실시예들에서, 환경(220)의 모듈들 중 하나 이상은 대상 컴퓨팅 디바이스(104)의 프로세서(140) 또는 다른 컴포넌트들에 의해 설정되고 유지될 수 있는, 가상화된 하드웨어 컴포넌트들 또는 에뮬레이트된 아키텍처로서 구현될 수 있다.
전술한 바와 같이 하드웨어, 펌웨어, 소프트웨어, 가상화된 하드웨어, 에뮬레이트된 아키텍처, 및/또는 이들의 조합으로서 구현될 수 있는 코드 실행 모듈(222)은 활성 트랜잭션 시퀀스의 세분성 및 신뢰 값에 기초하여 실행 가능 프로그램(212)으로부터 활성 트랜잭션 시퀀스를 선택하도록 구성된다. 전술한 바와 같이, 실행 가능 프로그램(212)은 다수의 트랜잭션 시퀀스들을 포함하고, 각 트랜잭션 시퀀스는 상이한 세분성을 갖는다. 코드 실행 모듈(222)은 추가로, 활성 트랜잭션 시퀀스를 선택하는 것에 응답하여 활성 트랜잭션 시퀀스의 트랜잭션들을 실행하도록 구성된다.
전술한 바와 같이 하드웨어, 펌웨어, 소프트웨어, 가상화된 하드웨어, 에뮬레이트된 아키텍처, 및/또는 이들의 조합으로서 구현될 수 있는 전력 관리 모듈(224)은 신뢰 레벨을 최소값으로 초기화하도록 구성된다. 신뢰 레벨은 대상 컴퓨팅 디바이스(104)의 에너지 하베스팅 유닛(154)에 의해 생성된 이용 가능한 에너지를 나타낸다. 전력 관리 모듈(224)은 추가로, 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하고, 트랜잭션이 성공적으로 커밋되었는지를 결정하고, 트랜잭션이 성공적으로 커밋되었음을 결정하는 것에 응답하여 신뢰 레벨을 증가시키도록 구성된다.
전술한 바와 같이 하드웨어, 펌웨어, 소프트웨어, 가상화된 하드웨어, 에뮬레이트된 아키텍처, 및/또는 이들의 조합으로서 구현될 수 있는 복구 모듈(226)은 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 실행 가능 프로그램(212)의 실행을 복구하도록 구성된다. 예를 들어, 복구 모듈(226)은 트랜잭션을 실행하거나 트랜잭션을 커밋하려고 시도하는 동안의 정전 또는 다른 중단에 응답하여 실행을 복구하도록 구성될 수 있다. 실행 가능 프로그램(212)의 실행을 복구하는 것은 신뢰 값을 최소값으로 리셋한 다음 활성 트랜잭션 시퀀스의 선택을 재시작하는 것을 포함할 수 있다. 일부 실시예들에서, 실행 가능 프로그램(212)의 실행을 복구하는 것은 신뢰 값을 리셋한 다음 트랜잭션을 커밋하려는 시도를 재시작하는 것을 포함할 수 있다.
이제 도 3을 참조하면, 사용시, 컴파일러 컴퓨팅 디바이스(102)는 다중-버전 코드 컴파일을 위한 방법(300)을 실행할 수 있다. 방법(300)은 컴파일러 컴퓨팅 디바이스(102)가 컴퓨터 프로그램(202)의 소스 코드(예를 들어, C 코드, C++ 코드, 또는 다른 소스 코드)를 컴파일하고 분석하는, 블록 302에서 시작된다. 컴파일러 컴퓨팅 디바이스(102)는, 예를 들어, 컴퓨터 프로그램(202)을 파싱하고 컴파일러 컴퓨팅 디바이스(102)에 의해 분석되고 수정될 수 있는 컴퓨터 프로그램(202)의 메모리 내 표현을 생성할 수 있다. 예를 들어, 컴파일러 컴퓨팅 디바이스(102)는 컴퓨터 프로그램(202)의 중간 표현, 제어 흐름 그래프, 또는 추상 구문 트리(abstract syntax tree, "AST")를 생성할 수 있다. 중간 표현은 컴퓨터 프로그램(202)의 기본 블록들을 연결하는 그래프 구조로서 구현될 수 있다.
블록 304에서, 컴파일러 컴퓨팅 디바이스(102)는 컴퓨터 프로그램(202) 내의 코드를 정적으로 분석하여 컴퓨터 프로그램(202) 내의 미세한 입도의 트랜잭션들을 식별한다. 따라서, 컴파일러 컴퓨팅 디바이스(102)는 컴퓨터 프로그램(202)을 원자 트랜잭션 시퀀스로 분할한다. 미세한 입도의 트랜잭션들 각각은 이용 가능한 전력이 간헐적일 때 대상 컴퓨팅 디바이스(104)가 순방향 진행을 할 수 있게 하는 적은 수의 기계 명령어들 또는 다른 연산들을 포함할 수 있다. 예를 들어, 일부 실시예들에서, 각각의 미세한 입도의 트랜잭션은 4개 내지 5개의 기계 명령어를 포함할 수 있다. 컴파일러 컴퓨팅 디바이스(102)는 임의의 기법을 사용하여 미세한 입도의 트랜잭션들을 식별할 수 있다. 일부 실시예들에서, 블록 306에서 컴파일러 컴퓨팅 디바이스(102)는 컴퓨터 프로그램(202)의 기본 블록들을 식별할 수 있다. 각각의 미세한 입도의 트랜잭션은 단일 기본 블록을 포함할 수 있다.
블록 308에서, 컴파일러 컴퓨팅 디바이스(102)는 이전에 식별된 컴퓨터 프로그램(202)의 미세한 입도의 트랜잭션들에 인스트루먼트한다. 미세한 입도의 트랜잭션들에 인스트루먼트하는 것은 대상 컴퓨팅 디바이스(104)가, 예를 들어 트랜잭션의 실행 중 정전의 결과로서, 트랜잭션이 커밋에 실패하면 트랜잭션에 의해 행해진 변경을 취소할 수 있게 한다. 인스트루먼트된 트랜잭션들은 정전에 응답하여 비휘발성 메모리(148)에 대한 변경들을 롤백하는 데 사용될 수 있는, 비휘발성 메모리(148) 데이터에 대한 이전 값들을 저장할 수 있다. 유사하게, 인스트루먼트된 트랜잭션들은 트랜잭션이 커밋될 때 지속성이 되는 휘발성 메모리(146)에 대한 새로운 값들을 저장할 수 있다. 따라서 미세한 입도의 트랜잭션들에 인스트루먼트하는 것은 대상 컴퓨팅 디바이스(104)가 정전 후 일관된 상태를 복원할 수 있게 한다.
일부 실시예들에서, 블록 310에서, 컴파일러 컴퓨팅 디바이스(102)는 미세한 입도의 트랜잭션들에서 저장 명령어들에 로깅 프리미티브들을 추가할 수 있다. 비휘발성 메모리(148) 위치들로의 저장들에 대해, 비휘발성 메모리(148)에 저장된 비휘발성 메모리 로그에 이전 값을 로그하기 위해 저장 전에 nvLog 인트린식(intrinsic)이 삽입될 수 있다. 이는 트랜잭션의 실행 중에 정전이 발생하면 비휘발성 메모리(148)에 대한 변경들이 취소(즉, 롤백)될 수 있도록 보장한다. 아래에 더 설명되는 바와 같이, 트랜잭션이 성공적으로 커밋되면, 이 로그된 데이터는 폐기될 수 있다. 휘발성 메모리(146)에 대한 업데이트들에 대해, 비휘발성 메모리(148)에 또한 저장된 휘발성 메모리 로그에 새로운 값을 기록하기 위해 저장 명령어 뒤에 voLog 인트린식이 삽입될 수 있다. 따라서, 휘발성 메모리 로그는 휘발성 변수들, 레지스터들, 스택, 및 다른 비영구적인 전역 변수들을 포함한 휘발성 데이터에 대한 값들을 저장할 수 있다. 휘발성 메모리 로그는 트랜잭션의 실행 및/또는 커밋 중에 정전이 발생하면 휘발성 메모리(146)에 대한 변경들을 재실행(즉, 롤포워드)하는 데 사용될 수 있다.
일부 실시예들에서, 블록 312에서, 컴파일러 컴퓨팅 디바이스(102)는 트랜잭션 커밋 프리미티브들을 미세한 입도의 트랜잭션들 각각에 추가할 수 있다. 예를 들어, 컴파일러 컴퓨팅 디바이스(102)는 각각의 미세한 입도의 트랜잭션의 끝에 커밋 함수에 대한 호출을 삽입할 수 있다. 트랜잭션을 커밋하는 것은 비휘발성 메모리(148)에 저장된 휘발성 데이터(146)의 섀도 복사본에 변경들을 기입함으로써 휘발성 메모리(146) 변수들에 대한 변경들을 지속성 있게 한다. 예를 들어, 트랜잭션을 커밋하는 것은 휘발성 메모리 로그로부터의 값들을 휘발성 데이터(146)의 섀도 복사본에 복사할 수 있다. 따라서, 커밋된 트랜잭션들로부터의 휘발성 메모리(146)에 대한 업데이트들은 재시작들 및 정전들을 견뎌낼 것이다. 아래에 더 설명되는 바와 같이, 일부 실시예들에서, 커밋 함수는 트랜잭션을 커밋하려고 시도하는 동안 정전이 발생하는 경우 재시작될 수 있다.
블록 314에서, 컴파일러 컴퓨팅 디바이스(102)는 컴퓨터 프로그램(202)의 트랜잭션들을 합체하여 더 조대한 입도의(coarser-grained) 트랜잭션들을 생성한다. 환언하면, 컴파일러 컴퓨팅 디바이스(102)는 미세한 입도의 트랜잭션들 중 2개 이상을 결합하여 더 조대한 세분성을 갖는 새로운 트랜잭션 시퀀스를 생성할 수 있다. 아래에 더 설명하는 바와 같이, 대상 컴퓨팅 디바이스(104)에 대한 에너지가 부족할 때 미세한 입도의 트랜잭션들이 배치될 수 있다. 더 작은 트랜잭션들은 더 높은 전체 오버헤드를 초래하지만 에너지 제한 시나리오들에서 순방향 진행을 보장하고 무한 반복(live-lock)의 위험을 방지할 수 있다. 반면에, 더 작은 이웃 트랜잭션들을 합병함으로써 형성된 더 조대한 입도의 트랜잭션들은 대상 컴퓨팅 디바이스(104)에 대한 에너지가 풍부할 때 배치될 수 있다. 컴파일러 컴퓨팅 디바이스(102)는 다수의 조대성 레벨들(levels of coarseness)의 트랜잭션들을 생성할 수 있다. 예를 들어, 일부 실시예들에서, 컴파일러 컴퓨팅 디바이스(102)는 각각 약 200개의 기계 명령어를 포함하는 조대한 입도의 트랜잭션들뿐만 아니라 각각 약 50개의 기계 명령어를 포함하는 중간 입도의 트랜잭션들을 생성할 수 있다. 컴파일러 컴퓨팅 디바이스(102)는 이웃 트랜잭션들을 애드혹(ad hoc) 방식으로 결합하는 것을 포함하여, 임의의 기법을 사용하여 트랜잭션들을 합체할 수 있다.
일부 실시예들에서, 블록 316에서 컴파일러 컴퓨팅 디바이스(102)는 지배 프론티어 분석(dominance frontiers analysis)을 사용하여 트랜잭션들을 조대하게 할 수 있다. 지배 프론티어들은 Ron Cytron 외, "Efficiently Computing Static Single Assignment Form and the Control Dependence Graph", TOPLAS(1991)에 의해 처음 소개되었다. 제어 흐름 그래프(control flow graph, CFG)는 그 노드들이 프로그램 문(program statement)들을 나타내고 그 방향 에지(directed edge)들이 제어 흐름을 나타내는 그래프이다. X를 먼저 통과하지 않고는 Y에 도달하는 것이 불가능한 경우 제어 흐름 그래프의 노드 X가 제어 흐름 그래프의 노드 Y를 엄격하게 지배한다. X가 엄격하게 Z를 지배하지 않지만, X가 Z의 어떤 직속 선행자(immediate predecessor)를 지배하는 경우 노드 Z는 노드 X의 지배 프론티어에 있다. 더 조대한 트랜잭션 영역을 형성하기 위해, 컴파일러 컴퓨팅 디바이스(102)는 기본 블록 X 시드를 선택하고, 더 조대한 트랜잭션 영역을 X에 의해 지배되는 제어 흐름 그래프의 모든 노드들 또는 기본 블록들로 확장할 수 있다. 커밋 함수 또는 다른 트랜잭션 커밋 프리미티브들에 대한 호출들은 X의 지배 프론티어들에 삽입될 수 있다.
일부 실시예들에서, 블록 318에서 컴파일러 컴퓨팅 디바이스(102)는 루프 타일링(loop tiling)을 수행함으로써 트랜잭션들을 조대하게 할 수 있다. 루프 타일링은 종종 데이터 집약성(data locality)을 향상시키기 위해, 루프의 반복 공간을 더 작은 청크들 또는 블록들로 분할하는 일반적으로 사용되는 컴파일러 변환이다. 컴파일러 컴퓨팅 디바이스(102)는 타일링된 루프 구조로부터 더 조대한 입도의 트랜잭션을 형성하여, 루프의 다수의 반복을 단일 트랜잭션으로 효과적으로 결합할 수 있다.
일부 실시예들에서, 블록 320에서, 컴파일러 컴퓨팅 디바이스(102)는 여분의 로깅 명령들을 제거하기 위해 조대해진 트랜잭션들의 생존성 분석(liveness analysis)을 수행할 수 있다. 변수 v가 CFG 에지에서 생존하는 조건은: (1) 해당 에지로부터 v의 사용으로의 방향 경로가 존재하고, (2) 해당 경로가 v의 임의의 정의를 거치지 않는 것이다. 생존성 분석을 수행한 후에, 로깅 명령들 및/또는 다른 인스트루먼트들은 조대해진 트랜잭션에 생존하지 않는 변수들에 관련된 저장 연산들로부터 제거될 수 있다. 따라서, 컴파일러 컴퓨팅 디바이스(102)는 조대해진 트랜잭션들에 대한 트랜잭션 오버헤드를 감소시킬 수 있다.
블록 322에서, 컴파일러 컴퓨팅 디바이스(102)는 에너지 프로파일 데이터(208)에 기초하여 다양한 조대성 레벨들의 다수의 트랜잭션 시퀀스들을 선택한다. 블록 324에서, 컴파일러 컴퓨팅 디바이스(102)는 에너지 프로파일 데이터(208)에 기초하여 각 트랜잭션을 완료하는 데 필요한 에너지를 결정한다. 전술한 바와 같이, 컴파일러 컴퓨팅 디바이스(102)는 컴퓨터 프로그램(202)의 다수의 변형들(즉, 컴퓨터 프로그램(202)에 대한 다수의 상이한 원자 트랜잭션 시퀀스들)을 생성할 수 있다. 각 변형은 특정한 세분성의 트랜잭션들을 포함한다. 컴파일러 컴퓨팅 디바이스(102)는 각 변형의 트랜잭션들에 대한 에너지 요건들을 결정한다. 예를 들어, 각 변형은 트랜잭션들을 완료하는 데 필요한 에너지, 트랜잭션들을 완료하는 데 필요한 시간, 또는 다른 전력/성능 데이터를 결정하기 위해 안정된 전원(즉, 간헐성 없음)으로 대상 컴퓨팅 디바이스(104) 상에서 실행될 수 있다. 또 다른 예로서, 전력/성능 데이터는 소프트웨어 시뮬레이터, 대상 컴퓨팅 디바이스(104)의 하드웨어 사양들을 갖는 FPGA 보드, 또는 다른 시뮬레이션을 사용하여 결정될 수 있다. 변형들과 관련된 각각의 세분성 레벨에 대해, 이 전력/성능 데이터는 하나의 트랜잭션을 완료하는 데 필요한 에너지의 상당히 정확한 추정치들을 제공할 수 있다.
블록 326에서, 컴파일러 컴퓨팅 디바이스(102)는 배치 환경에서 대상 컴퓨팅 디바이스(104)에 이용 가능한 에너지에 대한 프로파일 데이터를 수집한다. 전력/성능 데이터와 유사하게, 이용 가능한 에너지 데이터는 배치 환경에서 하나 이상의 대상 컴퓨팅 디바이스(104)로부터 수신된 데이터 및/또는 시뮬레이션을 통해 결정된 데이터에 기초할 수 있다.
블록 328에서, 컴파일러 컴퓨팅 디바이스(102)는 배치 환경에서 이용 가능한 에너지 및 트랜잭션들을 완료하는 데 필요한 에너지를 나타내는 프로파일 데이터에 기초하여 적절한 조대성을 갖는 컴퓨터 프로그램(202)의 변형들을 선택한다. 예를 들어, 애플리케이션의 이용 가능한 에너지 및 성능 제약에 기초하여, 컴파일러 컴퓨팅 디바이스(102)는 특정한 조대성 레벨의 트랜잭션들이 성공적으로 완료될 가능성이 있는지를 결정할 수 있다. 컴파일러 컴퓨팅 디바이스(102)는 상이한 조대성 레벨들의 비교적 적은 수의 변형들을 선택할 수 있는데, 예를 들어 미세한 입도의 변형, 중간 입도의 변형, 및 조대한 입도의 변형을 선택할 수 있다.
블록 330에서, 컴파일러 컴퓨팅 디바이스(102)는 다양한 조대성 레벨들을 갖는 선택된 트랜잭션 시퀀스들을 포함하는 실행 가능 프로그램(212)을 생성한다. 따라서, 실행 가능 프로그램(212)은, 각각이 상이한 세분성 레벨을 갖는 트랜잭션들을 갖는, 2개 이상의 원자 트랜잭션 시퀀스를 포함하는 다중-버전 실행 가능 프로그램(multi-versioned executable)이다. 아래에 설명되는 바와 같이, 실행 가능 프로그램(212)은 또한 대상 컴퓨팅 디바이스(104)에 이용 가능한 에너지에 기초하여 런타임시 이용 가능한 조대성 레벨들 중에서 선택하기 위한 런타임 코드를 포함할 수 있다. 실행 가능 프로그램(212)을 생성한 후에, 방법(300)은 블록 302로 루프백하여 프로그램 코드를 계속 컴파일한다.
이제 도 4를 참조하면, 개략도(400)는 컴파일러 컴퓨팅 디바이스(102)에 의해 생성될 수 있는 다양한 제어 흐름 그래프들을 도시한다. 그래프(402)는 원자 트랜잭션들로 분할되지 않은 컴퓨터 프로그램(202)(또는 컴퓨터 프로그램의 일부분)에 대한 제어 흐름 그래프를 도시한다. 도시된 바와 같이, 제어 흐름 그래프(402)는 5개의 기본 블록(404, 406, 408, 410, 412)을 포함한다.
그래프(414)는 미세한 입도의 트랜잭션들이 식별되고 인스트루먼트된 후의 그래프(402)를 도시한다. 도시된 바와 같이, 휘발성 변수들에 대한 변경들은 각 휘발성 변수 업데이트 후에 voLog 함수에 대한 호출들을 삽입함으로써 인스트루먼트되었고, 비휘발성 변수들에 대한 변경들은 각 비휘발성 변수 업데이트 전에 nvoLog 함수에 대한 호출들을 삽입함으로써 인스트루먼트되었다. (휘발성 및/또는 비휘발성 변수들에 대한 업데이트들을 포함하는) 기본 블록들(406, 410, 412)은 또한 커밋 함수에 대한 호출들을 삽입함으로써 인스트루먼트되었다. 따라서, 삽입된 커밋 함수 호출들에 기초하여, 제어 흐름 그래프(414)는 기본 블록(406)을 포함하는 원자 영역(416), 기본 블록들(408, 410)을 포함하는 원자 영역(418), 및 기본 블록(412)을 포함하는 원자 영역(420)을 포함한다.
그래프(422)는 지배 프론티어 분석을 사용하여 트랜잭션들을 조대하게 한 후의 그래프(414)를 도시한다. 그래프(414)에 도시된 바와 같이, 기본 블록(406)은 기본 블록들(408, 410, 412)을 지배한다. 따라서, 이들 기본 블록(406, 408, 410, 412)은 결합되어 그래프(422)의 더 조대한 입도의 영역(424)을 형성할 수 있다. 도시된 바와 같이, 영역(424)은, 예시적인 예에서 기본 블록(406)의 지배 프론티어에 상당하는, 기본 블록(412)의 끝에 삽입된 커밋 함수에 대한 호출을 포함한다. 그래프(422)는 여분의 로깅 명령들을 제거하는 것에 의한 최적화를 추가로 도시한다. 도시된 바와 같이, sum 및 i 변수들은 조대해진 트랜잭션 영역(424)의 시작에서 재정의된다. 해당 변수들은 영역(424)에서 생존하지 않기 때문에, 해당 변수들에 대한 voLog에 대한 호출들은 제거될 수 있다.
이제 도 5a 및 도 5b를 참조하면, 의사 코드 다이어그램(500)은 컴파일러 컴퓨팅 디바이스(102)에 의해 생성될 수 있는 다양한 세분성 레벨들의 인스트루먼트된 코드를 도시한다. 의사 코드(502)는 미세한 입도의 트랜잭션들을 갖는 인스트루먼트된 코드를 도시한다. 도시된 바와 같이, voLog에 대한 호출들이 각 휘발성 변수 업데이트 후에 삽입되었고 nvoLog 함수에 대한 호출들이 각 비휘발성 변수 업데이트 전에 삽입되었다. 추가적으로, commit_X 함수들에 대한 3개의 호출이 각각의 미세한 입도의 트랜잭션의 끝에 삽입되었다. 의사 코드(504)는 이웃하는 기본 블록들이 더 조대한 입도의 트랜잭션으로 합체된 후의 의사 코드(502)를 도시한다. 도시된 바와 같이, 의사 코드(504)는 더 조대한 입도의 트랜잭션의 끝에 commit_3 함수에 대한 단일 호출을 포함한다. 따라서, 각각의 더 조대한 입도의 트랜잭션은 바깥쪽 루프의 하나의 반복을 포함한다. 도 5b에 도시된 의사 코드(506)는 불필요한 로깅 호출들을 제거하기 위해 생존성 분석이 수행된 후의 의사 코드(504)를 도시한다. 도시된 바와 같이, sum 및 i 변수들에 대한 voLog 호출들은 제거되었다. 의사 코드(508)는 루프 타일링 후의 조대한 입도의 트랜잭션을 도시한다. 도시된 바와 같이, 의사 코드(508)는 루프의 각 타일링된 반복 후에 commit_4 함수에 대한 호출을 포함한다. 따라서, 의사 코드(508)의 각각의 조대한 입도의 트랜잭션은 바깥쪽 루프의 다수의 반복을 포함한다.
이제 도 6을 참조하면, 사용시에, 대상 컴퓨팅 디바이스(104)는 다중-버전 코드 실행을 위한 방법(600)을 실행할 수 있다. 방법(600)은 블록 602에서 시작되고, 여기서 대상 컴퓨팅 디바이스(104)는 신뢰 레벨을 0과 같은 최소값으로 초기화한다. 신뢰 레벨은 대상 컴퓨팅 디바이스(104)에 이용 가능한 에너지를 나타낸다. 아래에 설명되는 바와 같이, 신뢰 레벨은 트랜잭션들이 정전 없이 성공적으로 커밋됨에 따라 증가될 수 있고 정전 후 실행이 재개될 때 리셋될 수 있다.
블록 604에서, 대상 컴퓨팅 디바이스(104)는 현재 신뢰 레벨에 기초하여 실행 가능 프로그램(212)으로부터 트랜잭션 조대성 레벨을 선택한다. 전술한 바와 같이, 실행 가능 프로그램(212)은 다수의 변형들을 포함하고, 그 각각은 다양한 세분성 레벨들의 일련의 트랜잭션들을 포함한다. 대상 컴퓨팅 디바이스(104)는 낮은 신뢰 레벨들에 대해서는 더 미세한 입도의 트랜잭션들 및 더 높은 신뢰 레벨들에 대해서는 더 조대한 입도의 트랜잭션들을 선택할 수 있다. 따라서, 런타임 동안 - 실행 가능 프로그램(212)의 특정 위치들에서 - 실행 가능 프로그램(212)의 실행은 충분한 신뢰가 구축되면 더 미세한 입도의 트랜잭션으로부터 더 조대한 입도의 트랜잭션들로 이동할 수 있다. 예를 들어, 특정한 수의 더 작은 트랜잭션들이 임의의 전력 중단 없이 연속해서 성공적으로 커밋되었을 때, 대상 컴퓨팅 디바이스(104)는 더 조대한 입도의 트랜잭션을 선택하고 실행할 수 있다. 또 다른 예로서, 정전으로 인해 신뢰 레벨이 리셋되는 경우, 더 미세한 입도의 트랜잭션들로 실행이 재개될 수 있다. 결과적으로, 실행 가능 프로그램(212)은, 각각 그 자체의 에너지 소비 및 성능 프로파일을 갖는, 상이한 동작 모드들을 갖는다. 따라서, 런타임시, 실행 가능 프로그램(212)의 실행은 지원될 수 있는 최대 성능을 달성하면서 배치 환경의 에너지 하베스팅 프로파일에 적응하기 위해 상이한 변형들 사이에 바뀔 수 있다.
블록 606에서, 대상 컴퓨팅 디바이스(104)는 실행 가능 프로그램(212)의 선택된 변형으로부터 다음 트랜잭션을 실행한다. 트랜잭션의 실행 중에, 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)의 메모리(144)에 대한 변경들을 로그한다. 도 7과 관련하여 아래에 더 설명되는 바와 같이, (예를 들어 정전으로 인해) 트랜잭션의 실행이 중단되는 경우, 재시작시, 메모리(144)에 대한 변경들은 롤백될 수 있고 트랜잭션의 실행이 재개될 수 있다. 블록 608에서, 트랜잭션의 실행 중에, 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)에 저장된 비휘발성 메모리 로그에 비휘발성 데이터에 대한 변경들을 로그한다. 예를 들어, 대상 컴퓨팅 디바이스(104)는, 전술한 바와 같이, 컴파일러 컴퓨팅 디바이스(102)에 의해 실행 가능 프로그램(212)에 추가된 nvoLog 인트린식들을 실행할 수 있다. 블록 610에서, 트랜잭션의 실행 중에, 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)에 또한 저장된 휘발성 메모리 로그에 휘발성 데이터에 대한 변경들을 로그한다. 예를 들어, 대상 컴퓨팅 디바이스(104)는, 전술한 바와 같이, 컴파일러 컴퓨팅 디바이스(102)에 의해 실행 가능 프로그램(212)에 추가된 voLog 인트린식들을 실행할 수 있다.
블록 612에서, 대상 컴퓨팅 디바이스(104)는 트랜잭션을 커밋하려고 시도한다. 대상 컴퓨팅 디바이스(104)는, 예를 들어, 전술한 바와 같이, 컴파일러 컴퓨팅 디바이스(102)에 의해 실행 가능 프로그램(212)에 추가된 commit_X 함수에 대한 호출들에 응답하여, 트랜잭션을 커밋하려고 시도할 수 있다. 트랜잭션을 커밋할 때, 비휘발성 데이터에 대한 업데이트들은 이미 비휘발성 메모리(148)로 다시 일관되게 기입되었다. 휘발성 데이터(146)에 대한 새로운 값들도, 비휘발성 메모리(148)에 저장된 휘발성 메모리 로그에 기록된다. 트랜잭션을 완료하기 위해, 대상 컴퓨팅 디바이스(104)는, 예를 들어 휘발성 메모리 로그의 내용을 비휘발성 메모리(148)에 또한 저장된 휘발성 메모리 섀도 복사본으로 복사함으로써, 휘발성 메모리(146)의 내용을 지속성 있게 한다. 휘발성 메모리 섀도 복사본은 휘발성 변수들, 레지스터들, 스택들, 및 다른 전역 휘발성 변수들에 대한 값들을 포함할 수 있다. 대상 컴퓨팅 디바이스(104)는 대상 컴퓨팅 디바이스(104)가 커밋 동안 정전이 발생하는 경우 일관된 상태로 복구될 수 있도록 트랜잭션을 안전하게 커밋한다. 도 7과 관련하여 아래에 더 설명되는 바와 같이, (예를 들어 정전으로 인해) 트랜잭션의 커밋이 중단되는 경우, 재시작시, 대상 컴퓨팅 디바이스(104)는 트랜잭션 커밋을 재개할 수 있다.
블록 614에서, 대상 컴퓨팅 디바이스(104)는 커밋 상태 플래그를 "진행 중"으로 업데이트하고 비휘발성 메모리 로그로부터의 변경들을 폐기한다. 상태 플래그뿐만 아니라, 다른 부기 플래그들(bookkeeping flags)이 비휘발성 메모리(148)에 저장된다. 도 7과 관련하여 아래에 더 설명되는 바와 같이, 커밋 상태 플래그가 성공적으로 "진행 중"으로 변경되면, 대상 컴퓨팅 디바이스(104)는 정전 후 트랜잭션의 커밋 단계를 재개할 수 있다. 대상 컴퓨팅 디바이스(104)는 커밋 상태를 업데이트하는 동안 정전이 발생하는 경우 복구를 허용하기 위해 (커밋 상태 플래그를 포함하는) 부기 플래그들을 로그할 수 있다.
블록 616에서, 대상 컴퓨팅 디바이스(104)는 휘발성 메모리 로그로부터의 변경들을 비휘발성 메모리(148)에 저장된 휘발성 메모리 섀도 복사본에 복사한다. 휘발성 메모리 섀도 복사본에 복사하는 동안 정전이 발생하는 경우, 아래에 더 설명되는 바와 같이, 대상 컴퓨팅 디바이스(104)는 블록 616에서 커밋 연산을 재시작할 수 있다.
블록 618에서, 대상 컴퓨팅 디바이스(104)는 커밋 상태 플래그를 "완료(complete)"로 업데이트하고 휘발성 메모리 로그로부터의 변경들을 폐기한다. 다시, 대상 컴퓨팅 디바이스(104)는 커밋 상태를 업데이트하는 동안 정전이 발생하는 경우 복구를 허용하기 위해 부기 플래그들을 로그할 수 있다. 커밋 상태를 업데이트하는 것은 트랜잭션이 성공적으로 커밋되었고 모든 비휘발성 업데이트들이 영구적으로 되었음을 나타낼 수 있다. 블록 620에서, 대상 컴퓨팅 디바이스(104)는 신뢰 레벨을 증가시킨다. 예를 들어, 대상 컴퓨팅 디바이스(104)는 신뢰 레벨을 미리 정해진 양만큼 증가시킬 수 있다. 트랜잭션을 커밋한 후에, 방법(600)은 블록 604으로 루프백하여 계속해서 트랜잭션 조대성을 선택하고 다음 트랜잭션을 실행한다.
전술한 바와 같이, 대상 컴퓨팅 디바이스(104)에 이용 가능한 전력은 간헐적일 수 있다. 따라서, 대상 컴퓨팅 디바이스(104)는 임의의 시점에 전력 부족으로 인해 작동이 중단(crash)되거나 또는 다르게 방법(600)의 실행을 중지할 수 있다. 도시된 바와 같이, 예시적인 실시예에서, 블록 604 내지 620의 실행 중에 임의의 시점에 정전이 발생하면, 재시작시 또는 다르게 다시 대상 컴퓨팅 디바이스(104)에 전력이 이용 가능할 때, 대상 컴퓨팅 디바이스(104)는 도 7에 도시된 복구 방법을 실행하기 시작한다. 정전이 언제 발생했는지에 따라, 복구 방법은 (비휘발성 메모리(148)에 대한 변경들을 롤백한 후에) 트랜잭션의 실행을 재개하거나 트랜잭션의 커밋 단계의 실행을 재개할 수 있다.
이제 도 7을 참조하면, 사용시에, 대상 컴퓨팅 디바이스(104)는 전력 상실 후에 복구를 위한 방법(700)을 실행할 수 있다. 방법(700)은 블록 702에서 시작되고, 여기서 대상 컴퓨팅 디바이스(104)는 전력 상실 후에 복구 프로세스를 시작한다. 예를 들어, 대상 컴퓨팅 디바이스(104)는 에너지 하베스팅 유닛(154)으로부터 전력이 이용 가능하게 될 때마다 복구 프로세스를 시작할 수 있다. 전술한 바와 같이, 대상 컴퓨팅 디바이스(104)는 방법(600)이 중단된 후에 복구 프로세스를 시작할 수 있다. 방법(600)은 트랜잭션을 실행하는 동안 또는 트랜잭션을 커밋하는 동안 임의의 시점에 실패했거나 또는 다르게 중단되었을 수 있다.
블록 704에서, 대상 컴퓨팅 디바이스(104)는 커밋 상태 업데이트 중에 트랜잭션의 실행이 실패했는지를 결정한다. 예를 들어, 대상 컴퓨팅 디바이스(104)는 도 6의 블록 614 또는 블록 618과 관련하여 전술한 바와 같이 상태 업데이트 중에 실행이 실패했는지를 결정할 수 있다. 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)에 저장된 하나 이상의 부기 플래그의 내용을 검사함으로써 커밋 상태 업데이트 중에 실행이 실패했는지를 결정할 수 있다. 블록 706에서, 대상 컴퓨팅 디바이스(104)는 상태 업데이트 중에 실행이 실패했는지를 체크한다. 그렇지 않다면, 방법(700)은 아래에 설명되는 블록 710으로 미리 분기한다. 상태 업데이트 중에 실행이 실패하면, 방법(700)은 블록 708로 진행한다.
블록 708에서, 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)에 저장된 값들로부터, 커밋 상태 플래그와 같은, 하나 이상의 부기 플래그를 복원한다. 대상 컴퓨팅 디바이스(104)는 커밋 상태 플래그 및/또는 다른 부기 플래그들을 커밋 상태 플래그를 업데이트하는 것의 실패한 시도 이전으로부터의 그들의 값으로 복원한다. 예를 들어, 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)에 저장된 미니-로그로부터 커밋 상태 플래그 및 다른 부기 플래그들을 복원할 수 있다.
블록 710에서, 대상 컴퓨팅 디바이스(104)는 트랜잭션의 커밋이 진행 중인 동안 트랜잭션의 실행이 실패했는지를 결정한다. 예를 들어, 대상 컴퓨팅 디바이스(104)는 도 6의 블록 616과 관련하여 전술한 바와 같이 휘발성 메모리 섀도 복사본에 변경들을 복사하는 동안 실행이 실패했는지를 결정할 수 있다. 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)에 저장된 커밋 상태 플래그의 값을 검사함으로써 트랜잭션의 커밋이 진행 중이었는지를 결정할 수 있다. 블록 712에서, 대상 컴퓨팅 디바이스(104)는 커밋이 진행 중이었는지를 체크한다. 그렇다면, 방법(700)은 아래에 설명되는 블록 720으로 미리 분기한다. 그렇지 않다면, 방법(700)은 블록 714로 진행한다.
블록 714에서, 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리 로그에 기초하여 비휘발성 메모리(148)에 대한 변경들을 롤백한다. 전술한 바와 같이, 비휘발성 메모리 로그는 트랜잭션 동안 업데이트된 비휘발성 변수들에 대한 이전 값들을 저장한다. 따라서, 변경들을 롤백함으로써, 대상 컴퓨팅 디바이스(104)는 실행이 중단되기 전에 트랜잭션에 의해 이루어진 비휘발성 메모리(148)에 대한 임의의 변경들을 폐기한다. 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리 로그로부터의 이전 값들을 비휘발성 메모리(148) 내의 적절한 위치로 다시 복사함으로써 트랜잭션을 롤백할 수 있다.
블록 716에서, 대상 컴퓨팅 디바이스(104)는, 예를 들어 로그 엔트리들을 클리어하거나, 인덱스 포인터를 리셋하거나, 또는 다르게 비휘발성 메모리 로그를 비우는 것에 의해 비휘발성 메모리 로그를 리셋한다. 블록 718에서, 대상 컴퓨팅 디바이스(104)는 예를 들어 로그 엔트리를 클리어하거나, 인덱스 포인터를 리셋하거나, 또는 다르게 휘발성 메모리 로그를 비우는 것에 의해 휘발성 메모리 로그를 리셋한다. 전술한 바와 같이, 휘발성 메모리 로그는 트랜잭션 동안 업데이트된 휘발성 변수들에 대한 새로운 값들을 저장한다. 따라서, 휘발성 메모리 로그를 리셋함으로써, 대상 컴퓨팅 디바이스(104)는 트랜잭션이 중단되기 전에 휘발성 변수들에 대해 이루어진 임의의 변경들을 폐기한다.
블록 720에서, 대상 컴퓨팅 디바이스(104)는 비휘발성 메모리(148)에 저장된 휘발성 메모리 섀도 복사본으로부터 마지막 일관된 휘발성 메모리 상태를 휘발성 메모리(146)에 로드한다. 전술한 바와 같이, 커밋 중에 휘발성 메모리 로그의 내용이 휘발성 메모리 섀도 복사본에 복사된다. 따라서, 휘발성 메모리 섀도 복사본은 마지막 성공적인 커밋 시의 휘발성 메모리(146)의 내용을 포함할 수 있다. 휘발성 메모리 섀도 복사본에 값들을 복사하는 동안 트랜잭션 실행이 중단되면(즉, 커밋이 진행 중인 동안 중단되면), 휘발성 메모리 섀도 복사본이 휘발성 변수들에 대해 이루어진 모든 변경들을 포함하지 않을 수 있는 것이 가능하다. 그러나, 그러한 상황들에서, 비휘발성 메모리(148)에 저장된 휘발성 메모리 로그는 휘발성 변수들의 업데이트된 값들을 저장한다. 커밋이 진행 중인 동안 실행이 중단되었다면, 방법(700)은 블록 718을 실행하지 않으므로 휘발성 메모리 로그는 리셋되지 않음을 유의하라. 따라서, 그러한 상황들에서, 트랜잭션의 커밋 단계를 재개할 때, 대상 컴퓨팅 디바이스(104)는 계속해서 휘발성 메모리 로그의 내용을 휘발성 메모리 섀도 복사본에 복사할 수 있다.
블록 722에서, 대상 컴퓨팅 디바이스(104)는 신뢰 레벨을 리셋한다. 신뢰 값을 리셋하는 것은 대상 컴퓨팅 디바이스(104)가 중단로부터 실행으로 복구하였음을 나타내고 따라서 이용 가능한 에너지가 간헐적일 수 있음을 나타낸다. 예시적인 실시예에서, 대상 컴퓨팅 디바이스(104)는 신뢰 레벨을 그 최소값으로, 예를 들어 0으로 리셋한다. 추가적으로 또는 대안적으로, 대상 컴퓨팅 디바이스(104)는 상이한 기법들을 사용하여, 예를 들어, 미리 정의된 양만큼 신뢰 값을 감소시킴으로써 신뢰 값을 리셋할 수 있다. 도 6과 관련하여 전술한 바와 같이, 대상 컴퓨팅 디바이스(104)는 신뢰 값을 리셋하는 것에 응답하여 실행을 위해 더 미세한 입도의 트랜잭션들을 선택할 수 있다.
블록 724에서, 대상 컴퓨팅 디바이스(104)는 트랜잭션들의 실행을 재시작한다. 실행이 언제 중단되었는지에 따라, 대상 컴퓨팅 디바이스(104)는 이전 트랜잭션의 실행을 그 시작부터 재시작할 수 있거나, 대상 컴퓨팅 디바이스(104)는 이전 트랜잭션의 커밋 단계를 재시작할 수 있다. 예를 들어, 커밋이 진행 중인 동안 실행이 중단되었다면, 대상 컴퓨팅 디바이스(104)는 도 6에서 커밋 시작 시점으로 도시된, 블록 616에서 방법(600)의 실행을 재시작할 수 있다. 그 예에서, 실행을 재시작한 후에, 대상 컴퓨팅 디바이스(104)는 계속해서 휘발성 메모리 로그로부터의 값들을 휘발성 메모리 섀도 복사본에 복사할 것이다. 또 다른 예로서, 커밋이 진행 중이 아닌 동안 실행이 중단되었다면, 대상 컴퓨팅 디바이스(104)는 도 6에서 커밋 종료 시점으로 도시된, 블록 620 후에 방법(600)의 실행을 재시작할 수 있다. 그 예에서, 실행을 재시작한 후에, 방법(600)은 블록 604으로 루프백하여 트랜잭션 조대성을 선택하고, 그 결과 더 미세한 입도의 트랜잭션들이 선택될 수 있고, 그 후 방법(600)은 블록 606으로 진행하여 트랜잭션을 실행한다. 비휘발성 메모리(148)가 롤백되었기 때문에, 대상 컴퓨팅 디바이스(104)는 이전에 중단된 트랜잭션을 재시작한다. 실행을 재시작한 후에, 방법(700)은 완료된다. 방법(700)은 차후 정전으로부터의 복구에 응답하여 다시 실행될 수 있다.
이제 도 8을 참조하면, 다이어그램(800)은 대상 컴퓨팅 디바이스(104)에 의해 유지될 수 있는 메모리 모델의 잠재적인 실시예를 도시한다. 도시된 바와 같이, 비휘발성 메모리(148)는 비휘발성 프로그램 데이터(802)를 포함한다. 비휘발성 프로그램 데이터(802)는 비휘발성 메모리(148) 내의 실행 가능 프로그램(212)에 의해 액세스되는 변수들, 버퍼들, 또는 다른 데이터로서 구현될 수 있다. 유사하게, 휘발성 메모리(146)는 휘발성 메모리(146) 내의 실행 가능 프로그램(212)에 의해 액세스되는 휘발성 변수들, 레지스터들, 스택들, 또는 다른 휘발성 데이터로서 구현될 수 있는 휘발성 프로그램 데이터(804)를 포함한다. 실행 가능 프로그램(212)의 트랜잭션들의 실행 중에, 비휘발성 프로그램 데이터(802)에 대한 변경들은 비휘발성 메모리(148)에 저장된 비휘발성 메모리 로그(806)에 로그된다. 유사하게, 실행 가능 프로그램(212)의 트랜잭션들의 실행 중에, 휘발성 프로그램 데이터(804)에 대한 변경들은 비휘발성 메모리(148)에 또한 저장된 휘발성 메모리 로그(808)에 로그된다. 트랜잭션 커밋 동안, 휘발성 메모리 로그(808)에 저장된 휘발성 프로그램 데이터(804)의 업데이트된 값들은 비휘발성 메모리(148)에 저장된 휘발성 메모리 섀도 복사본(810)에 복사된다. 정전 또는 다른 실행 중단으로부터의 복구시, 휘발성 메모리 섀도 복사본(810)의 내용은 휘발성 프로그램 데이터(804)로 복원될 수 있다. 도시된 바와 같이, 비휘발성 메모리(148)는 또한, 대상 컴퓨팅 디바이스(104)가 정전 또는 다른 중단으로부터 복구할 수 있게 하는 커밋 상태 플래그, 재시작 주소, 또는 다른 데이터로서 구현될 수 있는, 하나 이상의 부기 플래그(812)를 포함한다. 부기 플래그들(812)의 내용은, 부기 플래그들(812)을 업데이트하는 동안 정전 또는 다른 중단이 발생하는 경우 부기 플래그들(812)의 내용을 복구하는 데 사용될 수 있는, 미니-로그(814)에 로그될 수 있다.
이제 도 9를 참조하면, 의사 코드(900)는 런타임시 상이한 트랜잭션 영역 크기들 사이에 바뀔 수 있는 다중-버전 코드를 도시한다. 예시적인 실시예에서, regionType 변수는 SMALL로 디폴트되는데, 이는 그의 최소값이고 도 6의 블록 602에 대응한다. 의사 코드(900)는 regionType 변수의 값에 기초하여 트랜잭션들을 선택하기 위한 분기 조건부 구조를 포함하고, 이는 도 6의 블록 604에 대응한다. 의사 코드(900)에 도시된 예는 각각 SMALL, MED, 및 LARGE 세분성의 3개의 상이한 변형을 포함한다. 도시된 바와 같이, 신뢰 값이 특정한 미리 정의된 임계 값들을 초과하는 경우 regionType 변수는 수정될 수 있다. 아래에 더 설명되는 바와 같이, 신뢰 값은 정전으로부터의 복구시에 리셋된다. 따라서, 런타임시 실행은 에너지의 부족 또는 풍부함에 기초하여 이러한 세분성 변형들 사이에 앞뒤로 전환할 수 있다.
이제 도 10을 참조하면, 의사 코드 다이어그램(1000)은 트랜잭션을 커밋하기 위한 예시적인 절차들을 도시한다. 의사 코드(1002)는 대상 컴퓨팅 디바이스(104)에 의해 실행될 수 있는 커밋 함수의 하나의 잠재적인 실시예를 도시한다. 도시된 바와 같이, commit_X 함수는 updateStatus 함수를 호출하여 커밋 상태 플래그를 "1"("진행 중"에 대응함)로 업데이트함으로써 시작된다. 의사 코드(1004)는 updateStatus 함수의 하나의 잠재적인 실시예를 도시한다. 도시된 바와 같이, updateStatus 함수는 부기 플래그들을 업데이트하기 전에 특정 부기 플래그들(예를 들어, logStatus, restartPC, 및 logldxPtr)의 값들을 미니-로그에 저장한다. 전술한 바와 같이, 예를 들어 정전에 의해 updateStatus 함수의 실행이 중단되는 경우 부기 플래그들의 값들이 복구될 수 있다. 도시된 바와 같이, updateStatus 함수에 대한 호출은 도 6의 블록 614에 대응한다.
커밋 상태 플래그를 진행 중으로 업데이트한 후에, 의사 코드(1002)는 휘발성 메모리 로그로부터의 값들을 비휘발성 메모리(148)에 저장된 휘발성 메모리 섀도 복사본에 복사하는, 함수 voLogCommit을 호출한다. voLogCommit에 대한 호출은 도 6의 블록 616에 대응한다. 휘발성 메모리 섀도 복사본에 휘발성 메모리 값을 성공적으로 복사한 후에, 의사 코드(1002)는 updateStatus 함수를 호출하여 커밋 상태 플래그를 "0"("완료"또는 "진행 중이 아님"에 대응함)으로 업데이트한다. 상태를 완료로 업데이트하기 위한 호출은 도 6의 블록 618에 대응한다. 커밋 상태 플래그를 성공적으로 업데이트한 후에, 의사 코드(1002)는 신뢰 변수를 증가시키는데, 이는 도 6의 블록 620에 대응한다. 전술한 바와 같이, 신뢰 변수를 증가시킨 후에, 커밋 함수는 완료되고 대상 컴퓨팅 디바이스(104)는 계속해서 트랜잭션들을 실행할 수 있다.
이제 도 11을 참조하면, 의사 코드(1100)는 대상 컴퓨팅 디바이스(104)에 의해 실행될 수 있는 복구 프로세스의 하나의 잠재적인 실시예를 도시한다. 의사 코드(1100)는 도 7의 블록 702에 대응하는 Recovery 라벨로 시작된다. Recovery 라벨은, 예를 들어 전력이 복원될 때 대상 컴퓨팅 디바이스(104)에 의해 호출되는 부트 벡터 또는 다른 루틴으로서, 정전 또는 다른 실행 중단으로부터 복구할 때 대상 컴퓨팅 디바이스(104)에 의해 실행될 수 있다. 의사 코드(1100)는, 도 7의 블록 704에 대응하여, 비휘발성 부기 플래그 miniLogValid를 체크함으로써, 커밋 상태 업데이트 중에 실행이 중단되었는지를 결정한다. 도 10의 의사 코드(1004)에 도시된 바와 같이, 플래그 miniLogValid는 대상 컴퓨팅 디바이스(104)가 미니-로그에 부기 값들을 로그하였고 현재 부기 플래그들을 업데이트하고 있을 때 참이다. 플래그가 참이면(즉, 상태 업데이트가 중단된 경우), 의사 코드(1100)는, 도 7의 블록 708에 대응하여, restoreFromMiniLog 함수를 호출한다.
다음으로, 의사 코드(1100)는, 도 7의 블록 710에 대응하여, 비휘발성 부기 플래그 logStatus를 체크함으로써, 커밋이 진행 중인 동안 실행이 중단되었는지를 결정한다. logStatus가 0인 경우(즉, 진행 중이 아닌 경우), 의사 코드(1100)는, 도 7의 블록 714, 716, 718에 각각 대응하여, nvRestore 함수를 호출하고, nvLogldx 값을 리셋하고, vLogldx 값을 리셋한다. 따라서, logStatus가 0인 경우, 의사 코드(1100)는 작동이 중단되기(crashing) 전에 트랜잭션의 실행에 의해 이루어진 임의의 변경들을 롤백한다.
다음으로, 의사 코드(1100)는, 도 7의 블록 720에 대응하여, vRestore 함수를 호출하여 휘발성 메모리 섀도 복사본으로부터 휘발성 프로그램 데이터를 복원한다. 복원된 후에, 휘발성 메모리(146)는 마지막 성공적인 트랜잭션 커밋 후의 휘발성 메모리(146)의 상태와 일관된다. 휘발성 메모리(146)를 복원한 후에, 의사 코드(1100)는, 도 7의 블록 722에 대응하여, 신뢰 변수를 0으로 리셋하고, 도 7의 블록 724에 대응하여, restartPC 변수에 저장된 주소로 점프한다. 도 10의 의사 코드(1004)에 도시된 바와 같이, 커밋이 진행 중이 아닌 경우, restartPC 변수는 commitEnd_X 라벨의 주소를 저장하는데, 이는 도 6의 블록 620 후에 재개하는 것에 대응한다. 커밋이 진행 중인 경우, restartPC 변수는 commitStart_X 라벨의 주소를 저장하는데, 이는 도 6의 블록 616 전에 재개하는 것에 대응한다. 따라서, 의사 코드(1100)는 커밋이 진행 중인 동안 실행이 중단되었는지에 따라, 트랜잭션의 실행을 재시작하거나 트랜잭션의 커밋을 재시작할 수 있다.
일부 실시예들에서, 방법들(300, 600, 및/또는 700)은 컴퓨터 판독가능 매체 상에 저장된 다양한 명령어들로서 구현될 수 있고, 그 명령어들은 컴파일러 컴퓨팅 디바이스(102) 및/또는 대상 컴퓨팅 디바이스(104)의 프로세서들(120, 140), 주변 디바이스(130), 및/또는 다른 컴포넌트들에 의해 실행되어 대응하는 컴파일러 컴퓨팅 디바이스(102) 및/또는 대상 컴퓨팅 디바이스(104)로 하여금 대응하는 방법(300, 600, 및/또는 700)을 수행하게 할 수 있다. 컴퓨터 판독가능 매체는 컴파일러 컴퓨팅 디바이스(102) 및/또는 대상 컴퓨팅 디바이스(104)의 메모리(124, 144), 데이터 저장 디바이스(126, 150), 프로세서(120, 140)의 로컬 메모리, 다른 메모리 또는 데이터 저장 디바이스들, 컴파일러 컴퓨팅 디바이스(102)의 주변 디바이스(130)에 의해 판독가능한 휴대용 매체, 및/또는 다른 매체를 포함하지만, 이들로 제한되지 않는, 컴파일러 컴퓨팅 디바이스(102) 및/또는 대상 컴퓨팅 디바이스(104)에 의해 판독될 수 있는 임의의 유형의 매체로서 구현될 수 있다.
예들
본 명세서에 개시된 기술들의 예시적인 예들이 아래에 제공된다. 이 기술들의 실시예는 아래에 설명되는 예들 중 임의의 하나 이상의 예, 및 그의 임의의 조합을 포함할 수 있다.
예 1은 대상 디바이스에 대한 코드를 컴파일하기 위한 컴퓨팅 디바이스를 포함하는데, 상기 컴퓨팅 디바이스는: (i) 컴퓨터 프로그램을 제1 트랜잭션 시퀀스로 변환하고 (ii) 상기 제1 트랜잭션 시퀀스를 합체하여 제2 트랜잭션 시퀀스를 생성하는 컴파일러 분석 모듈 - 상기 제2 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 세분성을 가짐 -; 및 상기 대상 디바이스에 대한 실행 가능 프로그램을 생성하는 코드 생성 모듈을 포함하고, 상기 실행 가능 프로그램은 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하고, 상기 실행 가능 프로그램은 이용 가능한 에너지에 기초하여 런타임시 상기 제1 트랜잭션 시퀀스와 상기 제2 트랜잭션 시퀀스 중에서 선택한다.
예 2는 예 1의 주제(subject matter)를 포함하고, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 것은 상기 컴퓨터 프로그램을 정적으로 분석하여 기본 블록 시퀀스를 식별하는 것을 포함하고, 상기 제1 트랜잭션 시퀀스의 각 트랜잭션은 기본 블록을 포함한다.
예 3은 예 1 및 2 중 어느 하나의 주제를 포함하고, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 것은, 상기 기본 블록 시퀀스의 각 기본 블록에 대해: 대응하는 기본 블록의 각 저장 연산에 로그 연산을 인스트루먼트하고; 트랜잭션 커밋 연산을 상기 대응하는 기본 블록에 추가하는 것을 포함한다.
예 4는 예 1-3 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스를 합체하는 것은 상기 제1 트랜잭션 시퀀스의 제1 기본 블록을 상기 제1 기본 블록에 의해 지배되는 상기 제1 트랜잭션 시퀀스의 하나 이상의 기본 블록과 결합하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 것을 포함한다.
예 5는 예 1-4 중 어느 하나의 주제를 포함하고, 미세한 입도의 상기 제1 트랜잭션 시퀀스를 합체하는 것은 상기 컴퓨터 프로그램의 루프를 타일링하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 것을 포함한다.
예 6은 예 1-5 중 어느 하나의 주제를 포함하고, 미세한 입도의 상기 제1 트랜잭션 시퀀스를 합체하는 것은 관련 없는 로그 연산들을 제거하기 위해 상기 제2 트랜잭션 시퀀스의 생존성 분석을 수행하는 것을 추가로 포함한다.
예 7은 예 1-6 중 어느 하나의 주제를 포함하고, 프로파일러 모듈을 추가로 포함하고, 상기 컴파일러 분석 모듈은 추가로, 상기 제1 트랜잭션 시퀀스를 합체하여 제3 트랜잭션 시퀀스를 생성하는 것이고, 상기 제3 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 그리고 상기 제2 트랜잭션 시퀀스의 세분성과는 다른 세분성을 갖고; 상기 프로파일러 모듈은 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 에너지 프로파일을 수집하는 것이고, 상기 에너지 프로파일은 대응하는 트랜잭션 시퀀스의 트랜잭션을 실행하기 위해 상기 대상 디바이스에 의해 소비된 에너지를 나타내고; 상기 코드 생성 모듈은 상기 에너지 프로파일들에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 트랜잭션 시퀀스를 선택하는 것이고; 상기 대상 디바이스에 대한 실행 가능 프로그램을 생성하는 것 - 상기 실행 가능 프로그램은 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함함 - 은 상기 제2 트랜잭션 시퀀스의 선택에 응답하여 상기 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 것을 포함한다.
예 8은 예 1-7 중 어느 하나의 주제를 포함하고, 상기 프로파일러 모듈은 추가로, 상기 대상 디바이스에 관련하여 이용 가능한 에너지 프로파일을 수집하는 것이고; 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 것은 상기 이용 가능한 에너지 프로파일에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 것을 추가로 포함한다.
예 9는 예 1-8 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 상기 에너지 프로파일을 수집하는 것은 상기 대상 디바이스에 의한 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스의 실행을 시뮬레이트하는 것을 포함한다.
예 10은 예 1-9 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 상기 에너지 프로파일을 수집하는 것은 대상 디바이스로부터 에너지 프로파일 데이터를 수신하는 것을 포함한다.
예 11은 일관된 코드 실행을 위한 대상 컴퓨팅 디바이스를 포함하는데, 상기 대상 컴퓨팅 디바이스는: 신뢰 레벨을 최소값으로 초기화하는 전력 관리 모듈 - 상기 신뢰 레벨은 상기 대상 컴퓨팅 디바이스의 에너지 하베스팅 유닛에 의해 생성된 이용 가능한 에너지를 나타냄 -; 및 (i) 실행 가능 프로그램으로부터 활성 트랜잭션 시퀀스를 상기 활성 트랜잭션 시퀀스의 세분성 및 상기 신뢰 값에 기초하여 선택하고 - 상기 실행 가능 프로그램은 복수의 트랜잭션 시퀀스를 포함하고, 상기 복수의 트랜잭션의 각 트랜잭션 시퀀스는 상이한 세분성을 가짐 -, (ii) 상기 활성 트랜잭션 시퀀스의 선택에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 코드 실행 모듈을 포함하고; 상기 전력 관리 모듈은 추가로 (i) 상기 트랜잭션의 실행에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하고, (ii) 상기 트랜잭션을 커밋하려는 시도에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었는지를 결정하고, (iii) 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었다는 결정에 응답하여 상기 신뢰 레벨을 증가시키는 것이다.
예 12는 예 11의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다는 결정에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 복구 모듈을 추가로 포함한다.
예 13은 예 11 및 12 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다는 결정에 응답하여 상기 신뢰 값을 상기 최소값으로 리셋하는 것을 포함한다.
예 14는 예 11-13 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은 상기 신뢰 레벨의 리셋에 응답하여 상기 활성 트랜잭션 시퀀스의 선택을 재시작하는 것을 추가로 포함한다.
예 15는 예 11-14 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 것은 상기 대상 컴퓨팅 디바이스의 비휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 비휘발성 메모리 로그에 로그하는 것을 포함한다.
예 16은 예 11-15 중 어느 하나의 주제를 포함하고, 상기 비휘발성 메모리에 대해 이루어진 변경들을 로그하는 것은 비휘발성 메모리 위치의 이전 값을 상기 비휘발성 메모리 로그에 저장하는 것을 포함한다.
예 17은 예 11-16 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 것은 상기 대상 컴퓨팅 디바이스의 휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 휘발성 메모리 로그에 로그하는 것을 추가로 포함한다.
예 18은 예 11-17 중 어느 하나의 주제를 포함하고, 상기 휘발성 메모리에 대해 이루어진 변경들을 로그하는 것은 휘발성 메모리 위치의 새로운 값을 상기 휘발성 메모리 로그에 저장하는 것을 포함한다.
예 19는 예 11-18 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 것은: 상기 트랜잭션을 커밋하려는 시도에 응답하여 상기 비휘발성 메모리에 저장된 커밋 상태 플래그를 진행 중으로 업데이트하고; 상기 커밋 상태 플래그를 진행 중으로 업데이트하는 것에 응답하여 상기 휘발성 메모리 로그로부터의 변경들을 상기 비휘발성 메모리에 저장된 섀도 휘발성 메모리 복사본에 복사하고; 상기 휘발성 메모리 로그로부터의 변경들을 상기 섀도 휘발성 메모리 복사본에 복사하는 것에 응답하여 상기 커밋 상태 플래그를 완료로 업데이트하는 것을 포함한다.
예 20은 예 11-19 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다는 결정에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 복구 모듈을 추가로 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은: 상기 커밋 상태 플래그가 진행 중인지를 결정하고; 상기 커밋 상태 플래그가 진행 중이 아니라는 결정에 응답하여 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하고; 상기 휘발성 메모리 섀도 복사본에 기초하여 상기 휘발성 메모리를 복원하고; 상기 휘발성 메모리의 복원에 응답하여 상기 신뢰 레벨을 최소값으로 리셋하는 것을 포함한다.
예 21은 예 11-20 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은: 상기 커밋 상태 플래그가 진행 중이 아니라는 결정에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션의 실행을 재시작하고; 상기 커밋 상태 플래그가 진행 중이라는 결정에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려는 시도를 재시작하는 것을 추가로 포함한다.
예 22는 예 11-21 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은: 상기 커밋 상태 플래그가 성공적으로 업데이트되었는지를 결정하고; 상기 커밋 상태가 성공적으로 업데이트되지 않았다는 결정에 응답하여 상기 비휘발성 메모리에 저장된 업데이트 상태 로그로부터 상기 커밋 상태 플래그를 복원하는 것을 추가로 포함하고; 상기 커밋 상태 플래그가 진행 중인지를 결정하는 것은 상기 커밋 상태가 성공적으로 업데이트되었다는 결정에 응답하여 상기 커밋 상태 플래그가 진행 중인지를 결정하는 것을 포함한다.
예 23은 예 11-22 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하는 것에 응답하여 상기 비휘발성 메모리 로그 및 상기 휘발성 메모리 로그를 클리어하는 것을 추가로 포함한다.
예 24는 대상 디바이스에 대한 코드를 컴파일하기 위한 방법을 포함하는데, 상기 방법은: 컴퓨팅 디바이스에 의해, 컴퓨터 프로그램을 제1 트랜잭션 시퀀스로 변환하는 단계; 상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스를 합체하여 제2 트랜잭션 시퀀스를 생성하는 단계 - 상기 제2 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 세분성을 가짐 -; 및 상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하는 상기 대상 디바이스에 대한 실행 가능 프로그램을 생성하는 단계를 포함하고, 상기 실행 가능 프로그램은 이용 가능한 에너지에 기초하여 런타임시 상기 제1 트랜잭션 시퀀스와 상기 제2 트랜잭션 시퀀스 중에서 선택한다.
예 25는 예 24의 주제를 포함하고, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 단계는 상기 컴퓨터 프로그램을 정적으로 분석하여 기본 블록 시퀀스를 식별하는 단계를 포함하고, 상기 제1 트랜잭션 시퀀스의 각 트랜잭션은 기본 블록을 포함한다.
예 26은 예 24 및 25 중 어느 하나의 주제를 포함하고, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 단계는, 상기 기본 블록 시퀀스의 각 기본 블록에 대해: 대응하는 기본 블록의 각 저장 연산에 로그 연산을 인스트루먼트하는 단계; 및 트랜잭션 커밋 연산을 상기 대응하는 기본 블록에 추가하는 단계를 포함한다.
예 27은 예 24-26 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스를 합체하는 단계는 상기 제1 트랜잭션 시퀀스의 제1 기본 블록을 상기 제1 기본 블록에 의해 지배되는 상기 제1 트랜잭션 시퀀스의 하나 이상의 기본 블록과 결합하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 단계를 포함한다.
예 28은 예 24-27 중 어느 하나의 주제를 포함하고, 미세한 입도의 상기 제1 트랜잭션 시퀀스를 합체하는 단계는 상기 컴퓨터 프로그램의 루프를 타일링하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 단계를 포함한다.
예 29는 예 24-28 중 어느 하나의 주제를 포함하고, 미세한 입도의 상기 제1 트랜잭션 시퀀스를 합체하는 단계는 관련 없는 로그 연산들을 제거하기 위해 상기 제2 트랜잭션 시퀀스의 생존성 분석을 수행하는 단계를 추가로 포함한다.
예 30은 예 24-29 중 어느 하나의 주제를 포함하고, 상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스를 합체하여 제3 트랜잭션 시퀀스를 생성하는 단계 - 상기 제3 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 그리고 상기 제2 트랜잭션 시퀀스의 세분성과는 다른 세분성을 가짐 -; 상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 에너지 프로파일을 수집하는 단계 - 상기 에너지 프로파일은 대응하는 트랜잭션 시퀀스의 트랜잭션을 실행하기 위해 상기 대상 디바이스에 의해 소비된 에너지를 나타냄 -; 및 상기 컴퓨팅 디바이스에 의해, 상기 에너지 프로파일들에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 트랜잭션 시퀀스를 선택하는 단계를 추가로 포함하고; 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하는 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 단계는 상기 제2 트랜잭션 시퀀스를 선택하는 것에 응답하여 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 단계를 포함한다.
예 31은 예 24-30 중 어느 하나의 주제를 포함하고, 상기 컴퓨팅 디바이스에 의해, 상기 대상 디바이스에 관련하여 이용 가능한 에너지 프로파일을 수집하는 단계를 추가로 포함하고; 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 단계는 상기 이용 가능한 에너지 프로파일에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 단계를 추가로 포함한다.
예 32는 예 24-31 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 상기 에너지 프로파일을 수집하는 단계는 상기 대상 디바이스에 의한 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스의 실행을 시뮬레이트하는 단계를 포함한다.
예 33은 예 24-32 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 상기 에너지 프로파일을 수집하는 단계는 대상 디바이스로부터 에너지 프로파일 데이터를 수신하는 단계를 포함한다.
예 34는 일관된 코드 실행을 위한 방법을 포함하는데, 상기 방법은: 대상 컴퓨팅 디바이스에 의해, 신뢰 레벨을 최소값으로 초기화하는 단계 - 상기 신뢰 레벨은 상기 대상 컴퓨팅 디바이스의 에너지 하베스팅 유닛에 의해 생성된 이용 가능한 에너지를 나타냄 -; 상기 대상 컴퓨팅 디바이스에 의해, 실행 가능 프로그램으로부터 활성 트랜잭션 시퀀스를 상기 활성 트랜잭션 시퀀스의 세분성 및 상기 신뢰 값에 기초하여 선택하는 단계 - 상기 실행 가능 프로그램은 복수의 트랜잭션 시퀀스를 포함하고, 상기 복수의 트랜잭션의 각 트랜잭션 시퀀스는 상이한 세분성을 가짐 -; 상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스를 선택하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 단계; 상기 대상 컴퓨팅 디바이스에 의해, 상기 트랜잭션을 실행하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 단계; 상기 대상 컴퓨팅 디바이스에 의해, 상기 트랜잭션을 커밋하려고 시도하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었는지를 결정하는 단계; 및 상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었다고 결정하는 것에 응답하여 상기 신뢰 레벨을 증가시키는 단계를 포함한다.
예 35는 예 34의 주제를 포함하고, 상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 단계를 추가로 포함한다.
예 36은 예 34 및 35 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 신뢰 값을 상기 최소값으로 리셋하는 단계를 포함한다.
예 37은 예 34-36 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는 상기 신뢰 레벨을 리셋하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 선택을 재시작하는 단계를 추가로 포함한다.
예 38은 예 34-37 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 단계는 상기 대상 컴퓨팅 디바이스의 비휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 비휘발성 메모리 로그에 로그하는 단계를 포함한다.
예 39는 예 34-38 중 어느 하나의 주제를 포함하고, 상기 비휘발성 메모리에 대해 이루어진 변경들을 로그하는 단계는 비휘발성 메모리 위치의 이전 값을 상기 비휘발성 메모리 로그에 저장하는 단계를 포함한다.
예 40은 예 34-39 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 단계는 상기 대상 컴퓨팅 디바이스의 휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 휘발성 메모리 로그에 로그하는 단계를 추가로 포함한다.
예 41은 예 34-40 중 어느 하나의 주제를 포함하고, 상기 휘발성 메모리에 대해 이루어진 변경들을 로그하는 단계는 휘발성 메모리 위치의 새로운 값을 상기 휘발성 메모리 로그에 저장하는 단계를 포함한다.
예 42는 예 34-41 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 단계는: 상기 트랜잭션을 커밋하려고 시도하는 단계에 응답하여 상기 비휘발성 메모리에 저장된 커밋 상태 플래그를 진행 중으로 업데이트하는 단계; 상기 커밋 상태 플래그를 진행 중으로 업데이트하는 단계에 응답하여 상기 휘발성 메모리 로그로부터의 변경들을 상기 비휘발성 메모리에 저장된 섀도 휘발성 메모리 복사본에 복사하는 단계; 상기 휘발성 메모리 로그로부터의 변경들을 상기 섀도 휘발성 메모리 복사본에 복사하는 단계에 응답하여 상기 커밋 상태 플래그를 완료로 업데이트하는 단계를 포함한다.
예 43은 예 34-42 중 어느 하나의 주제를 포함하고, 상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 단계를 추가로 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는: 상기 커밋 상태 플래그가 진행 중인지를 결정하는 단계; 상기 커밋 상태 플래그가 진행 중이 아니라고 결정하는 것에 응답하여 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하는 단계; 상기 휘발성 메모리 섀도 복사본에 기초하여 상기 휘발성 메모리를 복원하는 단계; 및 상기 휘발성 메모리를 복원하는 단계에 응답하여 상기 신뢰 레벨을 최소값으로 리셋하는 단계를 포함한다.
예 44는 예 34-43 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는: 상기 커밋 상태 플래그가 진행 중이 아니라고 결정하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션의 실행을 재시작하는 단계; 및 상기 커밋 상태 플래그가 진행 중이라고 결정하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려는 시도를 재시작하는 단계를 추가로 포함한다.
예 45는 예 34-44 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는: 상기 커밋 상태 플래그가 성공적으로 업데이트되었는지를 결정하는 단계; 및 상기 커밋 상태가 성공적으로 업데이트되지 않았다고 결정하는 것에 응답하여 상기 비휘발성 메모리에 저장된 업데이트 상태 로그로부터 상기 커밋 상태 플래그를 복원하는 단계를 추가로 포함하고; 상기 커밋 상태 플래그가 진행 중인지를 결정하는 단계는 상기 커밋 상태가 성공적으로 업데이트되었다고 결정하는 것에 응답하여 상기 커밋 상태 플래그가 진행 중인지를 결정하는 단계를 포함한다.
예 46은 예 34-45 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하는 단계에 응답하여 상기 비휘발성 메모리 로그 및 상기 휘발성 메모리 로그를 클리어하는 단계를 추가로 포함한다.
예 47은 컴퓨팅 디바이스를 포함하는데, 이는: 프로세서; 및 상기 프로세서에 의해 실행될 때 상기 컴퓨팅 디바이스로 하여금 예 24-46 중 어느 하나의 방법을 수행하게 하는 복수의 명령어가 저장되어 있는 메모리를 포함한다.
예 48은 실행되는 것에 응답하여 컴퓨팅 디바이스가 예 24-46 중 어느 하나의 방법을 수행하는 것을 야기하는 저장된 복수의 명령어를 포함하는 하나 이상의 머신 판독가능 저장 매체를 포함한다.
예 49는 예 24-46 중 어느 하나의 방법을 수행하기 위한 수단을 포함하는 컴퓨팅 디바이스를 포함한다.
예 50은 대상 디바이스에 대한 코드를 컴파일하기 위한 컴퓨팅 디바이스를 포함하는데, 상기 컴퓨팅 디바이스는: 컴퓨터 프로그램을 제1 트랜잭션 시퀀스로 변환하는 수단; 상기 제1 트랜잭션 시퀀스를 합체하여 제2 트랜잭션 시퀀스를 생성하는 수단 - 상기 제2 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 세분성을 가짐 -; 및 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하는 상기 대상 디바이스에 대한 실행 가능 프로그램을 생성하는 수단을 포함하고, 상기 실행 가능 프로그램은 이용 가능한 에너지에 기초하여 런타임시 상기 제1 트랜잭션 시퀀스와 상기 제2 트랜잭션 시퀀스 중에서 선택한다.
예 51은 예 50의 주제를 포함하고, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 수단은 상기 컴퓨터 프로그램을 정적으로 분석하여 기본 블록 시퀀스를 식별하는 수단을 포함하고, 상기 제1 트랜잭션 시퀀스의 각 트랜잭션은 기본 블록을 포함한다.
예 52는 예 50 및 51 중 어느 하나의 주제를 포함하고, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 수단은, 상기 기본 블록 시퀀스의 각 기본 블록에 대해: 대응하는 기본 블록의 각 저장 연산에 로그 연산을 인스트루먼트하는 수단; 및 트랜잭션 커밋 연산을 상기 대응하는 기본 블록에 추가하는 수단을 포함한다.
예 53은 예 50-52 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스를 합체하는 수단은 상기 제1 트랜잭션 시퀀스의 제1 기본 블록을 상기 제1 기본 블록에 의해 지배되는 상기 제1 트랜잭션 시퀀스의 하나 이상의 기본 블록과 결합하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 수단을 포함한다.
예 54는 예 50-53 중 어느 하나의 주제를 포함하고, 상기 미세한 입도의 제1 트랜잭션 시퀀스를 합체하는 수단은 상기 컴퓨터 프로그램의 루프를 타일링하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 수단을 포함한다.
예 55는 예 50-54 중 어느 하나의 주제를 포함하고, 미세한 입도의 상기 제1 트랜잭션 시퀀스를 합체하는 수단은 관련 없는 로그 연산들을 제거하기 위해 상기 제2 트랜잭션 시퀀스의 생존성 분석을 수행하는 수단을 추가로 포함한다.
예 56은 예 50-55 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스를 합체하여 제3 트랜잭션 시퀀스를 생성하는 수단 - 상기 제3 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 그리고 상기 제2 트랜잭션 시퀀스의 세분성과는 다른 세분성을 가짐 -; 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 에너지 프로파일을 수집하는 수단 - 상기 에너지 프로파일은 대응하는 트랜잭션 시퀀스의 트랜잭션을 실행하기 위해 상기 대상 디바이스에 의해 소비된 에너지를 나타냄 -; 및 상기 에너지 프로파일들에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 트랜잭션 시퀀스를 선택하는 수단을 추가로 포함하고; 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하는 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 수단은 상기 제2 트랜잭션 시퀀스를 선택하는 것에 응답하여 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 수단을 포함한다.
예 57은 예 50-56 중 어느 하나의 주제를 포함하고, 상기 대상 디바이스에 관련하여 이용 가능한 에너지 프로파일을 수집하는 수단을 추가로 포함하고; 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 수단은 상기 이용 가능한 에너지 프로파일에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 수단을 추가로 포함한다.
예 58은 예 50-57 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 상기 에너지 프로파일을 수집하는 수단은 상기 대상 디바이스에 의한 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스의 실행을 시뮬레이트하는 수단을 포함한다.
예 59는 예 50-58 중 어느 하나의 주제를 포함하고, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 상기 에너지 프로파일을 수집하는 수단은 대상 디바이스로부터 에너지 프로파일 데이터를 수신하는 수단을 포함한다.
예 60은 일관된 코드 실행을 위한 대상 컴퓨팅 디바이스를 포함하는데, 상기 대상 컴퓨팅 디바이스는: 신뢰 레벨을 최소값으로 초기화하는 수단 - 상기 신뢰 레벨은 상기 대상 컴퓨팅 디바이스의 에너지 하베스팅 유닛에 의해 생성된 이용 가능한 에너지를 나타냄 -; 실행 가능 프로그램으로부터 활성 트랜잭션 시퀀스를 상기 활성 트랜잭션 시퀀스의 세분성 및 상기 신뢰 값에 기초하여 선택하는 수단 - 상기 실행 가능 프로그램은 복수의 트랜잭션 시퀀스를 포함하고, 상기 복수의 트랜잭션의 각 트랜잭션 시퀀스는 상이한 세분성을 가짐 -; 상기 활성 트랜잭션 시퀀스를 선택하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 수단; 상기 트랜잭션을 실행하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 수단; 상기 트랜잭션을 커밋하려고 시도하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었는지를 결정하는 수단; 및 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었다고 결정하는 것에 응답하여 상기 신뢰 레벨을 증가시키는 수단을 포함한다.
예 61은 예 60의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 수단을 추가로 포함한다.
예 62는 예 60 및 61 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 수단은 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 신뢰 값을 상기 최소값으로 리셋하는 수단을 포함한다.
예 63은 예 60-62 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 수단은 상기 신뢰 레벨을 리셋하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 선택을 재시작하는 수단을 추가로 포함한다.
예 64는 예 60-63 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 수단은 상기 대상 컴퓨팅 디바이스의 비휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 비휘발성 메모리 로그에 로그하는 수단을 포함한다.
예 65는 예 60-64 중 어느 하나의 주제를 포함하고, 상기 비휘발성 메모리에 대해 이루어진 변경들을 로그하는 수단은 비휘발성 메모리 위치의 이전 값을 상기 비휘발성 메모리 로그에 저장하는 수단을 포함한다.
예 66은 예 60-65 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 수단은 상기 대상 컴퓨팅 디바이스의 휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 휘발성 메모리 로그에 로그하는 수단을 추가로 포함한다.
예 67은 예 60-66 중 어느 하나의 주제를 포함하고, 상기 휘발성 메모리에 대해 이루어진 변경들을 로그하는 수단은 휘발성 메모리 위치의 새로운 값을 상기 휘발성 메모리 로그에 저장하는 수단을 포함한다.
예 68은 예 60-67 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 수단은: 상기 트랜잭션을 커밋하려고 시도하는 것에 응답하여 상기 비휘발성 메모리에 저장된 커밋 상태 플래그를 진행 중으로 업데이트하는 수단; 상기 커밋 상태 플래그를 진행 중으로 업데이트하는 것에 응답하여 상기 휘발성 메모리 로그로부터의 변경들을 상기 비휘발성 메모리에 저장된 섀도 휘발성 메모리 복사본에 복사하는 수단; 상기 휘발성 메모리 로그로부터의 변경들을 상기 섀도 휘발성 메모리 복사본에 복사하는 것에 응답하여 상기 커밋 상태 플래그를 완료로 업데이트하는 수단을 포함한다.
예 69는 예 60-68 중 어느 하나의 주제를 포함하고, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 수단을 추가로 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 수단은: 상기 커밋 상태 플래그가 진행 중인지를 결정하는 수단; 상기 커밋 상태 플래그가 진행 중이 아니라고 결정하는 것에 응답하여 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하는 수단; 상기 휘발성 메모리 섀도 복사본에 기초하여 상기 휘발성 메모리를 복원하는 수단; 및 상기 휘발성 메모리를 복원하는 것에 응답하여 상기 신뢰 레벨을 상기 최소값으로 리셋하는 수단을 포함한다.
예 70은 예 60-69 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 수단은: 상기 커밋 상태 플래그가 진행 중이 아니라고 결정하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션의 실행을 재시작하는 수단; 및 상기 커밋 상태 플래그가 진행 중이라고 결정하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려는 시도를 재시작하는 수단을 추가로 포함한다.
예 71은 예 60-70 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 수단은: 상기 커밋 상태 플래그가 성공적으로 업데이트되었는지를 결정하는 수단; 및 상기 커밋 상태가 성공적으로 업데이트되지 않았다고 결정하는 것에 응답하여 상기 비휘발성 메모리에 저장된 업데이트 상태 로그로부터 상기 커밋 상태 플래그를 복원하는 수단을 추가로 포함하고; 상기 커밋 상태 플래그가 진행 중인지를 결정하는 수단은 상기 커밋 상태가 성공적으로 업데이트되었다고 결정하는 것에 응답하여 상기 커밋 상태 플래그가 진행 중인지를 결정하는 수단을 포함한다.
예 72는 예 60-71 중 어느 하나의 주제를 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 수단은 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하는 것에 응답하여 상기 비휘발성 메모리 로그 및 상기 휘발성 메모리 로그를 클리어하는 수단을 추가로 포함한다.

Claims (25)

  1. 대상 디바이스에 대한 코드를 컴파일하기 위한 컴퓨팅 디바이스로서, 상기 컴퓨팅 디바이스는:
    (i) 컴퓨터 프로그램을 제1 트랜잭션 시퀀스로 변환하고 (ii) 상기 제1 트랜잭션 시퀀스를 합체하여 제2 트랜잭션 시퀀스를 생성하는 컴파일러 분석 모듈 - 상기 제2 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성(granularity)보다 더 조대한(coarser) 세분성을 가짐 -; 및
    상기 대상 디바이스에 대한 실행 가능 프로그램을 생성하는 코드 생성 모듈
    을 포함하고,
    상기 실행 가능 프로그램은 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하고, 상기 실행 가능 프로그램은 이용 가능한 에너지에 기초하여 런타임시 상기 제1 트랜잭션 시퀀스와 상기 제2 트랜잭션 시퀀스 중에서 선택하는, 컴퓨팅 디바이스.
  2. 제1항에 있어서, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 것은:
    상기 컴퓨터 프로그램을 정적으로 분석하여 기본 블록 시퀀스를 식별하는 것 - 상기 제1 트랜잭션 시퀀스의 각 트랜잭션은 기본 블록을 포함함 -; 및
    상기 기본 블록 시퀀스의 각 기본 블록에 대해, 대응하는 기본 블록의 각 저장 연산에 로그 연산을 인스트루먼트(instrument)하고 트랜잭션 커밋 연산을 상기 대응하는 기본 블록에 추가하는 것을 포함하는, 컴퓨팅 디바이스.
  3. 제2항에 있어서, 상기 제1 트랜잭션 시퀀스를 합체하는 것은 상기 제1 트랜잭션 시퀀스의 제1 기본 블록을 상기 제1 기본 블록에 의해 지배되는 상기 제1 트랜잭션 시퀀스의 하나 이상의 기본 블록과 결합하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 것을 포함하는, 컴퓨팅 디바이스.
  4. 제1항에 있어서, 상기 제1 트랜잭션 시퀀스를 합체하는 것은:
    상기 컴퓨터 프로그램의 루프를 타일링하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 것; 및
    관련 없는 로그 연산들을 제거하기 위해 상기 제2 트랜잭션 시퀀스의 생존성 분석을 수행하는 것을 포함하는, 컴퓨팅 디바이스.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 프로파일러 모듈을 추가로 포함하고,
    상기 컴파일러 분석 모듈은 추가로, 상기 제1 트랜잭션 시퀀스를 합체하여 제3 트랜잭션 시퀀스를 생성하고, 상기 제3 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 그리고 상기 제2 트랜잭션 시퀀스의 세분성과는 다른 세분성을 갖고;
    상기 프로파일러 모듈은 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 에너지 프로파일을 수집하고, 상기 에너지 프로파일은 대응하는 트랜잭션 시퀀스의 트랜잭션을 실행하기 위해 상기 대상 디바이스에 의해 소비된 에너지를 나타내고;
    상기 코드 생성 모듈은 상기 에너지 프로파일들에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 트랜잭션 시퀀스를 선택하고;
    상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 것 - 상기 실행 가능 프로그램은 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함함 - 은 상기 제2 트랜잭션 시퀀스의 선택에 응답하여 상기 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 것을 포함하는, 컴퓨팅 디바이스.
  6. 제5항에 있어서,
    상기 프로파일러 모듈은 추가로, 상기 대상 디바이스에 관련하여 이용 가능한 에너지 프로파일을 수집하고;
    상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 것은 상기 이용 가능한 에너지 프로파일에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 것을 추가로 포함하는, 컴퓨팅 디바이스.
  7. 제5항에 있어서, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 상기 에너지 프로파일을 수집하는 것은:
    상기 대상 디바이스에 의한 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스의 실행을 시뮬레이트하는 것; 또는 대상 디바이스로부터 에너지 프로파일 데이터를 수신하는 것을 포함하는, 컴퓨팅 디바이스.
  8. 일관된 코드 실행을 위한 대상 컴퓨팅 디바이스로서, 상기 대상 컴퓨팅 디바이스는:
    신뢰 레벨을 최소값으로 초기화하는 전력 관리 모듈 - 상기 신뢰 레벨은 상기 대상 컴퓨팅 디바이스의 에너지 하베스팅 유닛에 의해 생성된 이용 가능한 에너지를 나타냄 -; 및
    (i) 실행 가능 프로그램으로부터 활성 트랜잭션 시퀀스를 상기 활성 트랜잭션 시퀀스의 세분성 및 상기 신뢰 레벨에 기초하여 선택하고 - 상기 실행 가능 프로그램은 복수의 트랜잭션 시퀀스를 포함하고, 상기 복수의 트랜잭션의 각 트랜잭션 시퀀스는 상이한 세분성을 가짐 -, (ii) 상기 활성 트랜잭션 시퀀스의 선택에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 코드 실행 모듈
    을 포함하고;
    상기 전력 관리 모듈은 추가로 (i) 상기 트랜잭션의 실행에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하고, (ii) 상기 트랜잭션을 커밋하려는 시도에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었는지를 결정하고, (iii) 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었다는 결정에 응답하여 상기 신뢰 레벨을 증가시키는 것인, 대상 컴퓨팅 디바이스.
  9. 제8항에 있어서, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다는 결정에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 복구 모듈을 추가로 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은 (i) 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다는 결정에 응답하여 상기 신뢰 레벨을 상기 최소값으로 리셋하고 (ii) 상기 신뢰 레벨의 리셋에 응답하여 상기 활성 트랜잭션 시퀀스의 선택을 재시작하는 것을 포함하는, 대상 컴퓨팅 디바이스.
  10. 제8항 또는 제9항에 있어서, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 것은:
    상기 대상 컴퓨팅 디바이스의 비휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 비휘발성 메모리 로그에 로그하고 - 상기 비휘발성 메모리에 대해 이루어진 변경들을 로그하는 것은 비휘발성 메모리 위치의 이전 값을 상기 비휘발성 메모리 로그에 저장하는 것을 포함함 -;
    상기 대상 컴퓨팅 디바이스의 휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 휘발성 메모리 로그에 로그하는 것을 포함하고, 상기 휘발성 메모리에 대해 이루어진 변경들을 로그하는 것은 휘발성 메모리 위치의 새로운 값을 상기 휘발성 메모리 로그에 저장하는 것을 포함하는, 대상 컴퓨팅 디바이스.
  11. 제10항에 있어서, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 것은:
    상기 트랜잭션을 커밋하려는 시도에 응답하여 상기 비휘발성 메모리에 저장된 커밋 상태 플래그를 진행 중(in-progress)으로 업데이트하고;
    상기 커밋 상태 플래그를 진행 중으로 업데이트하는 것에 응답하여 상기 휘발성 메모리 로그로부터의 변경들을 상기 비휘발성 메모리에 저장된 섀도 휘발성 메모리 복사본에 복사하고;
    상기 휘발성 메모리 로그로부터의 변경들을 상기 섀도 휘발성 메모리 복사본에 복사하는 것에 응답하여 상기 커밋 상태 플래그를 완료로 업데이트하는 것을 포함하는, 대상 컴퓨팅 디바이스.
  12. 제11항에 있어서, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다는 결정에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 복구 모듈을 추가로 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 것은:
    상기 커밋 상태 플래그가 진행 중인지를 결정하고;
    상기 커밋 상태 플래그가 진행 중이 아니라는 결정에 응답하여 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하고;
    상기 섀도 휘발성 메모리 복사본에 기초하여 상기 휘발성 메모리를 복원하고;
    상기 휘발성 메모리의 복원에 응답하여 상기 신뢰 레벨을 상기 최소값으로 리셋하고;
    상기 커밋 상태 플래그가 진행 중이 아니라는 결정에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션의 실행을 재시작하고;
    상기 커밋 상태 플래그가 진행 중이라는 결정에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려는 시도를 재시작하는 것을 포함하는, 대상 컴퓨팅 디바이스.
  13. 대상 디바이스에 대한 코드를 컴파일하기 위한 방법으로서, 상기 방법은:
    컴퓨팅 디바이스에 의해, 컴퓨터 프로그램을 제1 트랜잭션 시퀀스로 변환하는 단계;
    상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스를 합체하여 제2 트랜잭션 시퀀스를 생성하는 단계 - 상기 제2 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 세분성을 가짐 -; 및
    상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하는 상기 대상 디바이스에 대한 실행 가능 프로그램을 생성하는 단계
    를 포함하고,
    상기 실행 가능 프로그램은 이용 가능한 에너지에 기초하여 런타임시 상기 제1 트랜잭션 시퀀스와 상기 제2 트랜잭션 시퀀스 중에서 선택하는, 방법.
  14. 제13항에 있어서, 상기 컴퓨터 프로그램을 상기 제1 트랜잭션 시퀀스로 변환하는 단계는:
    상기 컴퓨터 프로그램을 정적으로 분석하여 기본 블록 시퀀스를 식별하는 단계 - 상기 제1 트랜잭션 시퀀스의 각 트랜잭션은 기본 블록을 포함함 -; 및
    상기 기본 블록 시퀀스의 각 기본 블록에 대해, 대응하는 기본 블록의 각 저장 연산에 로그 연산을 인스트루먼트하고 트랜잭션 커밋 연산을 상기 대응하는 기본 블록에 추가하는 단계를 포함하는, 방법.
  15. 제14항에 있어서, 상기 제1 트랜잭션 시퀀스를 합체하는 단계는 상기 제1 트랜잭션 시퀀스의 제1 기본 블록을 상기 제1 기본 블록에 의해 지배되는 상기 제1 트랜잭션 시퀀스의 하나 이상의 기본 블록과 결합하여 상기 제2 트랜잭션 시퀀스의 더 조대한 입도의 트랜잭션을 생성하는 단계를 포함하는, 방법.
  16. 제13항에 있어서,
    상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스를 합체하여 제3 트랜잭션 시퀀스를 생성하는 단계 - 상기 제3 트랜잭션 시퀀스는 상기 제1 트랜잭션 시퀀스의 세분성보다 더 조대한 그리고 상기 제2 트랜잭션 시퀀스의 세분성과는 다른 세분성을 가짐 -;
    상기 컴퓨팅 디바이스에 의해, 상기 제1 트랜잭션 시퀀스, 상기 제2 트랜잭션 시퀀스, 및 상기 제3 트랜잭션 시퀀스 각각에 대해 상기 대상 디바이스에 관련하여 에너지 프로파일을 수집하는 단계 - 상기 에너지 프로파일은 대응하는 트랜잭션 시퀀스의 트랜잭션을 실행하기 위해 상기 대상 디바이스에 의해 소비된 에너지를 나타냄 -; 및
    상기 컴퓨팅 디바이스에 의해, 상기 에너지 프로파일들에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 트랜잭션 시퀀스를 선택하는 단계
    를 추가로 포함하고;
    상기 제1 트랜잭션 시퀀스 및 상기 제2 트랜잭션 시퀀스를 포함하는 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 단계는 상기 제2 트랜잭션 시퀀스를 선택하는 것에 응답하여 상기 대상 디바이스에 대한 상기 실행 가능 프로그램을 생성하는 단계를 포함하는, 방법.
  17. 제16항에 있어서,
    상기 컴퓨팅 디바이스에 의해, 상기 대상 디바이스에 관련하여 이용 가능한 에너지 프로파일을 수집하는 단계를 추가로 포함하고;
    상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 단계는 상기 이용 가능한 에너지 프로파일에 기초하여 상기 제2 트랜잭션 시퀀스와 상기 제3 트랜잭션 시퀀스 중에서 상기 트랜잭션 시퀀스를 선택하는 단계를 추가로 포함하는, 방법.
  18. 일관된 코드 실행을 위한 방법으로서, 상기 방법은:
    대상 컴퓨팅 디바이스에 의해, 신뢰 레벨을 최소값으로 초기화하는 단계 - 상기 신뢰 레벨은 상기 대상 컴퓨팅 디바이스의 에너지 하베스팅 유닛에 의해 생성된 이용 가능한 에너지를 나타냄 -;
    상기 대상 컴퓨팅 디바이스에 의해, 실행 가능 프로그램으로부터 활성 트랜잭션 시퀀스를 상기 활성 트랜잭션 시퀀스의 세분성 및 상기 신뢰 레벨에 기초하여 선택하는 단계 - 상기 실행 가능 프로그램은 복수의 트랜잭션 시퀀스를 포함하고, 상기 복수의 트랜잭션의 각 트랜잭션 시퀀스는 상이한 세분성을 가짐 -;
    상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스를 선택하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 단계;
    상기 대상 컴퓨팅 디바이스에 의해, 상기 트랜잭션을 실행하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 단계;
    상기 대상 컴퓨팅 디바이스에 의해, 상기 트랜잭션을 커밋하려고 시도하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었는지를 결정하는 단계; 및
    상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되었다고 결정하는 것에 응답하여 상기 신뢰 레벨을 증가시키는 단계를 포함하는, 방법.
  19. 제18항에 있어서, 상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 단계를 추가로 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는 (i) 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 신뢰 레벨을 상기 최소값으로 리셋하는 단계 및 (ii) 상기 신뢰 레벨을 리셋하는 단계에 응답하여 상기 활성 트랜잭션 시퀀스의 선택을 재시작하는 단계를 포함하는, 방법.
  20. 제18항에 있어서, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 실행하는 단계는:
    상기 대상 컴퓨팅 디바이스의 비휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 비휘발성 메모리 로그에 로그하는 단계 - 상기 비휘발성 메모리에 대해 이루어진 변경들을 로그하는 단계는 비휘발성 메모리 위치의 이전 값을 상기 비휘발성 메모리 로그에 저장하는 단계를 포함함 -; 및
    상기 대상 컴퓨팅 디바이스의 휘발성 메모리에 대해 이루어진 변경들을 상기 비휘발성 메모리에 저장된 휘발성 메모리 로그에 로그하는 단계를 포함하고, 상기 휘발성 메모리에 대해 이루어진 변경들을 로그하는 단계는 휘발성 메모리 위치의 새로운 값을 상기 휘발성 메모리 로그에 저장하는 단계를 포함하는, 방법.
  21. 제20항에 있어서, 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려고 시도하는 단계는:
    상기 트랜잭션을 커밋하려고 시도하는 단계에 응답하여 상기 비휘발성 메모리에 저장된 커밋 상태 플래그를 진행 중으로 업데이트하는 단계;
    상기 커밋 상태 플래그를 진행 중으로 업데이트하는 단계에 응답하여 상기 휘발성 메모리 로그로부터의 변경들을 상기 비휘발성 메모리에 저장된 섀도 휘발성 메모리 복사본에 복사하는 단계; 및
    상기 휘발성 메모리 로그로부터의 변경들을 상기 섀도 휘발성 메모리 복사본에 복사하는 단계에 응답하여 상기 커밋 상태 플래그를 완료로 업데이트하는 단계를 포함하는, 방법.
  22. 제21항에 있어서, 상기 대상 컴퓨팅 디바이스에 의해, 상기 활성 트랜잭션 시퀀스의 트랜잭션이 성공적으로 커밋되지 않았다고 결정하는 것에 응답하여 상기 실행 가능 프로그램의 실행을 복구하는 단계를 추가로 포함하고, 상기 실행 가능 프로그램의 실행을 복구하는 단계는:
    상기 커밋 상태 플래그가 진행 중인지를 결정하는 단계;
    상기 커밋 상태 플래그가 진행 중이 아니라고 결정하는 것에 응답하여 상기 비휘발성 메모리 로그에 기초하여 상기 비휘발성 메모리를 복원하는 단계;
    상기 섀도 휘발성 메모리 복사본에 기초하여 상기 휘발성 메모리를 복원하는 단계;
    상기 휘발성 메모리를 복원하는 단계에 응답하여 상기 신뢰 레벨을 상기 최소값으로 리셋하는 단계;
    상기 커밋 상태 플래그가 진행 중이 아니라고 결정하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션의 실행을 재시작하는 단계; 및
    상기 커밋 상태 플래그가 진행 중이라고 결정하는 것에 응답하여 상기 활성 트랜잭션 시퀀스의 트랜잭션을 커밋하려는 시도를 재시작하는 단계를 포함하는, 방법.
  23. 컴퓨팅 디바이스로서,
    프로세서; 및
    상기 프로세서에 의해 실행될 때 상기 컴퓨팅 디바이스로 하여금 제13항 내지 제22항 중 어느 한 항의 방법을 수행하게 하는 복수의 명령어가 저장되어 있는 메모리를 포함하는, 컴퓨팅 디바이스.
  24. 실행되는 것에 응답하여 컴퓨팅 디바이스가 제13항 내지 제22항 중 어느 한 항의 방법을 수행하는 것을 야기하는 저장된 복수의 명령어를 포함하는 하나 이상의 머신 판독가능 저장 매체.
  25. 삭제
KR1020187001105A 2015-08-13 2016-07-13 에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술 KR102584950B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562204815P 2015-08-13 2015-08-13
US62/204,815 2015-08-13
US14/998,273 2015-12-26
US14/998,273 US9690360B2 (en) 2015-08-13 2015-12-26 Technologies for discontinuous execution by energy harvesting devices
PCT/US2016/042086 WO2017027159A1 (en) 2015-08-13 2016-07-13 Technologies for discontinuous execution by energy harvesting devices

Publications (2)

Publication Number Publication Date
KR20180030523A KR20180030523A (ko) 2018-03-23
KR102584950B1 true KR102584950B1 (ko) 2023-10-06

Family

ID=57983945

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187001105A KR102584950B1 (ko) 2015-08-13 2016-07-13 에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술

Country Status (3)

Country Link
US (2) US9690360B2 (ko)
KR (1) KR102584950B1 (ko)
WO (1) WO2017027159A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160335580A1 (en) * 2015-05-13 2016-11-17 Wal-Mart Stores, Inc. Systems, devices, and methods for configuring a graphical user interface
US11709785B2 (en) * 2020-06-26 2023-07-25 Western Digital Technologies, Inc. Just-in-time post-processing computation capabilities for encrypted data

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060248524A1 (en) 2005-05-02 2006-11-02 Intermec Ip Corp. System and method for common file installation
US20080195856A1 (en) 2006-06-30 2008-08-14 Simon Andrew Ford Target device programmer
US20110191753A1 (en) 2002-07-10 2011-08-04 National Instruments Corporation Incremental deployment and execution of a program on an embedded device
US20130144793A1 (en) 2011-12-01 2013-06-06 Broadcom Corporation Systems and Methods for Providing NFC Secure Application Support in Battery On and Battery Off Modes
US20130212567A1 (en) 2012-02-13 2013-08-15 Microsoft Corporation Generating and caching software code

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8321850B2 (en) * 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US20120096292A1 (en) * 2010-10-15 2012-04-19 Mosaid Technologies Incorporated Method, system and apparatus for multi-level processing
US8893104B2 (en) * 2012-01-26 2014-11-18 Qualcomm Incorporated Method and apparatus for register spill minimization

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110191753A1 (en) 2002-07-10 2011-08-04 National Instruments Corporation Incremental deployment and execution of a program on an embedded device
US20060248524A1 (en) 2005-05-02 2006-11-02 Intermec Ip Corp. System and method for common file installation
US20080195856A1 (en) 2006-06-30 2008-08-14 Simon Andrew Ford Target device programmer
US20130144793A1 (en) 2011-12-01 2013-06-06 Broadcom Corporation Systems and Methods for Providing NFC Secure Application Support in Battery On and Battery Off Modes
US20130212567A1 (en) 2012-02-13 2013-08-15 Microsoft Corporation Generating and caching software code

Also Published As

Publication number Publication date
US20170357306A1 (en) 2017-12-14
KR20180030523A (ko) 2018-03-23
US9690360B2 (en) 2017-06-27
US20170045927A1 (en) 2017-02-16
US10324520B2 (en) 2019-06-18
WO2017027159A1 (en) 2017-02-16

Similar Documents

Publication Publication Date Title
Hosek et al. Safe software updates via multi-version execution
US10585753B2 (en) Checkpoint triggering in a computer system
US20140019735A1 (en) Computer Processor Providing Exception Handling with Reduced State Storage
CN102207881A (zh) 一种基于Android的操作系统快速启动方法
US10831616B2 (en) Resilient programming frameworks for iterative computations
KR101696490B1 (ko) 부분 리부팅 복구 장치 및 방법
US20110246823A1 (en) Task-oriented node-centric checkpointing (toncc)
CN101470622B (zh) 模拟装置以及虚拟化方法
KR20110136639A (ko) 스냅샷 이미지의 동기화 장치 및 방법
Choi et al. Compiler-directed high-performance intermittent computation with power failure immunity
KR20150129327A (ko) 파이프라이닝된 소프트웨어의 동적 최적화
KR102584950B1 (ko) 에너지 하베스팅 디바이스에 의한 불연속 실행을 위한 기술
KR102022481B1 (ko) Gpu 사용량을 이용한 고성능 컴퓨팅 시스템의 체크포인트 생성 방법
JP2013109652A (ja) コンパイラ、そのコンパイラによって作成されたプログラムモジュールの制御方法、及び、その制御方法を実現する制御装置
Zou et al. Strongupdate: an immediate dynamic software update system for multi-threaded applications
US9542188B2 (en) Hardware debugging apparatus and method for software pipelined program
Ahmad Compiler Support for Long-life, Low-overhead Intermittent Computation on Energy Harvesting Flash-based Devices
Bhatti Back to the future: sustainable transiently powered embedded systems: Ph. D. forum abstract
CN116414586A (zh) 应用程序容错处理方法、装置及存储介质
KR20230123761A (ko) 낸드 플래시 메모리를 이용하여 딥 뉴럴 네트워크 모델을 학습시키는 가속기 시스템 및 그 동작 방법
CN118193168A (zh) 一种任务分解方法、间歇计算方法及系统
Bhatti Ph. D. Forum Abstract: Back to the Future-Sustainable Transiently Powered Embedded Systems
KR20190054878A (ko) 프로그램 동적 실행 장치 및 방법
Jo et al. Design for most compatible booting model of integrated memory-disk based on ARM linux
WO2017019086A1 (en) Preserving virtual machine data

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right