새로 다시 읽기 시작한 책들..

예전에 1판 시절에 읽었단 “writing testbenches: functional verification of HDL models”라는 책을 다시 읽고 있습니다.

이 책은 검증 전반에 대한 설명도 (간략하나마) 잘 되어 있고, 여러 검증 언어와 HDL을 통하여 functional verification을 수행하는 여러가지 방법에 대하여 예제코드와 함께 잘 설명하고 있습니다.
간혹 예제 코드에 오류가 있는 관계로 “예제를 신뢰하지는 마세요”라고 이야기 하곤하지만, 사용된 기법들중 몇몇은 아주 유용합니다.

2판을 구입한지는 상당한 시간이 되었습니다만, 그동안 잠깐 훓어보고 책장에서 잠자고 있었던 것인데..
업무상의 필요에 따라 다시 꺼내서 좀 차분히 읽어보고 있습니다.

1판을 한번 읽었던 관계로, 읽으면서 마음속에서 ‘이 부분은 읽었던 거니까 넘어가자 넘어가자..’ 이런 생각이 들때가 있는데, 실제로 차분히 읽어보면 상당 부분을 잊어서(머리가 나쁜 관계로..), 다시 읽는 것이 아주 유용합니다.
스킵하면서 대충읽으려는 유혹을 벗어나는 것이 가장 힘듭니다.

  얼마전에도 제가 읽고 있는 책으로 말씀드렸습니다만, 추석 연휴라는 좋은 기회에 드디어 다 읽게 되었습니다. 사실 저야 프로그래머가 아니므로 몇몇 내용은 직접적인 관련이 없었습니다만, 전반적으로 작업하는 방법에 있어서 많은 것을 배웠습니다.
그동안 경험에 의해서알고 짐작하고 있던 작업 방식도 몇가지 더 체계적으로 바뀌었습니다.

최근에는 그동안 상대적으로 좀 덜 읽었던 검증 관련 책을 다시 읽어야 할 듯 합니다. 열심히 읽고, 같이 공유할 수 있는 부분이 있다면 포스팅하도록 하겠습니다.
혹은 책 읽기가 잘 안될때 “책읽기 독려용” 내용 정리 포스팅이 올라올수도 있겠습니다. ^^;

Linux 커널에 실시간 기능이 추가되다!

[[Embedded system]]에서 많이 사용되는 [[RTOS]]들이 있지만, 고성능 기기들에서 요즘에 관심을 끄는 OS는 아무래도 [[Linux]]와 [[WindowsCE]]가 아닌가 싶습니다.

두 가지는 OS는 desktop에서의 탄탄한 지원을 바탕으로 embedded까지 내려왔는데, 사실 real time기능이 약하다는 단점을 지니고 있었습니다.
linux의 경우 real time기능을 강화하기 위하여 [[RTLinux]]나 [[montavista]]등의 real time kernel patch가 적용된 버젼들이 있었습니다.

Linux Kernel 2.6부터 embedded processor들에 대한 지원 부분이 본격적으로 강화되면서, [[MMU]]없는 Linux도 가능해졌고(기존에 [[uCLinux]]가 있기는 합니다만..), EETimes에 따르면 이번에 발표된 2.6.18 kernel에서는 real-time feature가 추가되었다고 합니다.
추가된 real-time feature로는 우선순위가 역전되는 것을 방지해주는 “priority inheritance” 지원, 모든 아키텍쳐에 대한 generic interrupt handling layer의 지원이 있다고 하네요..

저희 회사 소프트웨어팀도 바빠지겠군요.

Power6의 십진 연산은 DFP입니다.

아래글에서 적었던 MPF fall에서 발표된 [[Power6]]가 십진 연산을 지원한다는 ZDnet의 기사(번역된 한글 기사도 있습니다만)는 단지, 십진 연산이라는 표현만 있어서 그 내용이 아주 궁금했었죠.

십진 연산만을 생각하자면, [[IBM]]에서는 정수 연산에 대하여 예전부터 [[BCD]] 연산([[binary-coded decima]])으로 10진 연산을 적용했었기 때문에 별로 특별한 내용은 아니었습니다. (게다가 예전 [[ENIAC]]시절부터 10진 연산은 사용되었죠) 따라서, 뭔가 새로운 기법이 나온것은 같은데 실체가 상당히 궁금했습니다.

여러 웹사이트와 논문을 뒤적인 결과 드디어 실체를 찾을수 있었는데요, 이번에 적용된 10진 연산은 [[floating point]] 연산에 대한 이야기입니다. 이는 2003년의 ARITH16에 발표된 “Decimal Floating-Point: Algoritm for Computers“라는 논문을 기반으로 하고 있으며, 이에 대한 전반적인 내용은 IBM 웹페이지에 잘 나와 있습니다.
이는 10진수 기반의 Floating point연산(이후 DFP) 방법에 대한 내용인데, 대략적으로 살펴보니 mantisa(부동 소수점에서 지수 부분이 아닌, 유효숫자를 표시하는 부분) 부분을 binary가 아닌 compressed BCD로 표현하는 방법과 연산에 대해서 기술하고 있는 것 같습니다.
(컴퓨터에서 floating point 연산은 모두 [[IEEE-754]]라는 복잡한 표준을 따르고 있는데, 이 표준에 대하여 decimal mode를 추가하는 IEEE-754 revision(이후 [[IEEE 754r]]) 작업이 진행중이라고 합니다. 사실 IEEE 754 표준은 그 자체가 복잡해서 많은 연구자들의 머리를 아프게 합니다. 저도 마찬가지였구요. 특히 복잡한 라운딩 모드들 ^^;)

논문에 따르면 DFP 기법은 아주 새로운 것은 아니고, 754표준을 따를 필요성이 적은 휴대용 전자 계산기 종류에서는 (최근들어) 대부분 DFP를 따르고 있다고 하네요. 하지만, 위의 IBM 웹페이지를 따르면 프로세서에 적용되는건 아마도 Power6가 최초인가 봅니다.

프로세서에서는 기본적으로 포맷의 호환성으로 고려해야 할테니 기본적으로 IEEE-754 호환 모드를 기본으로 하고, IEEE-754r을 위한 연산기를 준비하되, 이것은 특정 라이브러리를 통해서 호출되는 방식을 취하지 않을까 생각됩니다.

DFP에 대한 자세한 부분은 논문과 자료를 좀더 봐서, 머리속에서 정리가 된 후에 적겠습니다.

p.s. 나름대로 챙겨보는 논문집들이 ISCA, ASPLOS, MICRO, ARITH인데.. 어쩌다 빼먹었는지 모르겠네요. ㅠㅠ;