LDPC...
on
LDPC(Low-Density Parity-Check) 코드가 60년대에 나왔다. 이게 실용화되기 어렵단 이유로 묻혀있다가 세상의 관심을 받기 시작한 건 2000년대 초반부터였고, 지금은 전 세계 전자기기 대부분에 응용되고 있다. HDD는 진작부터, SSD는 물론이고 일부 광통신이나 무선통신 장비에도 적용된다. 향후 양자컴퓨팅 장비에도 쓰일 정도니, 사실상 에러 정정 코드의 끝판왕이자 우리가 가야 할 단 하나의 길인 셈이다.
코딩 이론(Coding Theory) 과목을 들으면 가장 먼저 배우는 게 Systematic code다. 원래 데이터와 패리티가 나뉘는 구조라 그렇게 말하는데, 쉽게 말해 행렬 곱을 취하는 Linear code라고도 부른다. LDPC도 그중 하나다. 그러나, 사실 이게 워낙 기본적이다 보니, 한때는 “이게 성능이 좋긴 할까?”라며 의구심을 갖던 시절도 있었다. 에러 정정 코드와 그것을 응용한 토픽들이 워낙에 많았어서 이렇게 단순한 구조를 갖는 에러 정정 코드가 끝판왕일 거란 생각을 하지 못했다. 내가 학교에 있을 시절엔 Convolutional code, BCH, Reed-Solomon 또 한때 각광받던 Turbo code까지 쟁쟁한 경쟁자들이 있었으니까.
하지만 2000년대 중반을 지나면서 상황은 정리됐다. LDPC만큼 장점이 많고 성능이 뛰어난 코드가 없다 보니, 이제는 LDPC 말고는 사실상 논의되는 에러 정정 코드가 없을 정도로 압도적인 위치가 되었다. 대부분의 사람들은 별 관심 없겠지만.
요즘 세상은 모든 관심이 AI에 쏠려 있다. 전자전기컴퓨터 공학을 해도 AI를 빼면 이야기가 안 되는 세상이니, LDPC는 어느덧 고전 중의 고전이 되어버렸다. 요즘에도 이걸 연구하는 사람이 있을까 싶지만, 더구나 AI가 LDPC까지 설계한다는 소리도 들린다. 워낙 AI가 만병통치약이 된 시대니까 그럴만도 하다. 그러다 보니 비전공자나 일반인은 LDPC라는 용어를 들어볼 기회조차 없다. 이 재미있는 토픽을. 나는 우연한 기회로 이 분야에 제대로 꽂혔다.
파고들수록 재미있는 구석이 한둘이 아니다. 단순히 성능을 높이는 걸 넘어, 하드웨어 구현과 성능을 고려하여 parity check 행렬의 구조 설계하는 일련의 과정은 상당히 재미나다. binary에만 머무르지 않고 GF에서 확장시킬 수도 있고 그 과정에서 다양한 최신 컴퓨터 기술들을 접목시킬 수도 있다.
특히나 성능을 가늠하는 과정에서 만나는 DE(Density Evolution)\와 EXIT(Extrinsic Information Transfer)/PEXIT 분석도 재미있다. 수천 번의 반복 끝에 수렴 여부를 결정짓는 이 도구들을 이용해, 노이즈가 가득한 채널에서도 에러 없이 데이터를 복원해내는 최적의 임계값(Threshold)을 찾아내는 과정 역시 재미있다.
사실 재미난 토픽들이 한창 논의되던 시점에서 20년이나 지나 버린 지금 초심자가 되어 바라볼 수 있다는 게 때론 좀 한심하게 느껴질 때도 있지만, 아직 초심자이기에 해당 분야의 좋은 면만 보기도 하고, 배우거나 깨닫게 되는 작은 것 하나에도 느껴지는 즐거움이 꽤 크다. 20여 년 가까이 이 분야에 매진해온 이들에게는 지극히 식상하고 지루한 ‘노가다’의 반복일지 모르지만, 나에겐 무척 신선하고 재미있는 토픽이다.