shopkeeper/korean_wiki_content_only_120125 huggingface dataset:
주소 생성 장치(AGU)는 때때로 주소 계산 장치(ACU)라고도 불리는데, CPU가 메인 메모리에 접근하는 데 사용하는 주소를 계산하는 CPU 내부의 실행 장치이다. 주소 계산을 CPU의 나머지 부분과 병렬로 작동하는 별도의 회로로 처리함으로써 다양한 기계어 명령어를 실행하는 데 필요한 CPU 사이클 수가 줄어들어 성능 향상을 가져올 수 있다.
다양한 연산을 수행하는 동안 CPU는 메모리에서 데이터를 가져오는 데 필요한 메모리 주소를 계산해야 한다. 예를 들어, 배열 요소의 메모리 내 위치는 CPU가 실제 메모리 위치에서 데이터를 가져오기 전에 계산되어야 한다. 이러한 주소 생성 계산에는 덧셈, 뺄셈, 모듈로 연산, 또는 비트 시프트와 같은 다양한 정수 산술 연산이 포함된다. 종종 메모리 주소를 계산하는 것은 하나 이상의 범용 기계 명령어를 포함하며, 이는 반드시 빠르게 디코딩 및 실행되지 않는다. CPU 설계에 AGU를 통합하고 AGU를 사용하는 특수 명령어를 도입함으로써 다양한 주소 생성 계산을 CPU의 나머지 부분에서 오프로드할 수 있으며, 종종 단일 CPU 사이클 내에서 빠르게 실행될 수 있다.
AGU의 기능은 특정 CPU와 그 아키텍처에 따라 다르다. 따라서 일부 AGU는 더 많은 주소 계산 연산을 구현하고 노출하는 반면, 일부는 한 번에 여러 피연산자에 대해 작동할 수 있는 더 고급 전문 명령어도 포함한다. 일부 CPU 아키텍처는 여러 AGU를 포함하여 두 개 이상의 주소 계산 연산이 동시에 실행될 수 있도록 하며, 이는 고급 CPU 설계의 슈퍼스칼라 특성으로 인해 추가적인 성능 향상을 가져온다. 예를 들어, 인텔은 샌디브리지 및 하스웰 마이크로아키텍처에 여러 AGU를 통합하여 여러 메모리 접근 명령어를 병렬로 실행할 수 있도록 함으로써 CPU 메모리 서브시스템의 대역폭을 증가시킨다.
메모리 관리 장치 (MMU).
많은 마이크로프로세서(스마트폰 및 데스크톱, 노트북, 서버 컴퓨터에 사용됨)에는 메모리 관리 장치가 있어, 논리적 주소를 물리적 RAM 주소로 변환하고, 메모리 보호 및 페이징 기능을 제공하며, 이는 가상 메모리에 유용하다. 더 간단한 프로세서, 특히 마이크로컨트롤러는 일반적으로 MMU를 포함하지 않는다.
캐시.
CPU 캐시는 컴퓨터의 중앙 처리 장치(CPU)가 주기억장치에서 데이터에 접근하는 평균 비용(시간 또는 에너지)을 줄이기 위해 사용하는 하드웨어 캐시이다. 캐시는 프로세서 코어에 더 가깝고 더 빠르며 작은 메모리로, 자주 사용되는 주 메모리 위치의 데이터 사본을 저장한다. 대부분의 CPU는 명령어 캐시 및 데이터 캐시를 포함하여 서로 다른 독립적인 캐시를 가지며, 데이터 캐시는 일반적으로 여러 캐시 레벨(L1, L2, L3, L4 등)의 계층 구조로 구성된다. 각 상위 캐시 레벨은 일반적으로 이전 레벨보다 느리지만 크며, L1이 가장 빠르고 CPU에 가장 가깝다.
모든 현대 (빠른) CPU는 (몇 가지 특수한 예외를 제외하고 ) 여러 수준의 CPU 캐시를 가지고 있다. 캐시를 사용한 최초의 CPU는 하나의 캐시 수준만 가졌다. 나중에 등장한 레벨 1 캐시와 달리 L1d(데이터용)와 L1i(명령어용)로 분할되지 않았다. 현재 캐시를 사용하는 거의 모든 CPU는 분할된 L1 캐시를 가지고 있다. 또한 L2 캐시와 더 큰 프로세서의 경우 L3 캐시도 가지고 있다. L2 캐시는 일반적으로 분할되지 않고 이미 분할된 L1 캐시의 공통 저장소 역할을 한다. 멀티 코어 프로세서의 각 코어는 전용 L2 캐시를 가지며 일반적으로 코어 간에 공유되지 않는다. L3 캐시 및 더 높은 수준의 캐시는 코어 간에 공유되며 분할되지 않는다. L4 캐시는 현재 흔하지 않으며, 일반적으로 별도의 다이 또는 칩에 있는 SRAM이 아닌 DRAM에 있다. 이는 역사적으로 L1에서도 마찬가지였지만, 더 큰 칩은 마지막 레벨을 제외하고 모든 캐시 레벨을 통합할 수 있게 했다. 각 추가 캐시 레벨은 더 크고 다르게 최적화되는 경향이 있다.
대부분의 CPU가 가지고 있는 메모리 관리 장치(MMU)의 일부인 변환 색인 버퍼(TLB)와 같이 다른 유형의 캐시도 존재한다(위에서 언급한 가장 중요한 캐시의 "캐시 크기"에는 포함되지 않음).
캐시는 일반적으로 2의 거듭제곱(예: 2, 8, 16 등 키비바이트 또는 메비바이트(더 큰 비L1 캐시의 경우) 크기로 되어 있지만, IBM z13은 96 KiB의 L1 명령어 캐시를 가지고 있다.
클럭 속도.
대부분의 CPU는 동기 회로이다. 이는 순차적인 연산의 속도를 조절하기 위해 클럭 신호를 사용한다는 것을 의미한다. 클럭 신호는 외부 발진 회로에 의해 생성되며, 이 회로는 주기적인 방형파 형태로 초당 일정한 수의 펄스를 생성한다. 클럭 펄스의 주파수는 CPU가 명령어를 실행하는 속도를 결정하며, 결과적으로 클럭이 빠를수록 CPU는 초당 더 많은 명령어를 실행한다.
CPU의 적절한 작동을 보장하기 위해 클럭 주기는 모든 신호가 CPU를 통해 전파(이동)하는 데 필요한 최대 시간보다 길다. 클럭 주기를 최악의 전달 지연보다 훨씬 높은 값으로 설정함으로써, 전체 CPU와 CPU가 상승 및 하강하는 클럭 신호의 "가장자리"를 따라 데이터를 이동시키는 방식을 설계할 수 있다. 이는 설계 관점과 부품 수 관점 모두에서 CPU를 크게 단순화하는 장점이 있다. 그러나 이는 CPU의 일부 부분이 훨씬 빠르더라도 전체 CPU가 가장 느린 요소들을 기다려야 한다는 단점도 수반한다. 이러한 한계는 CPU 병렬성을 높이는 다양한 방법(아래 참조)에 의해 크게 보완되었다.
그러나 아키텍처 개선만으로는 전역 동기 CPU의 모든 단점을 해결할 수 없다. 예를 들어, 클럭 신호는 다른 전기 신호의 지연에 영향을 받는다. 점점 더 복잡해지는 CPU에서 높은 클럭 속도는 전체 장치에서 클럭 신호의 위상(동기화)을 유지하기 어렵게 만든다. 이로 인해 많은 현대 CPU는 단일 신호가 CPU 오작동을 유발할 정도로 크게 지연되는 것을 방지하기 위해 여러 개의 동일한 클럭 신호가 제공되어야 한다. 클럭 속도가 급격히 증가함에 따라 또 다른 주요 문제는 CPU에서 소산되는 열량이다. 지속적으로 변하는 클럭은 사용 여부와 관계없이 많은 구성 요소를 전환시킨다. 일반적으로 전환하는 구성 요소는 정적 상태의 요소보다 더 많은 에너지를 사용한다. 따라서 클럭 속도가 증가할수록 에너지 소비도 증가하여 CPU는 CPU 냉각 솔루션 형태의 더 많은 열 방출을 필요로 한다.
불필요한 구성 요소의 스위칭을 처리하는 한 가지 방법은 클럭 게이팅이라고 불리며, 이는 불필요한 구성 요소에 대한 클럭 신호를 차단하는 것(실질적으로 비활성화)을 포함한다. 그러나 이는 구현하기 어렵다고 여겨지며, 따라서 매우 낮은 전력 설계 외에는 일반적인 용도로 사용되지 않는다. 광범위한 클럭 게이팅을 사용하는 주목할 만한 최근 CPU 설계 중 하나는 엑스박스 360에 사용된 IBM 파워PC 기반 제논이다. 이는 엑스박스 360의 전력 요구 사항을 줄인다.
클럭 없는 CPU.
전역 클럭 신호의 일부 문제를 해결하는 또 다른 방법은 클럭 신호를 아예 없애는 것이다. 전역 클럭 신호를 제거하면 여러 면에서 설계 프로세스가 상당히 복잡해지지만, 비동기(또는 클럭 없는) 설계는 유사한 동기 설계에 비해 전력 소비 및 열 방출 측면에서 뚜렷한 장점을 제공한다. 다소 흔하지는 않지만, 전역 클럭 신호를 사용하지 않고 완전한 비동기 CPU가 구축되기도 했다. 이 중 주목할 만한 두 가지 예로는 ARM 호환 AMULET과 MIPS R3000 호환 MiniMIPS가 있다.
클럭 신호를 완전히 제거하는 대신, 일부 CPU 설계는 장치의 특정 부분이 비동기식으로 작동하도록 허용한다. 예를 들어, 비동기식 ALU와 슈퍼스칼라 파이프라인을 함께 사용하여 일부 산술 성능 향상을 달성하는 식이다. 완전히 비동기식 설계가 동기식 설계와 유사하거나 더 나은 수준의 성능을 발휘할 수 있는지 여부는 아직 명확하지 않지만, 최소한 간단한 수학 연산에서는 탁월한 성능을 보여준다. 이러한 점은 우수한 전력 소비 및 열 방출 특성과 결합되어 임베디드 컴퓨터에 매우 적합하게 만든다.
전압 조정 모듈.
많은 현대 CPU는 다이 통합 전력 관리 모듈을 가지고 있으며, 이는 CPU 회로에 온디맨드 전압 공급을 조절하여 성능과 전력 소비의 균형을 유지할 수 있도록 한다.
정수 범위.
모든 CPU는 수치 값을 특정 방식으로 표현한다. 예를 들어, 일부 초기 디지털 컴퓨터는 숫자를 친숙한 10진법 기수법 값으로 표현했으며, 다른 컴퓨터는 2-5진법 또는 3진법과 같은 더 특이한 표현을 사용하기도 했다. 거의 모든 현대 CPU는 숫자를 이진 형태로 표현하며, 각 숫자는 "높음" 또는 "낮음" 전압과 같은 두 값의 물리량으로 표현된다.
수치 표현과 관련하여 CPU가 표현할 수 있는 정수 숫자의 크기와 정밀도가 있다. 이진 CPU의 경우, 이는 CPU가 한 번의 연산으로 처리할 수 있는 비트 수(이진 인코딩된 정수의 유효 숫자)로 측정되며, 일반적으로 워드 크기, 비트 너비, 데이터 경로 너비, 정수 정밀도 또는 정수 크기라고 불린다. CPU의 정수 크기는 CPU가 직접 작동할 수 있는 정수 값의 범위를 결정한다. 예를 들어, 8비트 CPU는 8비트로 표현되는 정수를 직접 조작할 수 있으며, 이는 256(28)개의 이산 정수 값의 범위를 가진다.
정수 범위는 CPU가 직접 주소 지정할 수 있는 메모리 위치의 수에도 영향을 미칠 수 있다(주소는 특정 메모리 위치를 나타내는 정수 값임). 예를 들어, 이진 CPU가 메모리 주소를 나타내는 데 32비트를 사용하면 232개의 메모리 위치를 직접 주소 지정할 수 있다. 이러한 한계를 우회하고 다양한 다른 이유로 인해 일부 CPU는 추가 메모리를 주소 지정할 수 있는 메커니즘(메모리 관리 또는 뱅크 전환과 같은)을 사용한다.
워드 크기가 큰 CPU는 더 많은 회로를 필요로 하므로 물리적으로 더 크고, 비용이 더 많이 들며, 더 많은 전력을 소비한다(따라서 더 많은 열을 발생시킨다). 그 결과, 훨씬 더 큰 워드 크기(예: 16, 32, 64, 심지어 128비트)의 CPU를 사용할 수 있음에도 불구하고, 더 작은 4비트 또는 8비트 마이크로컨트롤러가 현대 애플리케이션에서 흔히 사용된다. 그러나 더 높은 성능이 요구될 때는 더 큰 워드 크기의 이점(더 넓은 데이터 범위 및 주소 공간)이 단점을 능가할 수 있다. CPU는 크기와 비용을 줄이기 위해 워드 크기보다 짧은 내부 데이터 경로를 가질 수 있다. 예를 들어, IBM 시스템/360의 명령어 집합은 32비트 명령어 집합이었지만, 시스템/360 모델 30과 모델 40은 산술 논리 장치에 8비트 데이터 경로를 가지고 있었으므로, 32비트 덧셈은 피연산자의 각 8비트마다 한 사이클씩 총 4사이클이 필요했다. 그리고 모토로라 68000 시리즈 명령어 집합은 32비트 명령어 집합이었지만, 모토로라 68000과 모토로라 68010은 산술 논리 장치에 16비트 데이터 경로를 가지고 있었으므로, 32비트 덧셈은 두 사이클이 필요했다.
더 낮은 비트 길이와 더 높은 비트 길이 모두의 이점을 얻기 위해, 많은 명령어 집합은 정수 및 부동소수점 데이터에 대해 다른 비트 너비를 가지며, 해당 명령어 집합을 구현하는 CPU가 장치의 다른 부분에 대해 다른 비트 너비를 가질 수 있도록 한다. 예를 들어, IBM 시스템/360 명령어 집합은 주로 32비트였지만, 부동소수점 숫자의 정확성과 범위 확장을 용이하게 하기 위해 64비트 부동소수점 값을 지원했다. 시스템/360 모델 65는 십진 및 고정 소수점 이진 산술을 위한 8비트 가산기와 부동소수점 산술을 위한 60비트 가산기를 가졌다. 많은 후기 CPU 설계는 유사한 혼합 비트 너비를 사용하는데, 특히 프로세서가 정수 및 부동소수점 기능의 합리적인 균형이 요구되는 범용 용도로 사용될 때 그렇다.
병렬성.
이전 섹션에서 설명한 CPU의 기본 작동 방식은 CPU가 취할 수 있는 가장 간단한 형태를 설명한다. 일반적으로 서브스칼라라고 불리는 이러한 유형의 CPU는 한 번에 하나 또는 두 개의 데이터 조각에 대해 하나의 명령을 작동하고 실행한다. 즉, 클럭 사이클당 명령어 처리 횟수(IPC &lt; 1)가 1 미만이다.
이러한 과정은 서브스칼라 CPU에서 본질적인 비효율성을 야기한다. 한 번에 하나의 명령어만 실행되기 때문에, 전체 CPU는 다음 명령어로 진행하기 전에 해당 명령어가 완료될 때까지 기다려야 한다. 결과적으로 서브스칼라 CPU는 실행을 완료하는 데 한 클럭 사이클 이상이 걸리는 명령어에서 "멈추게" 된다. 두 번째 실행 장치를 추가해도(아래 참조) 성능이 크게 향상되지 않는다. 한 경로가 멈추는 대신 이제 두 경로가 멈추고 사용되지 않는 트랜지스터 수가 증가한다. CPU의 실행 리소스가 한 번에 하나의 명령만 작동할 수 있는 이러한 설계는 스칼라 성능(클럭 사이클당 하나의 명령어, IPC = 1)에만 도달할 수 있다. 그러나 성능은 거의 항상 서브스칼라(클럭 사이클당 명령어 처리 횟수 1 미만, IPC &lt; 1)이다.
스칼라 및 그 이상의 성능을 달성하려는 시도는 CPU가 선형적으로 작동하는 대신 병렬적으로 작동하도록 하는 다양한 설계 방법론을 낳았다. CPU의 병렬성을 언급할 때, 이러한 설계 기술을 분류하는 데 두 가지 용어가 일반적으로 사용된다:
각 방법론은 구현 방식과 애플리케이션의 CPU 성능 향상에 미치는 상대적인 효과 측면에서 다르다.
명령어 수준 병렬성.
병렬성 증가를 위한 가장 간단한 방법 중 하나는 이전 명령어가 실행을 마치기 전에 명령어 가져오기 및 디코딩의 첫 단계를 시작하는 것이다. 이는 명령어 파이프라인이라고 알려진 기술이며, 거의 모든 현대 범용 CPU에서 사용된다. 파이프라이닝은 실행 경로를 이산적인 단계로 분할함으로써 여러 명령어를 동시에 실행할 수 있도록 한다. 이러한 분리는 조립 라인에 비유될 수 있으며, 각 단계에서 명령어가 더 완성되어 실행 파이프라인을 벗어나 은퇴된다.
그러나 파이프라이닝은 다음 작업을 완료하는 데 이전 작업의 결과가 필요한 상황을 발생시킬 수 있다. 이러한 상황을 종종 데이터 종속성 충돌이라고 부른다. 따라서 파이프라인 프로세서는 이러한 종류의 조건을 확인하고 필요한 경우 파이프라인의 일부를 지연시켜야 한다. 파이프라인 프로세서는 파이프라인 스톨(명령어가 한 단계에서 한 클럭 사이클 이상을 소비하는 경우)에 의해서만 저해되어 거의 스칼라에 가까워질 수 있다.
명령어 파이프라이닝의 개선은 CPU 구성 요소의 유휴 시간 감소로 이어졌다. 슈퍼스칼라라고 불리는 설계에는 긴 명령어 파이프라인과 로드-스토어 장치, 산술 논리 장치, 부동소수점 장치, 주소 생성 장치와 같은 여러 개의 동일한 실행 장치가 포함된다. 슈퍼스칼라 파이프라인에서 명령어는 읽혀져 디스패처로 전달되며, 디스패처는 명령어를 병렬(동시)로 실행할 수 있는지 여부를 결정한다. 만약 가능하다면, 명령어는 실행 장치로 디스패치되어 동시 실행된다. 일반적으로 슈퍼스칼라 CPU가 한 사이클에 완료할 명령어 수는 동시에 실행 장치로 디스패치할 수 있는 명령어 수에 따라 달라진다.
슈퍼스칼라 CPU 아키텍처 설계의 가장 큰 어려움은 효율적인 디스패처를 만드는 데 있다. 디스패처는 명령어를 병렬로 실행할 수 있는지 여부를 신속하게 결정할 수 있어야 하며, 가능한 한 많은 실행 장치를 바쁘게 유지하는 방식으로 명령어를 디스패치해야 한다. 이를 위해서는 명령어 파이프라인이 가능한 한 자주 채워져야 하며, 상당한 양의 CPU 캐시가 필요하다. 또한 분기 예측, 투기적 실행, 레지스터 이름 변경, 비순차적 명령어 처리 및 트랜잭셔널 메모리와 같은 해저드 회피 기술이 높은 수준의 성능을 유지하는 데 중요하다. 조건부 명령어가 어떤 분기(또는 경로)를 택할지 예측하려고 시도함으로써 CPU는 전체 파이프라인이 조건부 명령어가 완료될 때까지 기다려야 하는 횟수를 최소화할 수 있다. 투기적 실행은 조건부 연산이 완료된 후 필요하지 않을 수도 있는 코드 부분을 실행함으로써 종종 미미한 성능 향상을 제공한다. 비순차적 명령어 처리는 데이터 종속성으로 인한 지연을 줄이기 위해 명령어 실행 순서를 다소 재정렬한다. 또한 단일 명령어 스트림, 다중 데이터 스트림의 경우, 동일한 유형의 많은 데이터를 처리해야 할 때, 현대 프로세서는 파이프라인의 일부를 비활성화하여 단일 명령어가 여러 번 실행될 때 CPU가 가져오기 및 디코딩 단계를 건너뛰고 특정 경우, 특히 비디오 제작 소프트웨어 및 사진 처리와 같은 고도로 단조로운 프로그램 엔진에서 성능을 크게 향상시킬 수 있다.
CPU의 일부가 슈퍼스칼라일 때, 그렇지 않은 부분은 스케줄링 스톨로 인해 성능 저하를 겪는다. P5 펜티엄은 클럭 사이클당 하나의 명령어를 받아들일 수 있는 두 개의 슈퍼스칼라 ALU를 가졌지만, FPU는 그러지 못했다. 따라서 P5는 정수 슈퍼스칼라였지만 부동소수점 슈퍼스칼라는 아니었다. P5 아키텍처의 후속 모델인 인텔의 P6는 부동소수점 기능에 슈퍼스칼라 기능을 추가했다.
간단한 파이프라이닝과 슈퍼스칼라 설계는 CPU가 클럭 사이클당 한 명령어 이상의 속도로 명령어를 실행할 수 있도록 하여 CPU의 ILP를 증가시킨다. 대부분의 현대 CPU 설계는 적어도 어느 정도는 슈퍼스칼라이며, 지난 10년 동안 설계된 거의 모든 범용 CPU는 슈퍼스칼라이다. 최근 몇 년 동안 고성능 ILP 컴퓨터 설계의 일부 초점은 CPU 하드웨어에서 소프트웨어 인터페이스 또는 명령어 집합(ISA)으로 옮겨졌다. 매우 긴 명령어 워드(VLIW) 전략은 일부 ILP가 소프트웨어에 의해 직접 암시되도록 하여 ILP를 높이는 CPU의 작업을 줄이고 설계 복잡성을 줄인다.
작업 수준 병렬성.
성능을 달성하기 위한 또 다른 전략은 여러 스레드 또는 프로세스를 병렬로 실행하는 것이다. 이 연구 분야는 병렬 컴퓨팅으로 알려져 있다. 플린 분류에서 이 전략은 다중 명령어 스트림, 다중 데이터 스트림(MIMD)으로 알려져 있다.
이를 위해 사용되는 한 가지 기술은 다중 처리(MP)이다. 이 기술의 초기 유형은 대칭형 다중 처리(SMP)로 알려져 있으며, 소수의 CPU가 메모리 시스템의 일관된 뷰를 공유한다. 이 방식에서 각 CPU는 메모리의 최신 뷰를 지속적으로 유지하기 위한 추가 하드웨어를 가지고 있다. 메모리의 오래된 뷰를 피함으로써 CPU는 동일한 프로그램에서 협력할 수 있으며 프로그램은 한 CPU에서 다른 CPU로 마이그레이션할 수 있다. 소수를 넘어 협력하는 CPU의 수를 늘리기 위해 1990년대에는 불균일 기억 장치 접근(NUMA) 및 디렉토리 기반 일관성 프로토콜(directory-based coherence protocols)과 같은 방식이 도입되었다. SMP 시스템은 소수의 CPU로 제한되는 반면 NUMA 시스템은 수천 개의 프로세서로 구축되었다. 처음에는 다중 처리가 여러 개의 개별 CPU와 보드를 사용하여 프로세서 간의 상호 연결을 구현했다. 프로세서와 그 상호 연결이 모두 단일 칩에 구현될 때, 이 기술은 칩 수준 다중 처리(CMP)로 알려져 있으며, 단일 칩은 멀티 코어 프로세서라고 불린다.
나중에 단일 프로그램에도 더 세밀한 병렬성이 존재한다는 것이 인식되었다. 단일 프로그램은 여러 스레드(또는 함수)를 가질 수 있으며, 이들은 별도로 또는 병렬로 실행될 수 있다. 이 기술의 초기 사례 중 일부는 직접 메모리 접근과 같은 입출력 처리를 계산 스레드와 별개의 스레드로 구현했다. 이 기술에 대한 더 일반적인 접근 방식은 1970년대에 시스템이 여러 계산 스레드를 병렬로 실행하도록 설계되었을 때 도입되었다. 이 기술은 멀티스레딩으로 알려져 있다. 이 접근 방식은 MP의 경우 전체 CPU와 달리 CPU 내의 소수의 구성 요소만 복제하여 MT를 지원하므로 다중 처리보다 비용 효율적인 것으로 간주된다. MT에서는 실행 장치와 캐시를 포함한 메모리 시스템이 여러 스레드 간에 공유된다. MT의 단점은 멀티스레딩에 대한 하드웨어 지원이 MP보다 소프트웨어에 더 많이 노출되어 운영 체제와 같은 감독 소프트웨어가 MT를 지원하기 위해 더 큰 변경을 겪어야 한다는 것이다. 구현된 MT의 한 유형은 시간적 멀티스레딩으로, 외부 메모리에서 데이터가 반환되기를 기다리며 스톨될 때까지 하나의 스레드가 실행된다. 이 방식에서 CPU는 실행 준비가 된 다른 스레드로 빠르게 컨텍스트 스위칭하며, 스위칭은 종종 울트라SPARC T1과 같이 한 CPU 클럭 사이클 내에서 이루어진다. 다른 유형의 MT는 동시 멀티스레딩으로, 여러 스레드의 명령어가 한 CPU 클럭 사이클 내에서 병렬로 실행된다.
1970년대부터 2000년대 초반까지 수십 년 동안 고성능 범용 CPU 설계의 초점은 주로 파이프라이닝, 캐시, 슈퍼스칼라 실행, 비순차적 실행 등과 같은 기술을 통해 높은 ILP를 달성하는 데 있었다. 이러한 추세는 펜티엄 4와 같은 크고 전력을 많이 소비하는 CPU로 절정을 이루었다. 2000년대 초반에는 CPU 작동 주파수와 주 메모리 작동 주파수 간의 격차 확대와 더불어 더욱 난해한 ILP 기술로 인한 CPU 전력 소모 증가로 인해 CPU 설계자들은 ILP 기술을 통한 더 높은 성능 달성에서 좌절을 겪었다.
그 후 CPU 설계자들은 트랜잭션 처리와 같은 상업용 컴퓨팅 시장에서 아이디어를 빌려왔다. 이러한 시장에서는 여러 프로그램의 총체적 성능, 즉 처리량 컴퓨팅이 단일 스레드 또는 프로세스의 성능보다 더 중요했다.
이러한 강조점의 역전은 듀얼 및 그 이상의 코어 프로세서 설계의 확산과 특히 인텔의 덜 슈퍼스칼라적인 P6 아키텍처와 유사한 새로운 설계에서 입증된다. 여러 프로세서 제품군의 최신 설계는 엑스박스 360의 트리플 코어 파워PC 설계와 플레이스테이션 3의 7코어 셀 마이크로프로세서와 같은 비디오 게임 콘솔 CPU를 포함하여 칩 수준 다중 처리를 특징으로 한다.
데이터 병렬성.
덜 흔하지만 점점 더 중요해지는 프로세서(및 실제로 일반 컴퓨팅) 패러다임은 데이터 병렬성을 다룬다. 앞서 논의된 프로세서들은 모두 어떤 종류의 스칼라 장치로 언급된다. 이름에서 알 수 있듯이 벡터 프로세서는 하나의 명령어 컨텍스트에서 여러 데이터 조각을 처리한다. 이는 각 명령어마다 하나의 데이터 조각을 처리하는 스칼라 프로세서와 대조된다. 플린 분류를 사용하여, 이러한 두 가지 데이터 처리 방식은 일반적으로 단일 명령어 스트림, 다중 데이터 스트림(SIMD) 및 단일 명령어 스트림, 단일 데이터 스트림(SISD)이라고 각각 불린다. 데이터 벡터를 처리하는 프로세서를 만드는 데 엄청난 유용성이 있는 이유는 대량의 데이터 세트에 대해 동일한 연산(예: 합계 또는 스칼라곱)을 수행해야 하는 경향이 있는 작업을 최적화하는 데 있다. 이러한 유형의 작업의 일부 고전적인 예로는 멀티미디어 애플리케이션(이미지, 비디오 및 사운드)뿐만 아니라 많은 유형의 과학 및 엔지니어링 작업이 있다. 스칼라 프로세서는 데이터 세트의 각 명령어와 값에 대한 가져오기, 디코딩 및 실행의 전체 프로세스를 완료해야 하는 반면, 벡터 프로세서는 하나의 명령으로 비교적 큰 데이터 세트에 대해 단일 연산을 수행할 수 있다. 이는 애플리케이션이 많은 단계를 필요로 하고 하나의 연산을 큰 데이터 세트에 적용하는 경향이 있을 때만 가능하다.
크레이-1과 같은 대부분의 초기 벡터 프로세서는 거의 전적으로 과학 연구 및 암호학 애플리케이션과 관련되어 있었다. 그러나 멀티미디어가 주로 디지털 미디어로 전환되면서 범용 프로세서에서 어떤 형태의 SIMD가 필요해졌다. 부동소수점 장치가 범용 프로세서에서 흔해지기 시작한 직후, SIMD 실행 장치에 대한 사양과 구현도 1990년대 중반에 범용 프로세서에 나타나기 시작했다. HP의 멀티미디어 가속 확장(MAX) 및 인텔의 MMX와 같은 이러한 초기 SIMD 사양 중 일부는 정수 전용이었다. 이는 일부 소프트웨어 개발자에게 상당한 장애물이 되었는데, SIMD의 이점을 누리는 많은 애플리케이션이 주로 부동소수점 숫자를 다루기 때문이었다. 점진적으로 개발자들은 이러한 초기 설계를 개선하고 재구성하여 현재의 일반적인 SIMD 사양 중 일부를 만들었으며, 이는 일반적으로 하나의 명령어 집합과 관련된다. 주목할 만한 현대적 예로는 인텔의 스트리밍 SIMD 확장(SSE)과 파워PC 관련 AltiVec(VMX로도 알려짐)이 있다.
하드웨어 성능 카운터.
많은 현대 아키텍처(임베디드 아키텍처 포함)는 종종 하드웨어 성능 카운터(HPC)를 포함하여 실행 중인 소프트웨어 메트릭의 저수준(명령어 수준) 수집, 벤치마킹, 디버깅 또는 분석을 가능하게 한다. HPC는 또한 반환 지향형 프로그래밍(ROP) 또는 시그레턴 지향 프로그래밍(sigreturn-oriented programming, SROP) 익스플로잇 등과 같은 소프트웨어의 비정상적이거나 의심스러운 활동을 발견하고 분석하는 데 사용될 수 있다. 이는 일반적으로 소프트웨어 보안 팀에서 악성 바이너리 프로그램을 평가하고 찾는 데 사용된다.
많은 주요 벤더(예: IBM, 인텔, AMD, Arm)는 CPU의 하드웨어 레지스터에서 데이터를 수집하여 메트릭을 얻는 데 사용할 수 있는 소프트웨어 인터페이스(일반적으로 C/C++로 작성됨)를 제공한다. 운영 체제 벤더는 또한 `perf`(리눅스)와 같은 소프트웨어를 제공하여 실행 중인 커널 및 애플리케이션의 CPU 이벤트를 기록하고, 벤치마킹하거나, 트레이싱한다.
하드웨어 카운터는 CPU의 핵심 요소(기능 단위, 캐시, 주기억장치 등)와 관련된 포괄적인 성능 메트릭을 수집하는 데 낮은 오버헤드를 제공하는 방법으로, 소프트웨어 프로파일러에 비해 상당한 이점이 있다. 또한, 일반적으로 프로그램의 기본 소스 코드를 수정할 필요가 없다. 하드웨어 설계는 아키텍처마다 다르기 때문에 하드웨어 카운터의 특정 유형과 해석도 달라진다.
특권 모드.
대부분의 현대 CPU는 운영 체제와 가상화를 지원하기 위해 특권 모드를 가지고 있다.
클라우드 컴퓨팅은 가상화를 사용하여 별도의 사용자를 위한 가상 중앙 처리 장치(vCPU)를 제공할 수 있다.
vCPU는 가상 사설 서버(VPS)와 혼동해서는 안 된다.
호스트는 가상 시스템이 작동하는 물리적 머신과 같은 가상 시스템이다. 여러 물리적 머신이 함께 작동하고 전체적으로 관리될 때, 그룹화된 컴퓨팅 및 메모리 자원은 클러스터를 형성한다. 일부 시스템에서는 클러스터에 동적으로 추가하고 제거할 수 있다. 호스트 및 클러스터 수준에서 사용 가능한 자원은 리소스 풀로 세분화될 수 있다.
프로세서의 성능 또는 속도는 클럭 속도(일반적으로 헤르츠의 배수로 주어짐) 및 클럭당 명령어 수(IPC)를 비롯한 여러 요인에 따라 달라지며, 이들 요인들이 함께 CPU가 수행할 수 있는 초당 명령 수의 요인으로 작용한다.
많은 보고된 IPS 값은 분기가 거의 없는 인위적인 명령어 시퀀스에서 "최고" 실행 속도를 나타내지만, 실제 작업 부하는 다양한 명령어와 애플리케이션의 혼합으로 구성되며, 일부는 다른 것보다 실행하는 데 더 오래 걸린다. 메모리 계층 구조의 성능 또한 프로세서 성능에 크게 영향을 미치며, 이는 IPS 계산에서 거의 고려되지 않는 문제이다. 이러한 문제 때문에 SPECint와 같이 이 목적을 위한 "벤치마크"라고 불리는 다양한 표준화된 테스트가 일반적으로 사용되는 애플리케이션에서 실제 유효 성능을 측정하기 위해 개발되었다.
컴퓨터의 처리 성능은 멀티 코어 프로세서를 사용하여 향상된다. 이는 본질적으로 두 개 이상의 개별 프로세서(이러한 맥락에서는 코어라고 함)를 하나의 집적 회로에 연결하는 것이다. 이상적으로는 듀얼 코어 프로세서가 단일 코어 프로세서보다 거의 두 배 강력할 것이다. 실제로는 불완전한 소프트웨어 알고리즘 및 구현으로 인해 성능 향상은 훨씬 작아 약 50%에 불과하다. 프로세서의 코어 수를 늘리면(예: 듀얼 코어, 쿼드 코어 등) 처리할 수 있는 작업량이 증가한다. 이는 프로세서가 이제 수많은 비동기 이벤트, 인터럽트 등을 처리할 수 있음을 의미하며, 이는 CPU가 과부하될 때 부담을 줄 수 있다. 이 코어는 처리 공장의 다른 층으로 생각할 수 있으며, 각 층은 다른 작업을 처리한다. 때때로 이 코어는 단일 코어만으로는 정보를 처리하기에 충분하지 않은 경우 인접한 코어와 동일한 작업을 처리한다. 멀티 코어 CPU는 추가 처리 능력을 제공함으로써 컴퓨터가 여러 작업을 동시에 실행하는 능력을 향상시킨다. 그러나 속도 증가는 추가된 코어 수에 정비례하지 않는다. 이는 코어들이 특정 채널을 통해 상호 작용해야 하며, 이러한 코어 간 통신이 사용 가능한 처리 속도의 일부를 소비하기 때문이다.
동시 멀티스레딩 및 언코어(uncore)와 같은 현대 CPU의 특정 기능(실제 CPU 자원을 공유하면서 활용도를 높이는 것을 목표로 함)으로 인해 성능 수준 및 하드웨어 사용 모니터링은 점차 복잡한 작업이 되었다. 이에 대한 응답으로 일부 CPU는 CPU의 다양한 부분의 실제 사용을 모니터링하고 소프트웨어에서 접근 가능한 다양한 카운터를 제공하는 추가 하드웨어 논리를 구현한다. 예를 들어 인텔의 성능 카운터 모니터 기술이 있다.
오버클럭.
오버클럭은 CPU 성능을 높이기 위해 CPU(및 기타 구성 요소)의 클럭 속도를 높이는 과정이다. 오버클럭은 CPU 온도를 높여 과열을 유발할 수 있으므로, 대부분의 사용자는 오버클럭을 하지 않고 클럭 속도를 변경하지 않는다. 일부 구성 요소 버전(예: 인텔의 U 버전 CPU 또는 엔비디아의 OG GPU)은 오버클럭을 허용하지 않는다.
수학에서, 어떤 사상의 핵(核, )은 0의 원상의 포함 사상으로 생각할 수 있는 특별한 단사 사상이다. 범주론을 통해 추상적으로 정의할 수 있으나, 적절한 조건을 만족시키는 구체적 범주에서는 특정 원소의 원상의 포함 함수가 된다.
영 사상을 갖는 범주 formula_1 속의 사상 formula_2의 핵 formula_3은 다음과 같은 영 사상과의 동등자이다.
영 대상을 갖는 범주 속의 사상 formula_5에 대하여, formula_6인 formula_7가 존재한다면 formula_5를 정규 단사 사상(正規單射寫像, )이라고 한다. "정규"라는 용어는 군론의 정규 부분군에서 유래하였다. 임의의 영 대상을 갖는 범주에서, 정규 단사 사상은 (동등자이므로) 단사 사상이다.
아벨 범주에서 모든 사상은 핵을 가지며, 모든 단사 사상은 정규 단사 사상이다. 구체적으로, 아벨 범주에서 모든 단사 사상은 그 여핵의 핵과 같으며, 모든 전사 사상은 그 핵의 여핵과 같다.
벡터 공간과 가군.
환 formula_11 위의 왼쪽 가군의 범주 formula_12는 영 사상을 갖는 범주이며, 이 범주에서 모든 사상(가군 준동형)은 핵을 갖는다.
구체적으로, formula_13의 핵 formula_14는 다음과 같은 포함 함수이다.
formula_12에서 모든 단사 사상은 정규 단사 사상이다. 이는 (군이나 유사환의 경우와 달리) 임의의 부분 가군에 대한 몫가군을 정의할 수 있기 때문이다.
특히, 선형대수학에서 formula_11가 체일 경우, 체 위의 가군들은 벡터 공간이며, 벡터 공간의 범주에서는 핵이 존재한다. 특히, 행렬은 유한 차원 벡터 공간 사이의 선형 변환을 정의하며, 행렬의 핵은 벡터 공간의 범주에서의 핵이다. 선형대수학에서 핵은 영공간(零空間, )이라고 불리기도 한다.
군.
군과 군 준동형의 범주 formula_18에서, 영 사상은 1(군 연산의 항등원)로 가는 상수 함수이다. formula_18에서 모든 사상(군 준동형)은 핵을 갖는다.
구체적으로, formula_20의 핵 formula_21는 다음과 같은 포함 함수이다.
이 경우, formula_23는 formula_24의 정규 부분군을 이룬다.
아벨 군과 군 준동형의 범주 formula_9에서, 영 사상과 핵은 formula_18에서와 같다. 즉, 영 사상은 0(군 연산의 항등원)으로 가는 상수 함수이며, 핵은 0의 원상으로 가는 포함 함수이다. formula_9에서 단사 함수인 모든 군 준동형은 정규 단사 사상이다. 이는 아벨 군의 모든 부분군이 정규 부분군이기 때문이다.
유사환.
유사환과 유사환 준동형의 범주 formula_33에서, 영 사상은 0 (덧셈 항등원)으로 가는 상수 함수이다. formula_33에서 모든 사상은 핵을 갖는다.
구체적으로, formula_35의 핵 formula_36는 다음과 같은 포함 함수이다.
이 경우, formula_38는 formula_11의 아이디얼을 이룬다.
(곱셈 단위원을 갖는) 환과 환 준동형의 범주 formula_45에서 핵은 존재하지 않는다. 이는 아이디얼은 1을 포함하지 않을 수 있어 부분환을 이루지 못할 수 있기 때문이다.
점을 가진 공간.
점을 가진 공간의 범주 formula_46에서, 영 사상은 formula_47으로 가는 상수 함수이다. 이 범주에서 모든 사상 formula_48은 핵 formula_49을 가지며, 이는 formula_47의 원상에 대한 포함 함수이다.
정당(政黨) 또는 당(黨)은 공공 이익의 실현을 목표로 하여 정치적 견해를 같이 하는 사람들이 자발적으로 조직한 집단을 일컫는다. 정당은 정치의 기구·조직 가운데서 비교적 최근에 발달한 편에 속한다. 사회가 근대화됨에 따라 정치가 다원화하는 것을 반영하는 데 있어서 의회만으로는 충분하지 못하게 되어 여기서 생기는 투입과정의 차질을 보완하기 위하여 점차 정당이 형성되기 시작되었다.
서구의 정치사에서는 근대정당의 성립과 발전을 대체로 19세기 초부터 잡고 있으며 의회정치를 기준으로 해서 볼 때에는 나라에 따라 19세기 말에 이르러서야 정당정치의 전통이 확립되는 경우도 있다. 근세 이전은 말할 것도 없고 16세기에 이르는 사이에 정당이 발달하지 못했던 이유는 정치에 참여하는 인구가 한정되어 있었기 때문이다. 정치가 귀족이나 지식을 가진 계층에 의하여서만 이루어질 때 정치를 좌우하는 것은 합리성이며 또한 그 바탕은 동질적인 것이다. 이러한 단일의 정치적 주체에 대하여 처음에는 부르주아지가, 그리고 뒤이어서 프로레타리아가 도전하면서 정치는 복잡한 투쟁관계로 변모하게 되었다. 투쟁의 첫단계에서는 주로 폭력이 이기고 지는 것을 가름했으나 어느 쪽의 종국적인 승리도 있을 수 없다는 사실을 깨닫게 되어서는 타협과 선의의 경쟁이 룰(rule)이 되었고 이에 정당이 필요 불가결한 것으로 등장하게 된 것이다. 정당의 기본적인 개념을 정치사회적으로 보아 다원적 경쟁사회에서 성립하는 것으로 여길 때 현대의 전체주의적 국가에서 볼 수 있는 단일정당은 정당이라고 하기보다는 특수 기능을 장악한 정부의 한 조직으로 판단할 수 있다. 정당이란 어휘 자체가 원래 '부분적인 모임'이라는 뜻에서 만들어진 것이다. 또 현대의 신생 제국에서 대개의 경우 정당의 존재를 확인할 수 있긴 하나 서구적인 기준에서 보면 정당이라고 하기보다는 지배자의 손발과 같은 사조직이라고 하는 것이 타당할 때가 많다.
인간이 도당 또는 당파를 조직해서 정치적 목적을 달성하려고 한 역사는 오래된다. 이것을 인간의 투쟁본능의 표현으로 보는 설도 있으나, 어떻든 단결이 힘의 결집수단으로서 효과적이라는 단순한 이유가 작용하고 있음은 틀림이 없다. 정당도 이러한 당파현상이라고 할 수 있겠으나 단순한 도당과 정당 사이에서는 유사점보다도 상위점 쪽이 중요한 의미를 갖는다. 정당은 근대적 의회제도 아래서 정치권력을 위해 투쟁하는 조직이지만, 도당은 역사적으로 그 이전의 현상이며, 정치권력이 개인 내지 폐쇄적인 집단에 독점되었던 시대에 거기에 대항하는 집단으로서의 도당은 직접 폭력수단에 호소하지 않으면 안 되었다. 즉 암살이나 협박, 반란 같은 수단에 의존했는데, 권력측도 이에 대항해서 투옥, 사형 등의 위력수단으로 준열한 탄압을 가했다. 그 결과 반정부세력은 종종 비밀결사의 형태를 취하게 되고, 당파의 목적·구성원·조직·활동은 일체 비밀에 붙여지고, 이 비밀의 유지를 위해서는 엄격한 규율이 준수되었다. 한편 정당은 근대적 의회정치와 더불어 발전해 온 조직이다.
근대적 의회정치는
제도를 말한다.
‘전국민을 대표하는 의원’의 개념은 고정적 이해의 대립을 초월한 공적인 국가의 성립을 전제로 하며, 이해관계나 의견의 대립을 무력이 아니라 토론과 다수결로 해결한다는 것은 다수와 소수를 초월한 전체라는 개념이 인정되고 있는 것을 의미하며, 근대적 의회정치가 시민사회를 기초로 하는 근대국가에서 비로소 가능하게 되었다는 것을 말해 주고 있다. 이리하여 의회 내부에서 동지로서 의원을 모아 다수파의 자리를 차지하기 위한 노력이 벌어지고, 의원의 원내조직으로서 정당이 생기게 된 것은 극히 당연한 일이었다. 의회의 세력이 한층 더 강화되어 정부가 의회의 다수파를 기초로 해서 설립되게 되자 정당도 정권의 획득·유지를 위해 그 결속을 한층 더 강화하게 되었고, 또 유권자의 범위가 한층 더 확대됨에 따라 정당 자체가 선거활동의 영역에까지 그 활동범위를 넓히게 되었다. 이렇게 정당의 활동은 의회정치의 구조와 불가분의 관계에 있다.
정당이라는 조직의 목적을 어떻게 보는가에 관해서는 특정의 주의 및 정책의 실현이라고 하는 설과 정권의 획득·유지라고 하는 설이 있는데, 보다 현실적인 관점에서 후자의 설이 타당하다고 해야 할 것이다. 버크(1729년-1797년)는 '정당이란 그 성원 전원의 지지를 받는 특정원리에 입각해서 공동의 노력으로 국가적 이익을 추진시키는 것을 목적으로 하는 일단의 사람들의 결합체'라고 하는 유명한 정의를 내렸으나 실제로는 정책단체라고 볼 수 없는 정당이 적지 않다. 가령 미국의 양대 정당은 대통령선거가 있는 해의 여름에 각기 당대회를 열어 당의 강령을 발표하나, 양당 사이에 정책상의 차이는 별로 없고, 또 어느 당이건 선거강령과 집권 후의 정책 사이에는 차이가 있게 마련이다. 뿐만 아니라 의회에서 의안이 채결될 때에는 같은 당 소속의 의원이 찬반 양진영으로 갈라지는 것이 보통이다. 이러한 정당을 정책을 중심으로 결집한 사람들의 집단으로 보는 것은 비현실적이며, 오히려 정권의 획득과 유지를 목적으로 하는 정치단체로 보는 편이 타당할 것이다.
2개 이상의 정당이 다같이 정권장악을 목적으로 해서 활동한다는 것은 이들 정당이 서로 대립관계에 서서 정권을 둘러싸고 투쟁하는 조직이라는 것을 의미한다. 이 투쟁은 선거에서부터 시작되어 입법·사법·행정의 모든 영역에서 인사 및 정책에 관해 격렬히 전개된다. 그러나 정당이 투쟁조직이라는 것은 반드시 정당 상호간의 관계가 전부 적대적이라는 것을 의미하지는 않는다. 3개 이상의 정당이 존재할 때는 선거나 내각타도라는 공통의 목표를 위해 몇 개의 정당이 잠정적·부분적인 협력관계를 맺는 예가 적지 않다. 또한 연립내각도 이러한 잠정적·부분적 협력의 한 형태이다. 그러나 이러한 협력은 어디까지나 일시적·부분적이며, 결국은 투쟁의 한 국면에 지나지 않는다. 만약 지속적·전면적인 협력이 실현된다면 그것은 이미 정당의 병합을 의미하는 것이다. 투쟁조직으로서의 정당의 당면 과제는 투표자·지지자·당원 및 소속의원의 수를 늘리는 당세확장이지만, 이에 못지않게 중요한 것은 당원의 질을 높이고 그 사기를 고무해서 당의 결속을 강화하는 일이다. 왜냐하면 무원칙·무방침의 팽창정책이 당내에 많은 이질분자를 끌어들이는 결과를 낳아, 분파의 대립을 격화시켜 통제를 마비케 하고 결국은 당의 투쟁력 약화를 초래할 것이기 때문이다. 이런 점에서 말하면 정당은 대립정당이 완전히 약체·무력하게 되는 것을 바라기보다는 강력하기를 바란다. 강력한 경쟁대상이 있어야 당내의 결속이 공고해지는 것이며, 상대방이 무시해도 될 만큼 무력할 때는 당의 결속이 이완되어 내분이 생기는 예가 많다.
정당은 의회정치라는 기계를 움직이는 엔진이라고 할 만큼 중요한 공적 조직이며, 정당이 없는 민주정치는 생각할 수도 없다. 미국의 대통령선거나 비례대표제의 의원선거는 정당의 존재를 떠나서는 생각할 수 없으며, 의회의 의사운영도 정당이 없다면 극도의 혼란을 빚을 것이 틀림없다. 그리고 여당이 결정한 정책은 정부에 의해 실제로 시행될 수 있다. 이렇게 정당이 국가적 의의가 있는 중요한 공공의 기능을 가지고 있기는 하나, 그렇다고 정당에 국가기관적 성격이 있는 것은 아니다. 오히려 정당은 국가와는 다른 의미에서 사회에 기초를 두는 정치세력이며 본질적으로 다른 여러 가지의 결사와 동일하게 사적 성격을 띤다. 다시 말해서 정당은 근대국가에 있어서의 결사의 자유를 전제로 하는 정치결사로 특정의 정치적 목적을 공통으로 갖는 사람들의 자발적 결집체이다. 그러므로 정부가 특정 정당의 활동자금을 보조하거나 세법상 특혜를 준다면 이는 민주국가의 헌법에 위배되는 처사가 된다.
정당의 정책.
정당은 집권을 목적으로 하는 투쟁단체이고 정책단체는 아니나, 정당과 정책 사이에는 밀접한 관계가 있다. 근대적 의회제도 자체가 편견이나 폭력이 아니라 토론과 이성에 호소하여 문제를 처리하는 제도이므로 이 제도하에서 활동하는 정당이 일정한 원리에 입각하여 주의, 주장, 정책을 놓고 투쟁한다는 것은 당연한 일이다. 선거는 본래 ‘인물’의 선택을 의미했으나, 정당이 선거 때에 정책을 발표하게 되면서부터 ‘정책’의 선택이라는 의미도 갖게 되었다. 이것은 유권자의 수가 격증하고 사회적으로 많은 계층적 이질요소가 형성되어 종전처럼 입후보자나 그 지지자인 명망가들의 지명도나 권위에만 의존해서는 표를 모으기가 곤란해진 데서 온 결과이며, 또한 정부의 시책에 의해서 적절한 해결을 기대할 수 없는 문제의 범위가 넓어졌기 때문에 유권자가 정책을 주목하는 경향이 생긴 데서 오는 결과이기도 하다. 영국에서는 1891년에 뉴캐슬에서 열렸던 전국자유당연맹대회에서, 미국에서는 1832년의 공화당전국대회에서 각각 최초의 당 강령이 발표되었다. 이 두 사건을 계기로 선거는 종전처럼 후보자 개인의 인물의 선택과 그에 대한 백지위임이 아니라 당의 정책의 검토와 선택이라는 의미를 갖게 되고, 따라서 후보자 개인의 투쟁이 아니라 당과 당 사이의 투쟁의 성격을 띠게 되었다. 또 선거 후에도 의원은 종전처럼 유권자의 백지위임을 받는 것이 아니라 당의 공약으로 그 행동이 규제되며, 또 유권자의 감시와 비판을 받게 되었다. 의원이 당원으로서 당의 강령에 구속되는 것은 당연한데, 의회 안에서의 당원의 행동통일을 기하기 위해 당의 규율도 점차 엄격해지게 되었다. 이리하여 종래와 같이 유권자의 통제를 벗어나 스스로의 양심과 판단에 기해 자주적으로 행동하는 의원은 없어지고, 의사당은 극언해서 거수기에 불과한 의원들을 조종하는 정당의 투쟁장소가 되었다고 할 수 있을 것이다. 정당이 선거에 임해서 내세우는 정책은 될수록 많은 유권자의 지지를 받아 선거에서 승리하기 위한 수단이다. 유권자의 지지를 받기 위해서는 대자본가, 중소기업자, 농민노동자, 연금생활자, 실업자, 인텔리층 기타 사회적 이해관계에 대해서는 서로 모순되는 듯한 여러 계층의 정치적 요구를 광범하게 당의 강령 속에 반영시키지 않으면 안 된다. 그래서 당이 표방하는 정책은 내용이 포괄적이고 막연한 것이 되기 쉽고, 특히 중요한 정치문제에 관해서는 명확한 주장이 없는 경우가 많다. 이렇게 정당은 광범한 사회적 이익을 고려함으로써 많은 사회층으로부터 지지를 받지만 그 정당에게 ‘이끌리는 사회적 이익’과 그 정당이 ‘대표하는 사회적 이익’과는 다르다. 가령 영국의 보수당이 조직이 없는 극빈층의 표를 상당히 획득하고 있다고 해서 보수당이 극빈층의 이해를 대표하고 있는 것은 아니다. 의원이나 당운영의 중추를 장악하고 있는 간부의 출신계층이나 당자금의 공급원을 살펴보면 보수당이 대표하는 사회적 이익은 영국의 전통적인 지배계급, 즉 재계와 자본가계급이라는 것을 알 수 있다. 그리고 정당이 현실적으로 ‘수행하는 정책’은 그 정당이 ‘대표하는 사회적 이익’의 정치적 요구를 중심으로 한다는 것은 각국의 정치사가 예증하고 있다. 보통 ‘수행하는 정책’과 ‘표방하는 정책’과의 거리가 너무 멀어 사정의 변경 기타의 변명으로 일시적으로 미봉하게 되는 정도에 이르면, 공약 불이행의 비판을 초래할 것이고 유권자의 신뢰를 상실하게 될 것이다.
정당의 선거기능.
정당은 사적 성격을 갖고 있지만 그 활동은 의회정치에서 불가결한 공적 기능을 가지고 있다. 선거는 의원, 대통령 및 기타 공직자의 지명절차이며, 각 정당은 입후보자를 내세우고 강령을 발표하며 유권자의 지지를 획득하기 위해 선거운동을 전개한다. 이러한 것에는 두 가지 의미가 있는데, 그 하나는 정당이 정치지도자 선출의 파이프로서 당에서 양성하고 선정한 자를 국민에게 제공한다는 의미이고, 또 하나는 정당이 중요한 정치문제를 쟁점으로서 국민에게 제시하고, 거기에 대한 당의 정책을 밝혀 국민의 선택을 기다린다는 의미이다. 유권자는 본래가 아무런 조직도 없는 개개인의 단순한 집합체에 불과하여, 공통의 이해나 명확한 정치적 의사를 갖추고 있는 것이 아니므로, 주권자라고는 해도 실은 수동적인 존재에 불과하다. 유권자 자신들이 정치지도자를 내세우거나 정치적 요구의 통일을 기한다는 것은 도저히 불가능하다. 입후보자와 정당이 선택의 자료를 유권자에게 제공하고 유권자는 그것을 기준으로 해서 지지 정당을 선택한다. 이런 의미에서 유권자는 정당의 활동을 통해서 비로소 효과적으로 그 정치적 발언을 할 수 있는 것이다. 정당이 유권자의 개별적 의사와 이해를 통합, 집약하는 기능을 가지고 있다는 것은 이 점을 두고 하는 말이다. 그러나 유권자는 정당에 의해 비로소 정치적 발언이 유효하게 되었으나, 실제로는 그 발언이 매우 한계가 좁았다는 사실에 주의할 필요가 있다. 즉 유권자에게 제시된 것은 한정된 정당의 후보자와 정책에 불과하며, 정치참가를 단념하지 않는 한 유권자는 제시된 선택의 자료 중 하나를 선택할 수밖에 없게 되는 것이다. 또한 유권자 앞에 제시되는 정책이 전부 내용이 막연하여 구별의 기준이 생기지 않을 때는 유권자의 선택이 무의미해져 버린다. 선거란 정당이 유권자를 위로부터 조종하여 민의를 유도하고, 체제를 택하는 소란스러운 형식적 절차라는 비판이 나오는 것도 이 때문이다. 또 정당이 정치적 쟁점을 명시하여 정치문제에 있어서의 정보를 제공하고, 여론의 형성을 지도함으로써 유권자의 정치의식을 높이는 정치교육을 행하는 것과, 혹은 선거 이외의 기회에 야당이 여론형성을 지도하여 이 여론을 배경으로 해서 정부를 비판하고, 여당이 정부의 정책을 수정시키는 것 등 국정과 여론 사이의 교량역할을 하는 것이 정당의 부차적 기능이라고 보는 설도 있다.
정당의 국정기능.