코센 리포트



SDR에서 사용하는 프로그램들은 통신 기능에만 한정되기 때문에 실제로 멀티 코어 컴퓨터에서 병행 프로그램으로 문제되는 동기성이나 데이터 일관성은 사실 크게 대두되지 않는다. 따라서 어떤 면에서는 SDR이 멀티 코어의 장점을 그대로 이용할 수 있다고 할 수 있다. SDR에서의 문제점은 신호 처리가 제 시간에 빨리 이루어지도록 하는 것인데 이는 빠른 멀티 코어 컴퓨터로 특수한 통신 회로를 사용하지 않고도 가능하다. 통신 신호 처리의 속도는 멀티 코어 컴퓨터로 가능해졌지만, 멀티 코어화한 SDR에서 아직 처리해야 할 것은 송수신에 하드웨어로 사용하는 RF 부분이 제 시간에 신호를 보내고 받을 수 있도록 주기적으로 신호를 처리하는 부분이다.

자료제공 : KOSEN(한민족과학기술자네트워크)
글 : 김병국
한국과학기술정보연구원 / www.kisti.re.kr

멀티 코어(Multi-core) 컴퓨터

멀터 코어의 배경
지난 30년에 걸쳐 컴퓨터와 다른 전자 제품의 소형화가 가능했던 것은 같은 면적의 반도체에 집적되는 회로의 수가 기하학적인 수로 늘어났기 때문이다. 많이 알려진 무어의 법칙에 의하면 그림 1에서 볼 수 있듯이 같은 면적의 반도체에 집적되는 회로의 수는 1.5년에 두 배로 늘어났다. 이것이 1.5년마다 컴퓨터 성능이 약 두 배로 증가하는 근본적인 이유가 된다. 그렇지만 지금의 반도체 집적 능력에는 한계에 이르고 있는데, 이는 집적 밀도는 매 1.5년에 두 배로 늘어나지만 회로의 상태를 바꿔주는 클록 속도는 더 빨라지지 않기 때문이다.
현재 시중의 컴퓨터들은 2~3GHz 속도를 갖고 있지만 이것은 지난 10여 년 동안 크게 변하지 않았다(그림 2). 다시 말하면, 하드웨어의 발전은 더 많은 회로들을 집어넣을 수 있지만 그 회로들을 더 빨리 사용할 수 없다는 한계에 이른 것이다. 따라서 현재의 3GHz 컴퓨터를 12GHz로 빠르게 하기는 거의 불가능하며 이에 따라 3GHz 컴퓨터 네 개를 한 칩에 넣어서 12GHz 컴퓨터에 해당하는 성능을 이루고자 하는 것이 멀티 코어의 출발점이라고 할 수 있다.
예를 들어, 작은 코어에서 네 배의 면적을 가진 큰 코어로 집적했을 경우를 아래의 그림에 의해 살펴보자. 작은 코어에 비해 큰 코어가 비록 네 배의 면적을 가졌지만(따라서 4배에 해당하는 회로 수가 있지만), 회로 속도가 변하지 않기 때문에 큰 코어에서는 작은 코어에 비해 두 배의 성능밖에 낼 수 없게 된다. 이것은 큰 코어에 회로 수는 많아졌지만 실행에 필요한 데이터들을 코어 칩으로 가져오는 데는 한계가 있기 때문이다. 아래 그림에서 푸른색 부분이 캐시의 면적을 표시한다. 이때에 소모되는 전력을 보면 네 배의 코어는 작은 코어에 비해 네 배의 전력을 소모하게 된다. 즉, 전력 소모는 늘어나지만 그에 해당하는 성능은 못 미치게 된다. 그 외에도 집적 회로의 수가 네 배로 늘어나면 그 회로 설계의 복잡성에도 큰 어려움이 있다.
멀티 코어 조직은 큰 코어 면적에 작은 코어 회로를 반복함으로써 성능을 네 배로 늘리려는 방식이다. 성능을 네 배로 늘리는 데 있어 가장 중요한 부분이 캐시이다. 아래 그림에서 볼 수 있듯이 캐시가 각 코어마다 공급되기 때문에 네 배의 성능을 볼 수 있다.
이 글의 2절에서는 인텔 회사의 멀티 코어의 조직에 대해 살펴보고, 3절에서는 IBM을 비롯한 다른 회사의 멀티 코어 구조에 대해 간단히 살펴보도록 한다. 멀티 코어 컴퓨터 시대가 도래하면서 소프트웨어에도 큰 영향을 주게 되었는데 그것은 여러 프로세서들이 이미 제공되어 있어 소프트웨어도 병렬 실행이 가능하게 짜여져야 하기 때문이다. 이에 따라 제기되는 여러 가지 점들은 5절에서 살펴보기로 한다.

