트랜잭션 메모리

Transactional memory

컴퓨터 과학 및 공학에서 트랜잭션 메모리는 로드 및 저장 명령 그룹이 원자적인 방식으로 실행되도록 함으로써 동시 프로그래밍을 단순화하려고 시도합니다.동시 컴퓨팅에서 공유 메모리에 대한 액세스를 제어하기 위한 데이터베이스 트랜잭션과 유사한 동시성 제어 메커니즘입니다.트랜잭션 메모리 시스템은 로우 레벨 스레드 동기화의 대안으로 높은 수준의 추상화를 제공합니다.이 추상화를 통해 병렬 시스템에서 [1]공유 데이터를 동시에 읽고 쓸 수 있습니다.

동기

충돌이 있는 두 병렬 트랜잭션 간의 원자성

동시 프로그래밍에서는 병렬 스레드가 공유 리소스에 액세스를 시도할 때 동기화가 필요합니다.잠금과 같은 낮은 수준의 스레드 동기화 구조는 비관적이며 중요한 섹션 외부에 있는 스레드는 변경할 수 없습니다.잠금을 적용하고 해제하는 프로세스는 스레드 간의 경합이 거의 없는 워크로드에서 추가 오버헤드로 기능하는 경우가 많습니다.트랜잭션 메모리는 최소한의 [2]간섭으로 스레드를 병렬로 실행할 수 있도록 함으로써 최적의 동시성 제어를 제공합니다.트랜잭션 메모리 시스템의 목표는 원자성, 일관성 분리를 시행하여 트랜잭션으로 표시된 코드 영역을 투명하게 지원하는 것입니다.

트랜잭션은 충돌이 없는 한 변경을 실행하고 커밋할 수 있는 작업의 모음입니다.충돌이 감지되면 트랜잭션은 초기 상태(변경 전)로 돌아가 모든 충돌이 제거될 때까지 다시 실행됩니다.커밋이 성공하기 전에는 트랜잭션 내에서 조작의 결과는 순전히 추측에 불과합니다.데이터 손상을 방지하기 위해 작업을 직렬화하는 잠금 기반 동기화와는 달리, 공유 리소스를 수정하려는 작업이 거의 없는 한 트랜잭션은 추가적인 병렬 처리를 허용합니다.프로그래머는 록이나 록이 취득되는 순서를 명시적으로 특정할 책임이 없기 때문에 트랜잭션메모리를 사용하는 프로그램은 [2]교착 상태를 만들 수 없습니다.

트랜잭션 메모리는 프로그래머가 트랜잭션 블록 내에서 메서드를 묶을 수 있도록 함으로써 높은 수준의 프로그래밍 추상화를 제공합니다.올바른 구현은 트랜잭션을 거치지 않고 스레드 간에 데이터를 공유할 수 없도록 보장하고 연속적인 결과를 생성합니다.예를 들어, 코드는 다음과 같이 쓸 수 있습니다.

