명령어 집합 구조 (instruction set architecture)
쉽게 풀면
소프트웨어가 하드웨어에게 말을 걸 때 쓰는 공용어의 문법책입니다. 어떤 명령이 있고, 레지스터는 몇 개이며, 주소를 어떻게 계산하고, 예외는 어떻게 처리하는지가 여기에 규정됩니다. 이 약속만 지키면 내부 회로를 어떻게 만들든 같은 프로그램이 돌아가므로, 칩 설계자와 컴파일러 개발자가 서로 독립적으로 일할 수 있습니다.
왜 중요한가
컴퓨터 구조에서 추상화 경계를 만드는 가장 중요한 계약입니다. 같은 명령어 집합을 따르면 수십 년 전 프로그램도 최신 칩에서 실행되며, 이 호환성이 플랫폼 생태계의 진입장벽과 경쟁 구도를 결정해 왔습니다. 최근에는 개방형 명령어 집합의 등장으로 칩 설계의 문턱이 낮아지면서 연구와 산업 모두에서 관심이 커졌습니다.
논문에서는 이렇게 쓰입니다
소프트웨어와의 약속은 그대로 두고 칩 내부 구현만 바꿔 속도를 올렸다는 뜻입니다.
조금 더 깊게 보면
명령어를 단순하게 유지하고 개수를 줄여 파이프라인 효율을 높이는 RISC 계열과, 복잡한 명령 하나로 많은 일을 처리하는 CISC 계열로 크게 나뉘며, 오늘날 고성능 CISC 칩도 내부에서는 명령을 마이크로 연산으로 쪼개 처리합니다. 명령어 집합 구조가 규정하는 것은 프로그래머에게 보이는 모델일 뿐, 파이프라인 단계 수나 캐시 구성 같은 구현 세부는 마이크로아키텍처의 영역입니다. 메모리 일관성 모델과 원자적 연산의 정의도 이 계약에 포함되어 병행 프로그래밍의 의미를 결정합니다.
주의할 점
ARM 아키텍처나 x86은 구체적인 명령어 집합 구조의 사례이고, 이 용어는 그런 규격 일반을 가리키는 상위 개념입니다. 같은 명령어 집합을 쓰는 두 칩의 성능이 크게 다를 수 있다는 점에서 구조와 구현을 혼동하지 말아야 합니다.