인텔 회사의 멀티 코어 컴퓨터 조직
인텔의 코어 조직은 펜티엄 IV의 넷버스트 조직과 셀러론의 이동성을 감안한 조직을 합치면서 새로운 성능을 더했다. 우선 코어2듀오의 두 개의 코어가 있을 때의 메모리 조직을 보면 두 개의 코어가 같이 사용하는 L2 캐시를 볼 수 있다. 스마트 캐시라고 불리는 이 기능은 각 코어에 있는 L1 캐시에 데이터를 보내기 전에 두 개의 코어에서 사용할 가능성이 있는 데이터를 L2 캐시에 미리 가져옴으로써 코어에서 데이터를 기다리는 시간을 단축시킬 수 있다. 한 코어에서 데이터를 사용하려면, 우선 그 코어에 있는 L1 캐시, 다른 코어에 있는 L1 캐시, 그러고도 데이터를 못 찾으면 L2 캐시를 찾게 된다.
하지만 L2 캐시도 같은 칩 안에 있기 때문에 10사이클 정도의 시간밖에 걸리지 않는다. 이와 달리, L2 캐시에서도 데이터가 없어서 칩 밖의 메모리로 가면 165사이클 이상의 시간이 소요된다.
각 코어의 조직을 크게 보면, 기존의 조직과 크게 다른 모습을 볼 수는 없다. 그림 4에 코어 조직의 큰 모양을 볼 수 있다. 프론트 엔드에서는 L1이나 L2 캐시에서 명령어 (instruction)를 가져오고 명령을 해석한다. 브랜치 명령어일 경우에는 어디로 브랜치할 것인가를 추측하여 브랜치될 곳의 명령어들을 미리 가져온다. Execution Unit에서는 명령어를 실행하기 위한 데이터들을 가져오고, 데이터가 준비되는 대로 실행하게 된다.
명령어가 아닌 데이터를 메모리에서 가져올 때는 L1D(Level 1 Data) 캐시를 사용하며, L1D 캐시에 있는 데이터가 명령어를 필요로 할 때 Execution Unit으로 보내진다. 순조로운 명령어들의 실행을 위해서는 필요한 데이터가 빨리 L1D 캐시에 공급되어야 하는데, 이를 위해서 메모리에서 데이터가 한번에 64byte 묶음으로 L2 캐시에 보내진다. 예를 들어, x[]가 여러 개의 항목을 가진 1차원적 표라고 할 때, 프로그램에서 z=x[0]이 있으면 x[0], x[1], x[2], x[3], x[4], x[5], x[6], 그리고 x[7]의 8개 항목이 한꺼번에 L2 캐시로 저장된다(각 항목이 8byte인 경우). 그리고 x[0]만 L1 캐시로 저장된다. 프로그램에서 y=x[1]이 있으면 x[1]에 해당되는 데이터는 이미 L2 캐시에 있으므로 금방 L1 캐시로 가져올 수 있다. 마찬가지로 x[0]가 메모리로 저장되어야 하면 x[0]에서 x[7]까지의 데이터가 한꺼번에 저장된다.
그림 4의 전체적인 구조를 조금 더 자세히 보면 그림 5와 같이 된다. 명령어들이 명령어 캐시(icache)와 버퍼(instruction queue)를 거쳐 해석되고, Execution Unit의 Reservation Station에 보내진다. 명령어 버퍼(Instruction Queue)는 18개까지의 명령어를 저장할 수 있다. 5개까지의 명령어가 명령어 버퍼에서 읽혀질 수 있으며 이것이 몇 개의 명령어들이 반복되는 루프 속에 있는 경우에 명령어들을 스트림화 시킬 수 있다.
Reservation Sta-tion에서는 각 명령어에 필요한 데이터가 있을 때까지 명령어를 저장하고 데이터가 모두 준비되자마자 명령어를 Execution Unit으로 보낸다. 두 개의 명령어가 Reservation Station으로 왔을 때 어느 명령어가 먼저 실행될지는 그 데이터가 준비되어 있는가에 따라서 정해진다. 따라서 명령어들이 해석되면서 순차적으로 Reservation Station으로 보내지지만 실행이 끝나는 명령어들은 보내진 순서에 상관없이 실행된다. 1970년대 초부터 사용된 이러한 방식은 여러 명령어가 거의 동시에 실행될 수 있게 하는 효율성은 있지만 한 명령어가 다른 명령어에 데이터를 보내야 하는 경우에는 동시에 실행될 수 없다.
Reservation Station은 실행이 끝나는 명령어들의 순서가 보내진 순서와 다를 수 있는 효율성이 있는 반면에 명령어들 중에 브랜치 명령이 있으면 그 브랜치 명령어에 따라 브랜치를 할 경우 브랜치된 곳에서부터 새롭게 명령어들을 순서적으로 가져와야 한다. 브랜치 되기전에 reservation station에 있던 명령어들은 모두 없어지고 새롭게 명령어들을 가져와야 하는데, reservation station에서 이미 실행되거나 실행을 기다리는 명령어들을 모두 없애는 것은 상당한 손실이 된다. Reorder Buffer(ROB)는 이 손실을 조금 줄이는 데 사용된다. 이는 브랜치가 성립될지 안 될지를 예상하여 명령어들을 실행하고 ROB에 결과를 저장해 놓았다가 실제 브랜치가 성립되었는지의 여부에 따라 그 ROB 결과를 레지스터에 저장하는 방식이다.
명령어 실행은 SIMD(Single Instruction, Multiple Data Stream)에서 이루어지는데 한 명령어로 한 주기에 8개의 데이터를 한꺼번에 실행할 수 있다(double precision인 경우에는 한 주기에 4개의 데이터까지). 이것은 이전에 비해 두 배가 빠르다. 이 SIMD 실행은 화상과 같은 미디어를 다루는 데는 적합하다.
SIMD 실행과 Reservation Station에 필요한 데이터를 빨리 공급하는 것이 명령어들의 신속한 실행에 있어 관건이 되며, DCU(Data Cache Unit)이 2Kbyte의 데이터를 미리 가져 올 수 있도록 한다. 이것은 캐시 페이지의 반에 해당하는 데이터 양으로 데이터들이 연속되어 있을 경우에는 메모리로 가지 않아도 이 DCU L1 캐시에서 항상 데이터를 찾을 수 있다.
이 밖에도 코어 조직의 칩에서는 전력 소모에 신경을 많이 썼다. 필요에 따라 전력 소모를 조절할 수 있는데, 예를 들어 같은 SIMD 명령어가 다른 데이터에 반복적으로 실행되고 있는 동안에는(다른 명령어를 가져 올 필요가 없으므로) 칩의 다른 부분은 거의 꺼져있는 상태로 만들어 전력 소모를 줄인다.
2006년에 발표된 인텔 회사의 코어2듀오(Conroe)는 두 개의 코어를 갖고 있고 코어2쿼드(Kentsfield)는 네 개의 코어를 갖고 있다.
두 개의 코어2듀오를 합친 Xeon 51xx (Woodcrest)는 네 개의 코어를 갖게 된다. 두 개의 코어2쿼드를 합치면 Xeon 53xx (Clovertown)의 8개 코어를 갖게 된다. 성능 면에서 Conroe는 40%, Woodcrest는 80% 성능 증가를 보이고 있다. 이 제품들은 65nm의 반도체 기술로 제작되었는데 2007년부터는 새로운 재질의 하프늄을 사용한 45nm 반도체 기술로 65nm 기술에 비해서 회로 집적이 거의 두 배로 가능하게 된다. 2009년에는 32nm 기술이 도입되도록 계획되어 있기도 하다.

다른 멀티 코어의 구조
멀티 코어를 제작하는 회사는 인텔 회사뿐이 아니다. 인텔과 경쟁하는 AMD 회사도 있고. IBM회사는 Power6프로세서를 만들고 있다. 그림 6은 IBM의 Power5와 Power6 멀티 코어 칩을 사용한 시스템으로, 전체적인 조직은 앞 절에서 살펴본 인텔의 경우와 흡사하다. 컴퓨터에 사용되는 프로세서뿐만 아니고 TI 회사에서는 디지털 신호 처리(DSP) 칩도 멀티 코어 방식을 사용하고 있다.
지금까지 멀티 코어 구조와 그에 따른 병행 프로그래밍의 필요성에 대해 살펴보았으며, 여기에서는 멀티 코어와 다른 방향의 컴퓨터 구조도 있다는 것을 간단히 보여주고자 한다. IBM의 셀 광대역 엔진 구조(CBEA, Cell Broadband Engine Architecture)는 소니, 도시바와 차세대 프로세서로 공동 개발된 것이다.  CBEA는 IBM의 PowerPC 64비트 구조를 가진 PPE(PowerPC Processor Element)와 더불어 다른 구조를 가진 시너지 프로세서 (SPU, Synergistic Processor Unit)로 구성된다. PPE는 잘 알려진 PowerPC 구조로 시스템과 응용 프로그램을 운영하는 조정자편에서 일한다.
SPU는 멀티미디어에 필요한 대량의 데이터를 처리하는 데이터편이라고 볼 수 있다. 이는 멀티 코어와 같이 같은 프로세서 회로를 반복한 것이 아니고 두 개의 다른 구조를 가진 프로세서를 한 칩에 넣음으로써 상당히 다른 방향을 제시한다. SPU는 128비트 레지스터를 128개 갖고 있으며, 많은 레지스터를 사용하여 명령어들이 실행되는 시간이 신축성 있어 루프 언롤링 등의 최적화가 쉽게 이루어진다. 또한 많은 데이터를 처리하여 각각의 자체 내 메모리도 있다(LS, Local Storage). 여러 개의 PPE와 SPU가 집적된 예가 그림 7에 나와 있다.
SPU는 메인 메모리의 제한된 영역을 자체 메모리와 맵핑하여 사용할 수 있는데, MFC (Memory Flow Controller)가 여러 프로세서들이 메인 메모리의 데이터를 사용할 때 일어나는 문제를 예방해 준다. CBEA는 멀티미디어와 오락 프로그램용으로 개발되었으며 다양한 응용 체계에 사용된다. 실시간 운영 체계와 비 실시간 운영 체계가 동시에 작동하는 환경도 가능하다.