방어하다 송금_돈(from_account(계정), 어카운트, ):     한 계좌에서 다른 계좌로 돈을 이체하다."""     와 함께 거래.():         from_account(계정).균형. -=          어카운트.균형.   +=  

코드에서 "트랜잭션"에 의해 정의된 블록은 기본 트랜잭션 메모리 구현에 의해 원자성, 일관성 및 분리를 보장하며 프로그래머에게 투명하다.거래내 변수는 외부충돌로부터 보호되므로 정확한 금액이 이전되거나 아무런 조치도 취하지 않습니다.동시성 관련 버그는 다수의 트랜잭션을 사용하는 프로그램, 특히 언어에 의해 제공되는 라이브러리가 올바른 사용을 강제할 수 없는 소프트웨어 구현에서 여전히 발생할 수 있습니다.트랜잭션에서 발생한 버그는 트랜잭션 [2]내에 중단점을 배치할 수 없기 때문에 디버깅이 어려울 수 있습니다.

트랜잭션 메모리는 공유 메모리 추상화가 필요하다는 점에서 제한됩니다.트랜잭션 메모리 프로그램이 교착 상태를 발생시킬 수는 없지만 프로그램은 여전히 라이브록 또는 리소스 부족에 시달릴 수 있습니다.예를 들어, 더 긴 트랜잭션은 여러 개의 작은 트랜잭션에 대응하여 반복적으로 되돌아가 시간과 [2]에너지를 낭비할 수 있습니다.

하드웨어와 소프트웨어

읽기 및 쓰기 비트를 사용하는 하드웨어 트랜잭션 메모리

트랜잭션 메모리에서 원자성을 추상화하려면 충돌을 감지하고 공유 [3]데이터에 대한 변경을 원래대로 되돌리기 위한 하드웨어 메커니즘이 필요합니다.하드웨어 트랜잭션 메모리 시스템은 [4][5][6][7][8]트랜잭션을 지원하기 위해 프로세서, 캐시 및 버스 프로토콜의 수정을 포함할 수 있습니다.트랜잭션의 투기 값은 버퍼링되고 커밋 시간까지 다른 스레드에 표시되지 않아야 합니다.큰 버퍼는 기본 캐시 일관성 프로토콜을 통한 쓰기 전파를 방지하면서 추측 값을 저장하는 데 사용됩니다.기존에는 버퍼가 메모리 계층 내에서 스토어 큐나 캐시와 같은 다른 구조를 사용하여 구현되어 왔습니다.L2 캐시 등 프로세서에서 멀리 떨어져 있는 버퍼는 더 많은 추측값을 보유할 수 있습니다(최대 몇 MB).상업 [3]프로그램에서의 거래의 제한적인 사용으로 인해 버퍼의 최적 크기는 아직 논의 중이다.캐시 실장에서는 일반적으로 캐시 라인은 읽기 및 쓰기 비트로 증강됩니다.하드웨어 컨트롤러는 요구를 수신하면 이들 비트를 사용하여 경합을 검출합니다.병렬 트랜잭션에서 직렬성 충돌이 감지되면 투기 값은 폐기됩니다.캐시를 사용하면 캐시 라인의 세분화 [3]사용으로 인해 잘못된 충돌이 발생할 수 있습니다.많은 RISC 프로세서가 제공하는 Load-Link/Store-Conditional(LL/SC; 로드링크/스토어컨디셔닝)은 가장 기본적인 트랜잭션메모리로 간주됩니다.다만, 통상, LL/SC는 네이티브 머신 워드의 사이즈의 데이터로 동작하기 때문에,[4] 싱글 워드 트랜잭션만이 지원됩니다.하드웨어 트랜잭션 메모리는 다른 소프트웨어에 비해 최대의 퍼포먼스를 제공하지만, 현시점에서는 사용이 제한되고 있습니다.

소프트웨어 트랜잭션메모리는 소프트웨어 런타임라이브러리 또는 프로그래밍 [9]언어로 트랜잭션메모리 시멘틱스를 제공하며 최소한의 하드웨어 지원(일반적으로 원자 비교 및 스왑 조작 또는 동등한 기능)이 필요합니다.단점으로서 소프트웨어 구현에는 하드웨어 솔루션에 비해 성능 저하가 수반됩니다.하드웨어 액셀러레이션을 통해 소프트웨어 트랜잭션 메모리와 관련된 오버헤드를 줄일 수 있습니다.

(현재 구현에서는) 하드웨어 트랜잭션 메모리의 특성이 더 제한적이기 때문에 이를 사용하는 소프트웨어는 최대한의 이점을 얻기 위해 상당히 광범위한 조정이 필요할 수 있습니다.예를 들어 동적 메모리 할당자는 성능에 큰 영향을 미칠 수 있으며 마찬가지로 구조 패딩도 성능에 영향을 미칠 수 있습니다(캐시 정렬 및 잘못된 공유 문제를 유발함). 가상 시스템의 경우 다양한 백그라운드 스레드로 인해 예기치 않은 트랜잭션이 [10]중단될 수 있습니다.

역사

트랜잭션 메모리의 초기 구현 중 하나는 TransmetaCruseEfficeon 프로세서에 사용된 게이트 저장소 버퍼입니다.단, 이는 이진 변환을 위한 추측적 최적화를 촉진하기 위해 사용되었을 뿐이며, 추측적 멀티스레딩의 형태나 프로그래머에게 직접 노출되기 위해서가 아닙니다.또한 Azul Systems는 Java 어플라이언스를 가속화하기 위해 하드웨어 트랜잭션 메모리를 구현했지만,[11] 이는 마찬가지로 외부인으로부터 숨겨졌습니다.

Sun Microsystems는 하이엔드 Rock 프로세서에 하드웨어 트랜잭션 메모리와 제한된 형태의 투기성 멀티스레딩을 구현했습니다.이 구현은 하드웨어와 소프트웨어를 조합하여 트랜잭션을 처리하는 잠금 장치 및 보다 복잡한 하이브리드 트랜잭션 메모리 시스템에 사용할 수 있음을 증명했습니다.Rock 프로세서는 Oracle에 인수되기 직전인 2009년에 취소되었습니다.실제 제품은 출시되지 않았지만 연구자들은 [11]다수의 시제품 시스템을 이용할 수 있었습니다.

2009년 AMD는 매우 제한된 형식의 하드웨어 트랜잭션 메모리 지원을 제공하는 일련의 x86 확장 기능인 ASF(Advanced Synchronization Facility)를 제안했습니다.목표는 소프트웨어 트랜잭션 메모리 또는 잠금 없는 알고리즘과 같은 높은 수준의 동기화에 사용할 수 있는 하드웨어 프리미티브를 제공하는 것이었습니다.그러나 AMD는 ASF를 제품에 사용할지 여부와 사용할 경우 어떤 [11]기간에 사용할지는 발표하지 않았습니다.

최근 IBM은 2011년 Blue Gene/Q가 트랜잭션 메모리와 투기성 멀티스레딩 모두에 대해 하드웨어를 지원한다고 발표했습니다.트랜잭션메모리는 2가지 모드로 구성할 수 있습니다.첫 번째는 무질서 모드와 싱글버전 모드입니다.이 모드에서는, 1개의 트랜잭션으로부터의 기입에 의해서, 같은 메모리 주소를 읽어내는 트랜잭션과 경합합니다.두 번째 모드는 투기성 멀티스레딩용입니다.순서 있는 멀티버전 트랜잭션메모리를 제공합니다.추측 스레드는 동일한 메모리 주소의 다른 버전을 가질 수 있으며 하드웨어 구현에 따라 각 스레드의 사용 기간이 추적됩니다.젊은 스레드는 오래된 스레드(단, 그 반대)의 데이터에 액세스 할 수 있습니다.또, 같은 주소에의 기입은, 스레드 순서에 근거해 행해집니다.경우에 따라 스레드 간의 종속성으로 인해 이전 버전이 [11]중단될 수 있습니다.

인텔트랜잭션 동기 확장(TSX)은 일부 Skylake 프로세서에서 사용할 수 있습니다.HaswellBroadwell 프로세서에서도 이전에 구현되었지만 두 번 모두 구현에 결함이 있는 것으로 판명되어 TSX 지원이 비활성화되었습니다.TSX 사양에는 소프트웨어 개발자가 사용하기 위한 트랜잭션 메모리 API가 기술되어 있지만 기술적인 [11]구현에 대한 자세한 내용은 포함되어 있지 않습니다.ARM 아키텍처에도 같은 [12]확장이 있습니다.

GCC 4.7에서는 하이브리드 구현을 이용한 트랜잭션 메모리용 실험 라이브러리를 이용할 수 있습니다.Python의 PyPy 변종도 트랜잭션 메모리를 언어에 도입합니다.

사용 가능한 구현

「 」를 참조해 주세요.

레퍼런스

  1. ^ Harris, Tim; Larus, James; Rajwar, Ravi (2010-06-02). "Transactional Memory, 2nd edition". Synthesis Lectures on Computer Architecture. 5 (1): 1–263. doi:10.2200/S00272ED1V01Y201006CAC011. ISSN 1935-3235.
  2. ^ a b c d "Transactional Memory: History and Development". Kukuruku Hub. Retrieved 2016-11-16.
  3. ^ a b c Solihin, Yan (2016). Fundamentals of Parallel Multicore Architecture. Berkeley, California: Chapman & Hall. pp. 287–292. ISBN 978-1-4822-1118-4.
  4. ^ a b Herlihy, Maurice; Moss, J. Eliot B. (1993). "Transactional memory: Architectural support for lock-free data structures" (PDF). Proceedings of the 20th International Symposium on Computer Architecture (ISCA). pp. 289–300.
  5. ^ Stone, J.M.; Stone, H.S.; Heidelberger, P.; Turek, J. (1993). "Multiple Reservations and the Oklahoma Update". IEEE Parallel & Distributed Technology: Systems & Applications. 1 (4): 58–71. doi:10.1109/88.260295.
  6. ^ Hammond, L; Wong, V.; Chen, M.; Carlstrom, B.D.; Davis, J.D.; Hertzberg, B.; Prabhu, M.K.; Honggo Wijaya; Kozyrakis, C.; Olukotun, K. (2004). "Transactional memory coherence and consistency". Proceedings of the 31st annual International Symposium on Computer Architecture (ISCA). pp. 102–13. doi:10.1109/ISCA.2004.1310767.
  7. ^ Ananian, C.S.; Asanovic, K.; Kuszmaul, B.C.; Leiserson, C.E.; Lie, S. (2005). "Unbounded transactional memory". 11th International Symposium on High-Performance Computer Architecture. pp. 316–327. doi:10.1109/HPCA.2005.41. ISBN 0-7695-2275-0.
  8. ^ "LogTM: Log-based transactional memory" (PDF). WISC.
  9. ^ "The ATOMOΣ Transactional Programming Language" (PDF). Stanford.
  10. ^ Odaira, R.; Castanos, J. G.; Nakaike, T. (2013). "Do C and Java programs scale differently on Hardware Transactional Memory?". 2013 IEEE International Symposium on Workload Characterization (IISWC). p. 34. doi:10.1109/IISWC.2013.6704668. ISBN 978-1-4799-0555-3.
  11. ^ a b c d e David Kanter (2012-08-21). "Analysis of Haswell's Transactional Memory". Real World Technologies. Retrieved 2013-11-19.
  12. ^ "Arm releases SVE2 and TME for A-profile architecture - Processors blog - Processors - Arm Community". community.arm.com. Retrieved 2019-05-25.
  13. ^ "Transactional Memory Extension (TME) intrinsics". Retrieved 2020-05-05.
  14. ^ "IBM plants transactional memory in CPU". EE Times.
  15. ^ Brian Hall; Ryan Arnold; Peter Bergner; Wainer dos Santos Moschetta; Robert Enenkel; Pat Haugen; Michael R. Meissner; Alex Mericas; Philipp Oehler; Berni Schiefer; Brian F. Veale; Suresh Warrier; Daniel Zabawa; Adhemerval Zanella (2014). Performance Optimization and Tuning Techniques for IBM Processors, including IBM POWER8 (PDF). IBM Redbooks. pp. 37–40. ISBN 978-0-7384-3972-3.
  16. ^ Wei Li, IBM POWER8 프로세서 기반 시스템에서 IBM AIX를 위한 IBM XL 컴파일러 하드웨어 트랜잭션 메모리 내장 함수
  17. ^ "Power ISA Version 3.1". openpowerfoundation.org. 2020-05-01. Retrieved 2020-10-10.
  18. ^ Java on a 1000 Cores – YouTube 하드웨어/소프트웨어 공동 설계 이야기
  19. ^ "Control.Monad.STM". hackage.haskell.org. Retrieved 2020-02-06.
  20. ^ "STMX Homepage".
  21. ^ Wong, Michael. "Transactional Language Constructs for C++" (PDF). Retrieved 12 Jan 2011.
  22. ^ "Brief Transactional Memory GCC tutorial".
  23. ^ "C Dialect Options - Using the GNU Compiler Collection (GCC)".
  24. ^ "TransactionalMemory - GCC Wiki".
  25. ^ Rigo, Armin. "Using All These Cores: Transactional Memory in PyPy". europython.eu. Retrieved 7 April 2015.
  26. ^ "picotm - Portable Integrated Customizable and Open Transaction Manager".
  27. ^ "Concurrent::TVar".

추가 정보

  • Harris, Tim; Larus, James R.; Rajwar, Ravi (December 2010), Transactional Memory, 2nd edition, Synthesis Lectures on Computer Architecture, vol. 5, Morgan & Claypool, pp. 1–263, doi:10.2200/S00272ED1V01Y201006CAC011
  • McKenney, Paul E.; Michael, Maged M.; Triplett, Josh; Walpole, Jonathan (July 2010). "Why the grass may not be greener on the other side: a comparison of locking vs. transactional memory". SIGOPS Oper. Syst. Rev. New York, NY, USA: ACM. 44 (3): 93–101. doi:10.1145/1842733.1842749. ISSN 0163-5980.
  • Dave Dice, Yossi Lev, Mark Moir, Dan Nussbaum, Marrek Olszewski.(2009) "상용 하드웨어 트랜잭션 메모리 구현의 초기 경험"Sun Microsystems 기술 보고서(60페이지) SMLI TR-2009-180.ASPLOS'09 doi:10.1145/1508244.1508263에 쇼트버전이 표시되었습니다.
  • 에이미 왕, 매튜 가우데, 펑우, 호세 넬슨 아마랄, 마틴 오마흐트, 크리스토퍼 바튼, 라울 실버라, 메이지 마이클."트랜잭션 메모리에 대한 Blue Gene/Q 하드웨어 지원 평가"병렬 아키텍처 및 컴파일 기법에 관한 제21회 국제 회의의 진행에서, 페이지 127–136.ACM, 2012.
  • Jacobi, C., Slegel, T., & Greiner, D. (2012, 12월)"IBM System z를 위한 트랜잭션 메모리 아키텍처구현"마이크로아키텍처(MICRO), 2012년 제45회 연례 IEEE/ACM 국제 심포지엄(25-36페이지).IEEE.
  • 해롤드 W. 케인, 메이지 M.Michael, Brad Frey, Cathy May, Derek Williams 및 Hung Le. "파워 아키텍처의 트랜잭션 메모리에 대한 견고한 아키텍처 지원"ISCA '13 제40회 연례 컴퓨터 아키텍처 국제 심포지엄의 계속, ACM, 2013.doi:10.1145/2485922.2485942

외부 링크