윈디하나의 누리사랑방. 이런 저런 얘기

글쓴시간
분류 기술,IT

Intel TSX

기다리고 기다리던 하스웰이 발매되었습니다. 가격은 3세대 프로세서와 비슷합니다. 경쟁자도 없으니 가격은 인텔 마음대로 결정해도 되겠죠.

이번 하스웰의 최대 이슈라고 보는게 TSX(Transactional Synchronization Extensions)입니다. RTM(Restricted Transactional Memory)의 하드웨어 구현인데, 여기에 Hardware Lock Elision도 추가했습니다. RTM은 IBM에서 작년에 그들의 슈퍼컴퓨터에 구현 해 놓았습니다만, 일반인용을 위한 기기에 넣은건 인텔의 하스웰이 최초입니다. AMD도 ASF(Advanced Synchronization Facility)라고 해서 뭔가 나오려고 하는거 같은데 아직 안나왔습니다. Oracle도 Memory Versioning라고 해서 뭔가 나올것 같은데 아직 안 나왔습니다.

예전에 Sun microsystems라는 곳에서 연구하던 것으로 알고 있는데요, 흐지부지 되면서 엔지니어들의 일부가 인텔로 옮겨간 걸로 알고 있습니다. (아님말고 ^^;) 그리고 하스웰에서 빛을 봤네요.

여태까지 동시성 프로그래밍을 위한 하드웨어 지원에는 CAS(Compare and Swap)나 LL/SC(Load-Link and Store-Conditional)가 있었는데, 여기에 더해 Transactional Memory이 추가된겁니다. 제가 알기론 하드웨어적으로는 동시성 제어에 거의 마지막 기술(더이상의 향상 여지가 없는 기술)로 알고 있습니다. 앞으로 개선하긴 하겠지만, 획기적인건 아니겠죠.

일단 구현은 L1, L2캐시의 캐시 코히런스 시스템을 이용했을 것으로 추측합니다. (공식적으로 인텔에서 이렇게 구현했다고는 안했지만, 공식 문서에 Read-Set, Write-Set이 나오는데 이게 L1, L2 캐시의 캐시 일치를 위해 만들어진거기도 합니다) 그렇다면 아마 트랜젝션 가능한 용량에 제한(L1 또는 L2캐시의 크기)이 있을 텐데요 자세한건 두고 봐야겠네요. 이제 발매되었으니 차츰차츰 분석해내겠죠.

현재 TSX는 인텔 컴파일러와 GCC 최신버전에서 지원 합니다.

이외에도 AVX 2 명령셋을 지원한다고 되어있긴 합니다만, 이건 별로 와닿지는 않네요.

만약 자바에서 지원한다면

 synchronized (aObject) {
  ...
 }

이 아니라

 transaction {
  ...
 } catch (TransactionException e) {
  실패시 코드
 }

처럼 코딩해도 되겠죠. 물론 아래것이 성능이 훨~씬 빠릅니다. 기대되네요.

----

2015.02.19 업데이트

하스웰/브로드웰의 TSX 에서 버그가 발견되었습니다. 타이밍 문제로 보입니다만, 결국 소프트웨어적으로 해결이 안되네요. 현재 인텔에서 배포한 최신 마이크로 코드를 사용하면 TSX를 비활성화 시킵니다. 2014.08 에 이미 패치가 발표되었네요. 결국 TSX는 다음 아키텍처에서 사용 가능할 것 같네요. 아쉽습니다.

----

2015.08.15 업데이트

Core M-5Y70 F0 스태핑 부터 해결되었다네요. 2014.11월에 출시되었습니다.

----

Intel® Architecture Instruction Set Extensions Programming Reference
http://software.intel.com/file/41604/319433-012a.pdf