멀티 코어 구조의 영향
멀티 코어 이전의 멀티프로세서(multi-processor) 시스템의 구조는 여러 프로세서들이 큰 메모리 용량을 버스를 통해서 공유하는 방식이었다. 각 프로세서마다 독립적인 캐시가 있다. 이러한 시스템을 SMP(Shared 또는 Symmetric Multiprocessor)라고 부른다.
메모리가 여러 프로세서 간에 공유되어 있으므로, SMP에서 처리되어야 할 부분은 메모리 데이터의 일관성 유지와 프로세스 간의 동기성(synchronization)이다. 같은 메모리의 데이터가 둘이나 그 이상의 프로세서 안의 캐시에 동시에 저장되어 있을 경우, 한 프로세서에서 캐시의 데이터를 바꾸면 그 새로운 데이터가 다른 프로세서의 캐시에도 반영되어 같은 메모리의 데이터가 일관성 있게 유지된다. 잘 알려진 방식으로는 한 캐시에서 데이터가 바뀌는 것을 버스에 알려서 다른 프로세서들이 같은 데이터를 캐시에 갖고 있는 경우 같이 데이터를 바꾸는 스누피 프로토콜이 있다.
또한 둘이나 그 이상의 프로세서가 동시에 같은 메모리 데이터를 바꾸려고 하면 한 프로세서가 바꾼 데이터를 다른 프로세서에 의해 잃어버릴 가능성이 발생한다. 이 프로세스 간의 동기성은 주로 메모리를 록킹하고 다른 프로세스가 같은 메모리에 데이터를 저장하는 것을 막아 놓는 방법을 사용한다.
멀티 코어 시스템은 SMP의 한 예라고 볼 수 있는데 그림 8에서 여러 코어가 한 칩에 들어가 메모리를 공유하는 것을 보여준다. 다만 L2 캐시가 멀티 코어 칩에 들어감으로써 메모리 계층이 L1, L2, 그리고 RAM의 세 계층으로 구성되어 더 복잡해진다. 이러한 멀티 코어 칩에 의한 시스템을 CMP(Chip Multi-processor)라고 부른다. CMP는 SMP에 비해 코어들이 같은 칩 안에 들어 있기 때문에 코어 간의 데이터 교환 시간이 훨씬 짧고 한 번에 교환되는 데이터양은 훨씬 많다.
CMP도 SMP의 일종으로 볼 수 있으므로 SMP에서 고려해야 하는 메모리 데이터 일관성과 프로세스간의 동기성의 문제점들을 다루어야 한다.
이제 멀티 코어 칩들을 여러 개 연결하여 더 큰 시스템을 만들 수 있는데, 이는 그림 9에 보여진 것과 같은 클러스터 시스템이 된다. 이 클러스터 시스템에서는 메모리를 꼭 여러 멀티 코어가 공유할 필요가 없어지며, 각 멀티 코어마다 독립적인 운영 체계(Operating System)를 사용하는 분산 시스템으로 운영될 수 있다.

병행 프로그래밍(Parallel Programming)
하드웨어 측면에서 보면 멀티 코어는 여러 가지 문제점을 해결해 준다. 우선 두 배, 네 배, 여덟 배의 회로를 집적해야 하는 복잡성을 해결해 준다. 이미 설계되어 있는 한 코어의 회로를 반복만 해주면 된다. 또 전력 소모의 문제도 해결해 주는데, 이는 칩의 전력 소모가 회로 속도(주파수)에 비례하기 때문이다(Power = Capacitance×Voltage2×Frequency). 회로 속도가 높아질수록 전력 소모도 늘어나지만 낮은 회로 속도에서 여러 코어를 씀으로써 전력 소모에 비례하여 성능을 높일 수 있다.
이러한 하드웨어 면의 장점에 반하여, 멀티 코어는 여러 가지 도전적인 문제들을 제시한다.
1. 여러 코어가 각각 실행되기 때문에 다수 스레드(Thread)의 병행 프로그래밍 (multi-threaded parallel programming)을 할 수 있어야 한다. 그러나 현재의 프로그램들은 병행 프로그램을 예상하고 만들어져 있지 않기 때문에 프로그램에서 멀티 코어를 충분히 활용할 수가 없다.
2. 능률적인 프로세스 간의 통신을 필요로 한다. 프로세스 사이에 록킹과 세마포어의 통신 수단이 있지만, 한 프로세스가 한 코어가 아닌 여러 코어에서 동시에 실행될 때, 또 하나 이상의 프로세스가 여러 코어를 공용할 때 그 프로세스 사이의 통신은 상당한 조절이 필요하다. 한 프로세스가 다른 프로세스에 의해 대체될 때 그 전 프로세스의 상황을 기록하는 것도 여러 코어가 있으면 훨씬 더 복잡해진다.
3. 데이터를 메모리에서 가져오는 것이 더 복잡해진다. 여러 코어에서 메모리를 동시에 사용하려고 하기 때문에 한 번에 가져올 수 있는 데이터의 양이 메모리에 의해 제한되어 있는 상황에서는 더 복잡해진다. 이것이 메모리에서 데이터를 가져오는 속도를 더디게 할 수 있다.
4. 칩에 I/O로 사용하는 핀의 수가 코어의 수만큼 늘어나야 각 코어에서 I/O를 하기가 쉽지만, I/O 핀의 수에는 한계가 있다.

여기서는 이중에 첫 번째 병행 프로그래밍에 대한 문제를 자세히 살펴보기로 한다. 1970년대에 병행 프로그래밍이라고 하면 100대나 1000대의 컴퓨터를 연결한 대규모 과학이나 공학 프로젝트에만 사용되어 왔다. 1980년대와 1990년대에 KSR, Alliant, Thinking Machine들처럼 소형화하려는 시도가 있었지만 모두 실패했는데, 이는 매년 두 배씩 컴퓨터의 성능이 빨라지고 가격이 떨어졌기 때문이다. 따라서 소프트웨어에서 병행 프로그래밍에 큰 투자를 할 필요가 없었고, 현재까지의 소프트웨어 프로그램 방식은 대부분 병행 프로그래밍을 고려하지 않고 쓰여졌다.
소프트웨어는 그대로 두고 하드웨어만으로도 실행 능률이 올라가기 때문이다. 예를 들면, 하드웨어에 L1이나 L2 캐시 크기를 늘리고 메모리 대역폭을 늘림으로써 컴퓨터 자체의 속도 발전뿐만 아니라 전체적인 소프트웨어 성능도 올라갔다. 소프트웨어 상의 병행 프로그래밍은 운영 체계에서 프로세스 간을 동기화하고 메시지를 교환하는 데 그치고 있다.
하지만, 이제 전체 컴퓨터 산업이 멀티 코어의 방향으로 가고 있으므로 더 이상 종전의 소프트웨어로만은 성능을 늘릴 수 없게 되었다. 소프트웨어의 병행 프로그래밍은 이제 필수가 되었다. 1960년대 말부터 멀틱스와 유닉스 운영 체계에서는 프로세스 모델이 개발되었다. 각 프로세스에 CPU의 레지스터나 여러 포인터들과 CPU의 상태를 저장해 놓는다. 프로세스가 너무 오래 실행되거나 I/O로 인해 CPU를 사용하지 않아도 될 때는 그 프로세스의 상태를 저장하고 다른 프로세스를 실행하게 함으로써 CPU뿐 아니라 전체 시스템의 효율을 올릴 수 있다.
여기에 유닉스 운영 체계에는 fork() 개념을 도입하여 한 프로세스에서 그 프로세스와 프로그램이나 데이터를 똑같이 복사하여 새 프로세스를 만들 수 있게 하였다. 프로세스가 다른 프로세스에서 복사되어 생성되었다고 해도 독립적인 어드레스 공간을 가지며, 두 프로세스 사이에 공유되는 어드레스는 없다. 따라서 한 프로세스에서 다른 프로세스로 옮겨 가는 것이 독립적으로 이루어진다. 이 프로세스 모델은 병행 프로그래밍의 기초가 되었지만, 한 프로세스를 CPU에서 새로 시작하려면 프로그램과 데이터를 가져와야 하기 때문에 오버헤드가 크다는 결점이 있다.
스레드는 프로세스 모델과 비슷하지만 각 스레드마다 독립적인 데이터만을 갖고 있다. 프로그램은 여러 스레드가 공유하며 사용하기 때문에 프로세스에 비해서는 오버헤드가 훨씬 적다. 즉, 프로그램에서 여러 스레드를 만들면 스레드들이 똑같은 프로그램을 사용하고 스레드마다의 데이터만 스택의 다른 부분에 저장한다. 이러한 스레드의 성격에 의해 스레드는 서브라우팅으로 프로그램 된다.
멀티 코어가 아닌 현재의 컴퓨터에서도 병행 프로그래밍은 하고 있다. 현재의 컴퓨터를 하나의 코어로 보면, 여러 스레드가 코어를 공유하고 한 스레드에서 잠시 실행하고 멈춘 후에 다른 스레드가 잠시 실행하는 식의 여러 스레드의 병행 프로그래밍이 이루어지고 있다(그림 11의 왼쪽 그림). 그러나 멀티 코어 시스템에서는 한 코어에 한 스레드가 시작되면 그 스레드의 실행이 끝날 때까지 계속 같은 코어에서 실행할 수가 있다(그림 11의 오른쪽). 따라서 멀티 코어 컴퓨터에서는 여러 코어가 동시에 각각의 스레드를 계속 실행하며 각 스레드가 다른 스레드에 의해 중단되지 않고 끝날 때까지 한 코어에서 계속 실행될 수 있다.
병행 프로그래밍이 사용되면 여러 스레드들이 동시에 실행되기 때문에 그에 따른 문제점들이 생긴다. 여러 스레드들이 동시에 같은 데이터의 값을 바꾸려고 하면 어느 스레드가 언제 그 데이터 값을 바꿨는지를 구분하기가 힘들므로 발견하기도 힘들고 똑같은 문제점을 재생하여 고치기도 힘들다. 이러한 레이스 컨디션의 문제는 주로 동기 방식(synchronization)으로 해결하는데 처음으로 데이터를 사용하는 스레드가 데이터를 록킹해서 동시에 사용하려는 스레드를 막는 방식이다. 뮤텍스나 세마포어의 방식이 있지만, 데이터를 록킹하는 방식도 여러 문제점들이 있다. 우선 프로그램이 여러 스레드에 의해 공유되는 데이터를 모두 록킹 설치해야 한다. 그러나 프로그램에서 지나치게 록킹이 많으면 병행 프로그래밍에서 얻을 수 있는 성능 증가의 효과를 얻을 수 없다.
또한 동기 방식에서 록킹을 사용하면 두 개의 스레드가 록킹을 하고 서로 다른 스레드가 그 록킹을 풀기를 한없이 기다리는 데드록이 생기지 않도록 프로그램이 짜여져야 한다. 한 스레드가 록킹을 하고 그 록킹을 풀지 않으면 같은 데이터를 사용하려는 스레드들이 또한 한없이 기다리는 경우도 예방해야 한다.
병행 프로그램에서는 이 동기 방식을 항상 고려하여 프로그램을 짜야 하기 때문에 일반 프로그램과 훨씬 다른 복잡성이 있다. 이러한 병행 프로그램들이 동기 방식을 사용하여 여러 스레드들 간의 문제점들을 해결한다고 하더라도, 멀티 코어 시스템의 장점을 최대로 이용하는 병행 프로그래밍이 되려면 또 다른 면을 고려해야 한다. 즉, 어떠한 병행 프로그래밍이라 하더라도 스레드를 시작하는 데는 오버헤드가 들어간다는 것이다. 그 스레드에 맞게 레지스터나 여러 변수들을 미리 설정해 놓고 여러 상황을 먼저 코어에 저장하고 스레드를 시작해야 한다. 또한 동기 방식에 의해 스레드가 다른 스레드에 막혀 기다릴 수도 있고, 여러 스레드끼리 데이터를 공유해야 할 때는 데이터를 서로 교환하는 오버헤드도 있다. 이 오버헤드는 그 성격에 따라 마이크로섹이나 밀리섹 단위로 지속될 수 있는데 이것이 코어의 효율성을 저하시킨다.
멀티 코어 시스템의 능률에 큰 영향을 주는 것으로는 granularity를 들 수 있다. Granularity는 한 스레드를 시작하는 데 필요한 오버헤드와 그 스레드가 실제로 실행하는 부분과의 비율로 볼 수 있다. 예를 들어, 두 개의 2×2 매트릭스를 곱하는 문제가 있을 경우에, 한 매트릭스의 열과 다른 매트릭스의 항을 곱하고 그 결과들을 더하는 네 개의 작은 문제들로 분해하여 각각의 작은 문제를 하나의 스레드로 모두 네 개의 스레드를 만들 수 있다. 멀티 코어에 네 개의 코어가 있다고 하면 각 스레드마다 다른 코어에서 실행되어 문제를 푸는 데 시간이 얼마 걸리지 않는다. 그러나 각 스레드를 코어마다 시작하게 하는데 그에 맞는 데이터들을 공급해 줘야 하고, 또 네 개의 스레드가 다 끝날 때까지 기다려 결과에 해당하는 매트릭스를 만들어 줘야 한다.
이와는 달리, 2×2 매트릭스를 곱하는 문제를 하나의 스레드로 만들 수도 있다. 이 경우에는 멀티 코어라고 하더라도 하나의 코어만 사용하지만, 이 스레드에 모든 데이터가 있기 때문에 여러 스레드 간의 데이터 교환이나 동기 방식을 사용할 필요가 없다. 즉, 멀티 코어 시스템에서는 스레드를 어떻게 만드는가에 따라 그 오버헤드의 양이 정해지며 그것이 시스템의 효율성에 직접적인 영향을 준다. 현재까지 스레드를 어떻게 구성해야 가장 효율적으로 병행 프로그래밍 할 수 있는 가에 대해서는 뚜렷한 제안이나 구체적인 방식이 없다.
병행 프로그래밍을 하는 도구들을 살펴보면 우선 C 프로그램 언어의 pthread나 자바에서의 스레드 클래스로 프로그램에서 스레드를 정의하고 사용할 수 있다. 그러나 프로그램을 만드는 데 일일이 스레드를 정의하고 스레드 간의 동기성이나 데이터 충돌을 고려하려면 상당히 많은 신경을 써야 한다. 따라서 병행 프로그램을 쉽게 짤 수 있는 도구들이 필요하다.
OpenMP는 프로그램을 컴파일할 때 컴파일러 보고 병행 프로그램으로 구성하라는 명령만 삽입하게 한다. FFT(고속 푸리에 변환) 같은 공학이나 수학 문제를 푸는 프로그램은 몇 개의 명령이 다른 데이터를 사용하면서 수없이 반복되는 경우가 많다. OpenMP는 이러한 경우에 반복되는 부분만 병행 프로그램으로 바꾸는 것을 목표로 시작된 방식이다. OpenMP는 포트란과 C/C++ 언어에 사용될 수 있는데 그 한 예로 매트릭스를 곱하는 경우 (y = Ax)가 그림 12에 있다. 구체적인 부분을 삭제하면, #pragma로 병행 부분인 것을 표시하여 컴파일러가 그 부분을 자동적으로 병행화 시키게 한다. 따라서 프로그램을 짜는 데 일일이 스레드 간의 데이터 충돌 가능성을 고려하지 않아도 된다.
병행 프로그래밍에서 가장 어려운 것이 분산 시스템(cluster)을 대상으로 프로그램 하는 것이다. 멀티 코어를 사용한 분산 시스템에서는 멀티 코어들이 같은 메모리를 공유하지 않고 멀티 코어마다 각자의 메모리가 따로 있다. OpenMP를 분산 시스템에서 쓸 수도 있으나, openMP에서 생성된 스레드들은 공유하는 데이터가 한 메모리에 있는 것을 가정으로 하기 때문에 분산 시스템에서 적용하기가 힘들어진다. MPI(Message Passing Interface)는 이러한 분산 시스템을 위해 가장 일반적인 병행 프로그래밍의 모델이라고 볼 수 있다. MPI에서 프로세스나 스레드 사이에 데이터를 공유할 때는 서로 간에 직접 데이터를 메시지로 보내고 받아야 한다. MPI는 라이브러리로 만들어져 있고, 따라서 보통 프로그램 언어인 C, C++, 포트란, 또 자바와 쉽게 연결된다.
인텔에서는 멀티 코어 칩들을 시장에 내놓으면서, 소프트웨어가 멀티 코어에 맞게 병행 프로그램으로 바뀌어야 한다는 것을 인식했다. 그에 따라 인텔에서는 멀티 코어에 맞게 병행 프로그램을 할 수 있는 컴파일러, 라이브러리, 그리고 툴을 개발하여 제공하고 있다. 컴파일러로는 C/C++와 포트란 컴파일러들이 있다.
라이브러리로는 MPI, TBB(Thread Building Blocks), IPP(Integrated Processing Primitives)와 MKL(Math Kernel Library)이 있는데, TBB는 스레드 요소들을 미리 프로그램화 하여 제공하고 있고, MKL에서는 멀티미디어에 맞는, 또는 매트릭스 같은 수학 문제에 맞는 여러 병행 프로그램들을 제공하고 있다. 또한 인텔에서는 스레드를 사용할 때 유용한 도구들을 제공하고 있다. VTune, Thread Profiler 는 스레드를 생성할 때 쉽게 스레드의 성격을 입력하면 자동적으로 스레드를 만들어 주며, 스레드 체커는 병행 프로그램이 실행될 때 스레드들이 어떻게 실행되고 있는가를 보여 준다.
과학이나 수학 프로그램에는 지금까지 병행 프로그래밍이 많이 연구되어 왔기 때문에 멀티 코어 컴퓨터로 옮겨가는 데 큰 무리가 없을 것이다. 그러나 일반 다른 프로그램들은 병행적인 실행을 전혀 고려하지 않았기 때문에, 멀티 코어 컴퓨터를 사용해도 실행에 큰 도움을 못 받는다. 앞으로는 이러한 일반 프로그램들이 새로 짜여질 때는 당연히 병행 프로그래밍을 사용하여야 한다. 그러나 현재 사용되는 일반 프로그램들을 병행화하는 데는 상당한 시간이 걸릴 것으로 생각된다.

SDR(Software-Defined Radio)

SDR의 목적
휴대폰, 와이파이(Wi-Fi), 블루투스들의 현재의 무선 통신 기구들은 그 기구마다 쓰는 주파수가 정해져 있고, 특정한 통신망과의 메시지 교환을 하도록 제작되어 있다. 보다 새롭고 빠른 효율적인 통신망이 구축된다면 또 다른 무선 통신 기구가 그 새로운 통신망에 맞도록 제작되어야 하며, 지금까지 쓰였던 통신 기구는 이 새로운 통신망과는 연결되지 않을 것이다. 지난 10여 년간 무선 통신망에는 많은 변화와 발전이 있었으며, 새로운 표준에 따라 더 효율적인 통신망이 나올 때마다 사용자들은 통신 기구를 새로운 것으로 대치해야 했다. 새로운 통신 표준에 맞는 모뎀을 개발해야 했고 새로운 주파수에 맞는 송수신 기구를 개발해야 했다.
SDR은 개개인의 통신 기구뿐만 아니고 전체 통신망의 통신 장비들을 소프트웨어화하여, 통신 표준이 바뀌더라도 현재의 통신기구나 장비에 하드웨어는 변하지 않고 새로운 표준에 맞는 소프트웨어만을 더 붙여서 사용하려는 움직임이다. 이미 10년 전부터 미국 국방성의 지원 하에 시작된 프로젝트로, 국방성에서는 육해공군에서 사용하는 무선 통신이 다른 군 부처 간에 서로 호환되어 사용되지 못하는 것을 보완하는 데에 중점을 두었다. SDR에는 여러 가지 장점들이 있다.
1. 한 통신 기구로 여러 가지의 통신망에 접속될 수 있다. 각 군 부처에서의 무선 통신이 소프트웨어화 되어 있을 경우 다른 군 부처의 통신에 가담하려면 그 군 부처에 맞는 통신 소프트웨어만 다운로드 하면 금방 통신을 할 수 있게 된다. 또한 휴대폰을 가지고 외국으로 갔을 경우에 그 나라에 맞는 소프트웨어만 다운로드 하면 금방 그 나라의 무선 통신망과 연결된다. 또 다른 예로는 위기 상황이 발생했을 경우에 경찰과 소방원 사이의 통신도 서로 주파수가 다르더라도 SDR로는 서로 통신이 가능하다.
2. 한 휴대폰으로 2.5G, 3G나 4G에 상관없이 표준 통신망에 접속될 수 있다. 앞으로 어떠한 새로운 표준이 나오더라도 새로운 휴대폰으로 바꾸지 않고도 소프트웨어만 다운로드 하여 새로운 통신망에 접속할 수 있다.
3. 여러 통신 표준에서 사용하는 다른 주파수 대역에 상관없이 통신이 가능해지므로 주파수 대역에 대한 경쟁이 없어진다.

SDR의 구조
앞의 예나 목적에서 볼 수 있듯이 SDR이 가능하려면 우선 통신 기구가 여러 주파수를 사용할 수 있어야 한다. 현재의 핸드폰이 한 주파수에 고정되어 있는 것과는 대조된다. 따라서 RF(Radio Frequency) 부분이 여러 주파수를 사용할 수 있도록 개조되어야 하는데, 다만 주파수의 영역이 넓어질수록 비용이 높아진다는 단점이 있다.
넓은 영역의 주파수를 사용할 수 있도록 바뀌어야 하는 RF 부분은 하드웨어 상의 부분이며, SDR에서 가장 많이 바뀌어야 하는 부분은 신호 처리 부분이라고 할 수 있다. 그림 13에 RF부분과 소프트웨어 부분이 구분되어 표시되어 있다.
RF부분의 라디오 헤드는 신호 처리 부분에서 제시된 RF 신호의 신호 강도, 주파수, 또한 페이즈에 맞는 RF 신호를 만들어 송신하며, 수신된 RF 신호의 성격을 신호 처리 부분으로 보내준다. 이것이 하드웨어적으로 처리되므로 RF 부분은 주어진 하드웨어에 따라 정해진다.
현재 무선 통신 기구들은 신호 처리에 DSP 칩을 쓰거나 FPGA를 사용하여 주어진 주파수의 신호 모양을 수신 쪽에서 알아내고 발신 쪽에서는 만들어 내고 있다. 또는 신호 처리에 DSP와 FPGA를 모뎀 칩으로 구워 가격을 내리면서 속도를 빠르게 하고 있다. 또한 프로토콜 부분은 주로 MAC(Medium Access Control) 부분을 칩으로 구워서 사용한다. 통신 표준이 바뀔 때마다 새로운 표준에 맞는 모뎀 칩과 접속 방식의 칩을 개발하고 생산해야 하는데 이에 대한 인적 재정적 투자가 많이 소용된다는 것은 굳이 언급할 필요도 없을 것이다.
SDR은 이 신호 처리와 망 접속 프로토콜을 소프트웨어화 한다. 따라서 새로운 통신 표준이 나오더라도 하드웨어로 모뎀이나 프로토콜 칩이 바뀌는 것이 아니고 새로운 통신 표준에 맞는 소프트웨어를 다운로드만 하면 된다. 따라서 GSM, CDMA, Wi-Fi 등 여러 무선 통신 표준에 맞는 소프트웨어가 현재 사용되고 있다. SDR에서 소프트웨어로 구성되어야 하는 부분을 나열하면 다음과 같다.
1. 데이터에 따른 주파수, 신호폭, 페이즈 등의 신호 제작
2. 신호 모양 변조 및 역변조(waveform modulation and demodulation)
3. 데이터 대역과 신호 처리
4. OFDM 등에서 주파수를 뛰어넘을 경우에 중간 주파수 대역의 처리
5. 여러 MAC 프로토콜
6. 데이터 안전 보장 및 encryption

개념적으로 보면 상당히 합리적인데 현재 SDR 기구들이 시장에 많이 없는 이유로는 두 가지를 들 수 있다.
1. 우선 여러 신호 모양과 여러 주파수 대역을 감당할 수 있는 RF 부분이 시장에 별로 나와 있지 않다. M/A-COM의 방향성 발신기(SDRF 2004) 정도이다. 즉, RF 부분에 적합한 하드웨어가 현재 공급되고 있지 않다.
2. 현재 모뎀 칩이나 DSP로 신호 처리를 하는데, 이것을 일반 컴퓨터 칩(예를 들면, 멀티 코어 칩)을 사용하여 소프트웨어화 하게 되면, 일반 칩이 소비하는 전력이 너무 많이 들어 휴대용 기구로는 사용하기 힘들다.
이 중에서 RF 부분은 앞으로 빠르게 다른 부품들이 시장에 나올 가능성이 있지만, 전력 소비를 줄이는 부분은 멀티코어 칩에서는 앞으로도 상당히 힘들 것으로 보인다.

SDR 상용화의 예
원칩 휴대폰
정보의 디지털화 시대라고는 하지만, 현재 사용되고 있는 휴대폰은 데이터 대역과 RF 대역에서의 처리를 주로 아날로그 방식을 사용하고 있다. 핸드폰에 사용되는 칩들을 개발할 때는 어느 부분을 디지털로 또는 아날로그로 처리해야 비용을 절감할 수 있는가를 결정해야 한다. 같은 디지털 쪽이라고 해도 신호 처리 칩과 메모리 칩이 제작되는 과정이 다를 수도 있고, 같은 아날로그 쪽에서도 전력 소모를 줄이려는 것과 RF 회로를 구성하는 것과는 서로 다를 수도 있다. 예를 들면, 스피커로 음성을 전달하려면 DSP에서 나오는 디지털 데이터를 D/A가 변환을 해줘야 하고, 마이크에서 들어오는 음성 신호는 A/D를 거쳐야 DSP로 보내진다. 따라서 대부분의 휴대폰 칩들은 디지털 회로는 한 칩에, 아날로그 회로는 다른 칩에 집적하게 된다. 또한, RF 부분은 또 한 칩, 그리고 메모리가 한 칩에 들어간다.
브로드컴의 BCM2121 데이터 대역 칩에서는 데이터 대역 회로와 음성 코덱을 DSP와 같이 한 칩으로 집적했다. 그 뿐 아니라, D/A 또 A/D 변형 회로도 같은 칩에 들어가 있는데 이는 표준 주파수의 조절과 다른 여러 가지의 아날로그 모니터링에 사용될 수 있다. 특기할 것은 DSP 외에도 RISC형 컴퓨터인 ARM이 집적되어 있는 것인데, 이 ARM에서는 소프트웨어로 프로토콜 실행에 필요한 프로그램들이 저장되어 있다. 특히 GSM/GPRS 시스템의 프로토콜이 저장되어 있다.
DSP에서는 RF 신호 처리에 필요한 프로그램들이 입력되어 있다(그림 14). 이 BCM2121 칩은 ARM과 DSP의 디지털용 회로뿐만 아니라 아날로그의 음성 코덱과 D/A 또는 A/D 회로가 같은 칩에 들어가 있다는 큰 성과를 이루었는데, 그림 13에서 볼 수 있듯이 아날로그 부분이 칩 면적의 25% 이상을 차지하고 있다.
이 BCM2121 칩을 사용하면 핸드폰 제작이 훨씬 단순해지는데, 그림 15에 있는 소니 에릭슨의 J200i 휴대폰의 내부 구조를 보면, BCM2121 외에 몇 개의 칩들만 더 쓰면 된다 [http://www.eetimes.com/news/latest/showArticle.jhtml?articleID=184400664].
필립스의 PCF50603 칩은 대부분의 전력 소모 조절을 도맡아 한다. 실리콘랩의 Si4206 전송 수신 칩에서는 디지털과 아날로그 회로가 섞여 있다. 디지털 중간 주파수 수신 구조를 가지고 있는데, 중간 주파수 부분의 양쪽으로 A/D와 D/A 변형 회로가 첫 단계의 주파수 낮추기와 아날로그 신호 제작에 각각 쓰이고 있다. 한 칩 안에 Si4206는 세 가지의 CMOS 반도체를 쓰고 있으며, 각 부분이 맡은 기능에 가장 적합하도록 제작되었다.
데이터 영역 밖에서는 흔히 사용되는 부분으로 나누어져 있는데, 스팬션의 두 개의 칩으로 된 메모리는 프로그램을 저장하며 브로드컴에서 쓰는 DSP와 제어에 필요한 임시 저장 장소로도 사용된다. 야마하의 YMU762는 FM 칩이며 전화 벨 소리를 울려주는데, 여러 신호를 사용해야 하고 또한 여러 기능을 단계적으로 실행하기 위해 독립된 칩으로 사용된다. RFMD RF3133는 GaAs를 사용한 칩으로 RF 신호 증폭에 사용된다. Epcos 부분은 신호 필터와 송신과 수신 사이의 교환에 사용된다.

Vanu Anywave
전력 소비의 문제점으로 SDR이 휴대용 기구에 사용되는 데는 상당한 시간이 걸릴 것으로 예상되는데, 최초로 상용화된 SDR 시스템으로 Vanu Anywave는 휴대용 기구가 아닌 휴대폰 시스템의 중개 기지(Base Station)에 사용되고 있다.
전체적인 시스템 구조는 그림 16에 보여주는 것과 같이 BSC와 BTS 중심으로 되어 있다. BSC는 기존 교환 시스템과 연결되며 전화망에 신호 처리 시스템 7(Signalling System 7, SS7)이나 VoIP와 접속되어 전화 연결을 해 준다. 또한 데이터 처리를 위해서 데이터 망과 연결되며, GPRS 시스템이나 다른 데이터 망과 연결되고 있다.
또한 BSC는 하나 이상의 BTS가 연결되어 있을 경우에 각 BTS에서의 전화 및 데이터양을 조절해 준다.
BTS는 SDR을 사용한 주요 부분으로, 신호 처리와 MAC 부분을 소프트웨어화 하여 서버에서 작동하도록 구성되어 있다. FM 신호 제작, Viterbi 알고리즘, 또한 신호 필터 등에 필요한 소프트웨어들을 모듈화하여 라이브러리로 서버에 저장되어 있다. 특정 통신 시스템에 맞는 모듈들을 서버에서 불러 사용함으로써 어떠한 무선 통신망과도 연결될 수 있다. 서버로는 리눅스 운영 체계를 사용하고 BTS와 RF 부분 간의 연결은 기가비트 이더넷으로 함으로써 특수한 부품을 사용하지 않고 어디서나 구할 수 있는 요소들을 사용하였다.
RF 부분은 16개의 캐리어를 선택할 수 있으며, 16개의 고정된 주파수를 쓰는 것이 아니고 무선 통신망이 사용하는 주파수를 임의로 선택할 수 있다. 전자 회로가 SFDR(Spurious Free Dynamic Range)과 선형성 성격을 가져서 여러 무선망 주파수를 선택하고 이용할 수 있게 해 준다. 이것은 16개의 고정된 주파수의 캐리어를 모아 놓은 것이 아니고 필요에 따라 주파수를 선택하게 하므로 훨씬 더 유연성이 있고 전력 소모도 적다.
Vanu Anywave 시스템의 구성 요소들은 그림 18에서 볼 수 있는데, 앞에서 지적된 것과 같이 리눅스와 실시간 운영 체계와 이미 많이 사용되고 있는 이더넷을 사용하였다. 새로운 시스템을 구성하는 데 있어 표준적인 리눅스와 이더넷을 사용하므로 새로운 운영 체계나 통신 방식을 만들어 내지 않아도 되기 때문에 개발 시간이 훨씬 단축된다. 또한 아무나 같은 방식으로 새로운 시스템을 구축할 수 있다.
실제로 Vanu Anywave는 미국 텍사스 주에 설치되었으며 베이스 스테이션이 그림 19에서 보여진다. 이 그림에서 짙은 색의 두 캐비닛이 이전에 사용되던 베이스 스테이션이고, 이것을 Vanu 시스템이 왼쪽 아래의 서버와 오른쪽 아래의 RF 부분으로 대치한 것이다. 이 그림에서 볼 수 있듯이 Vanu Anywave 시스템은 기존 시스템의 크기에 비해 1/8 정도의 크기로도 같은 기능을 해낼 수 있을 뿐만 아니라, 다시 부연하지만 새로운 시스템을 만들더라도 그에 맞는 소프트웨어만 다운로드하면 되기 때문에 그 유연성은 큰 장점이라고 볼 수 있다.

GNU Radio
1998년에 시작된GNU Radio는 에릭 블로섬(Eric Blossom)이 주관하는 프로젝트로, SDR을 실현하는 데 필요한 소프트웨어를 무료로 공급한다. 이와 더불어 유연한 RF 하드웨어도 공급하고 있다. 프로그램 자체는 Python이라는 컴퓨터 언어로 짜여 있는데, 빠른 속도를 요구하는 부분은 C++ 언어로 짜여 있다. 개발자는 GNU radio에서 공급되는 프로그램들을 사용하여 응용 프로그램을 손쉽게 만들 수 있다[http://gnuradio.org/trac/wiki]. 해당 웹사이트(http://staff.washington.edu/jon/gnuradio.html)에 GNU Radio 프로그램 예들, 실험 예들 그리고 정부나 대학의 프로젝트들에 대한 정보들이 모여 있다. 예를 들면, AM이나 FM 신호를 만드는 프로그램은http://www.kd7lmo
.net/ground_gnuradio_software.html에, BPSK나 QPSK 신호를 만드는 프로그램은 http://viral.media.mit.edu/wiki/tiki-index.php?page=BPSK에 제공되어 있다.
GNU Radio 프로그램들은 USRP(Uni-versal Software Radio Peripheral)에서 사용되는 것을 권장한다. USRP 프로젝트는 일반 컴퓨터를 사용하여 디지털 데이터 영역과 중간 주파수 영역(IF, Interme-diate Frequency)을 소프트웨어로 구성하는 것이다. 변조와 복조와 같은 신호 모양과 관련된 모든 처리를 보통의 컴퓨터에서 행한다. 고속의 처리를 요구하는 디지털 변환이나 보간법 등은 FPGA에서 한다. USRP의 진가는 저렴한 비용으로도 최소한의 노력으로 시스템을 구성할 수 있다는 데 있다. 많은 개발자들과 사용자들이 이미 상당히 많은 양의 프로그램과 실제 사용되는 응용 프로그램들을 공개하고 있다  [http://gnuradio. org/trac/wiki/UsrpFAQ/Intro]. USRP 시스템이나 그 부품들은 에투스 리서치 회사를 통해서 판매되고 있다. USRP 시스템의 사진이 그림 20에 나와 있다. 2개의 RF 전송선, 이더넷 전송선 및 하드웨어가 들어가 있으며 DC에서 5.85GHz까지의 주파수 영역에 따라 다른 하드웨어 보드들이 제공된다.

SR(Software Radio) CR(Cognitive Radio)
소프트웨어 라디오는 송수신 신호 모양을 소프트웨어로 처리하는 시스템을 말한다
즉, 송신 신호가 주기적으로 디지털 신호를 생성함으로써 이루어지고, 광대역 D/A로 디지털에서 아날로그로 변형되며, 중간 주파수(IF)에서 RF로 변조된다. 수신 쪽에서는 이와 마찬가지로 광대역 A/D 변형 회로를 사용하여 모든 SR 방송을 잡아낼 수 있다. 수신기에서는 잡혀진 신호를 소프트웨어를 사용하여 낮은 주파수로 변조한다.
SDR이 RF부분에서 안테나로 연결되는 것은 하드웨어로 유지하면서 데이터 대역과 신호 처리를 중점으로만 소프트웨어화 하는 것이라면, SR은 이보다 한 발짝 더 나아가 RF 부분까지를 소프트웨어화 하려는 시스템이다. 즉, 안테나에서 오고 가는 신호를 직접 디지털 데이터로 연결하는 방식이다. 이러한 방향의 시스템을 SR이라고 한다. 안테나의 신호를 직접 디지털로 바꿀 수 있으면 시스템 전체의 데이터가 디지털 처리가 되므로 이 방식이 SDR보다 더 바람직하다고 볼 수 있다. 그러나 SR은 광대역의 신호를 A/D로 디지털화 하는 회로가 아직은 시중에 없기 때문에 그 용도에는 한계가 있다. 실제로 SR을 실용적으로 사용하기 위한 절충책이 SDR이라고 볼 수 있다.
SR에서도 한 발 더 나아가 디바이스가 주위 환경을 항상 추적하여 환경 변화에 자체적으로 대응하는 방법을 생각할 수 있다. 즉, CR은 디바이스 자체가 주위 환경을 알아내고 그에 맞는 수신 송신을 자체적으로 결정하는 것이다. 예를 들면, 주파수 대역을 유동적으로 사용하는 DARPA XG와 같은 디바이스를 말한다.
따라서 CR은 전체 시스템의 유연성을 위한 컨트롤 방식이라고 볼 수 있으며, CR이라는 새로운 시스템을 만드는 것이 아니라 현재의 라디오 시스템이나 SDR 시스템에도 적용될 수 있다. 다만, 현재의 라디오 시스템이나 SDR 시스템에 각 디바이스들에 CR을 적용할 수 있는 능력(주위 통신 환경을 파악하고 적응할 수 있는 능력)이 주어져야만 한다.
IEEE에서는 CR을 ‘주위 환경과 내부 상태를 인식할 수 있고, 그 정보와 미리 정해져 있는 목표를 참조하여 자기의 행위를 바꿀 수 있는 라디오‘라고 정의하고 있다.

SDR의 전망
SDR은 고정된 주파수와 무선 통신망에 연결되는 통신 기구를 여러 주파수와 여러 통신망에 접속시키는 통신 기구로 바꾸는 기술이다. 그러나 SDR의 영향은 기술적인 면에서 뿐만 아니고 통신 기업 전체를 뒤흔들어 놓는 기반이 될 것으로 예상된다.
이와 비슷한 예로 컴퓨터 산업을 볼 수 있다. 1980년대까지 컴퓨터 산업은 IBM, DEC, CDC등 수십 개의 회사에서 제작된 컴퓨터에 의존하고 있었다. 각 회사에서는 응용 프로그램, 운영 체계, 마더보드, 그리고 CPU 칩을 자기 나름대로 제작하여 컴퓨터를 한 시스템으로 판매하였다. 그러던 것이 PC의 도입으로 하드웨어 컴퓨터의 응용 프로그램은 아무나 제작하여 사용할 수 있는 열린 시스템으로 바뀌게 되었다. 전에는 IBM 컴퓨터면 IBM에서 개발한 프로그램밖에 사용할 수 없었으나, PC에서는 좋은 프로그램은 따로 제작되어 판매된다.
SDR도 통신 산업을 열린 시스템으로 바꾸는 출발점이라고 볼 수 있다. 현재는 루슨트/알카텔, 에릭슨, 노키아/지멘스 등의 각 통신 회사에서 제공하는 장비 및 서비스를 모두 사용해서 통신망을 구축하며 운영한다. SDR의 도입으로 통신망의 각 부분이 제 3자의 장비나 프로그램으로 제공 회사에 상관없이 구축될 수 있다(그림 21).
우선 군통신이나 휴대폰 망에서는 RF 부분이 주파수 대역마다 RF Head가 제작되어 있어서 필요한 주파수 대역에 맞추면 된다. 또한 신호 처리 부분도 필요한 속도나 신호 모양에 맞게 하드웨어가 나와 있어 맞는 부분을 구입하면 되게끔 되어 있다. 그러므로 휴대용 통신 기구를 제작하는 데는 사실상 현재로써는 자체 개발하지 않더라도 필요한 부분을 구입하여 단 시간에 제작은 가능하다.
그러나 전체적인 통신망을 구축하는 데는 아직도 이러한 부분별 제작이 가능하지 않다. 그 중 가장 큰 장애가 되는 것이 주파수 대역의 사용권이라고 볼 수 있다. 현재는 사용될 주파수 대역을 정부로부터 허가를 받아야 한다. 주파수 사용권에도 상당한 투자가 필요하지만, 사용권이 허가되어도 그 주파수 대역에 맞는 망을 구축하는 데는 서비스가 제공되기 전에 투자되어야 하는 상당한 자본을 요구하게 된다.
앞으로의 4G 시스템은 광대역의 주파수 대역을 필요로 한다. 하지만 이미 허가된 다른 주파수 대역과 충돌되지 않는 광대역 주파수 영역을 우선 확보하기가 힘들다. 따라서 사용되고 있는 주파수 대역과 공존하는 시스템이 필요하며, 다른 주파수 대역에 되도록이면 방해가 되어서는 안 된다. 새로운 시스템이 기존의 주파수 대역에 얼마만큼의 방해를 미치는지에 대한 이론적인 바탕은 있어야 하겠지만, 우선 새 시스템을 설치하고 직접 측정하여 방해 정도가 허용되는지를 판단해야 한다. 새 시스템의 모든 부분이 하드웨어로 되어 있으면, 방해치가 허용치를 넘을 경우에 그 주파수 대역에 대한 조절을 해 주기가 힘들게 된다. 따라서 SDR로 주파수 대역마다 방해치 조절을 할 수 있어야만 한다.
또한, 주파수 대역을 오랜 기간 동안 한 회사에만 허용하는 현재의 통신 정책은 광대역 시스템에서는 가능하지 않다. 따라서 통신 정책도 주파수 대역의 시한부 대여를 고려할 필요가 있다. 통신 정책에서의 시한부 대여뿐만 아니라 휴대용 통신 기구 자체에도 시한부 기능을 고려할 필요가 있다. 마치 소프트웨어를 실험적으로 시한부로 사용하게 하는 것과 같이 통신 기구에서도 시한부로 새 기능을 사용하게 하고 문제점이 발견되면 그 부분을 수정한 새 소프트웨어를 다운로드하게 할 수 있다. 통신 정책에서의 시한부 대여와 통신 기구에서의 시한부 기능은 새로운 시스템의 문제가 발견되어도 주어진 시간 안에 고쳐지거나 아니면 사용 허가가 자동적으로 취소되는 현실성을 가지게 된다.
SDR은 여러 통신 기능들이 하드웨어에서 소프트웨어로 바뀌는 기술적인 변화이지만 앞으로 미치게 될 영향은 단순히 기술적인 면을 뛰어넘어 훨씬 광범위한 통신 산업 전체의 구조를 바꾸게 될 것이다. SDR은 통신 기구에 국한되지 않고 통신망 전체, 통신 업체나 이에 맞춘 통신 정책의 미래 지향적인 개편 등 앞으로 전개될 새로운 통신 기업의 변화에 큰 원동력이 될 것이다.

멀티 코어 컴퓨터와 SDR 중제

SDR는 10년 전에 통신 시스템의 DSP와 다른 하드웨어를 소프트웨어화 하려는 움직임으로 시작된 프로젝트로, 주로 군수용으로 계획되었지만 현재는 일반 상품화가 가능한 단계에 이르렀다. 여기에 크게 공헌한 것은 지난 10년 사이 상당한 발전을 이룬 컴퓨터의 속도와 능력이다. 현재의 컴퓨터들이 멀티 코어 구조로 바뀌면서 한 코어 구조의 컴퓨터에 비해 몇 배의 능력을 낼 수 있게 된 것이다.
SDR에서 사용하는 프로그램들은 통신 기능에만 한정되기 때문에 실제로 멀티 코어 컴퓨터에서 병행 프로그램으로 문제되는 동기성이나 데이터 일관성은 사실 크게 대두되지 않는다. 따라서 어떤 면에서는 SDR이 멀티 코어의 장점을 그대로 이용할 수 있다고 할 수 있다. SDR에서의 문제점은 신호 처리가 제 시간에 빨리 이루어지도록 하는 것인데 이는 빠른 멀티 코어 컴퓨터로 특수한 통신 회로를 사용하지 않고도 가능하다. 통신 신호 처리의 속도는 멀티 코어 컴퓨터로 가능해졌지만, 멀티 코어화한 SDR에서 아직 처리해야 할 것은 송수신에 하드웨어로 사용하는 RF 부분이 제 시간에 신호를 보내고 받을 수 있도록 주기적으로 신호를 처리하는 부분이다.
예를 들어, Vanu Anywave 시스템에서는 주기적으로 신호를 RF 부분에 보내기 위해, 소프트웨어로 신호가 만들어지면 그 신호가 언제 RF부분에서 아날로그 신호로 보내져야 하는 지 그 시간을 신호와 더불어 RF 부분에 보낸다. 따라서 RF 부분에서는 소프트웨어에서 보내오는 신호와 그 시간을 계속 저장하였다가 주기적으로 시간에 맞는 신호만 선택하여 하드웨어로 처리하면 된다.
필요한 SDR 시스템에 따라 그에 맞는 소프트웨어적인 적응을 통해 시스템 제작도 가능할 것으로 보인다. 일단 이러한 SDR 시스템들이 점차 시장에 많이 진출하게 되면, 통신 기업에 또 다른 혁명이 일어날 가능성이 있다. 아직 AT&T, 컴캐스트 등의 국한된 회사에 의해서만 제공되던 서비스들이 다른 회사에 의해서도 적은 자본과 기술진에 의해 특수 하드웨어를 사용하지 않고도 여러 SDR 제품으로 모여 보급될 수 있기 때문이다.
회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지