양자 소프트웨어 (Quantum Software)
편집하기 (부분)
둘러보기로 이동
검색으로 이동
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
= 양자 프로그래밍 언어 (Quantum Programming Language) = 양자 프로그래밍 언어(quantum programming language)는 [[양자 알고리듬]]을 명세하고 양자 하드웨어를 다루기 위한 추상화(abstraction)를 제공한다. 추상화는 컴퓨터 공학을 관통하는 핵심 개념으로 불필요한 세부 사항을 감추고 핵심만 간추려 인터페이스로 정의하는 것이다. 사용자는 불필요한 하드웨어 특성에 신경 쓰지 않아도 되어 프로그래밍이 쉬워진다. 나아가 고 수준의 추상화는 한 번 작성된 프로그램을 여러 하드웨어에서 사용할 수 있도록 한다. 추상화는 하드웨어 개발자에게도 중요한 개념이다. 하드웨어 개발자는 응용 프로그램의 특성을 파악하고 중요한 기능만을 인터페이스로 정의한다. 미래 소자 기술이 발전해도 하드웨어 특성을 인터페이스에 반영하지 않았기 때문에 쉽게 적용할 수 있다. 여기서도 한 번 작성된 프로그램은 발전된 하드웨어에서 무리없이 작동한다. 한편, 프로그래밍 언어의 추상화 수준을 결정하는 것은 공학적 판단을 요한다. 일반적으로 프로그래밍 언어의 추상화 수준이 높을수록 프로그래밍하기 쉽고 다양한 하드웨어로의 이식성이 높아지는 반면 추상화 수준이 낮을수록 하드웨어의 특성을 이용하여 높은 성능의 프로그램을 작성하는 데 용이하다. 프로그래밍 언어 설계자는 언어의 사용 목적에 따라 하드웨어의 특성을 얼마나 드러낼 지 결정해야 하며, 양자 프로그래밍 언어를 위해 어떤 방식이 적합한지에 대한 일치된 견해는 없다. 사용자에게 높은 추상화 수준을 제공하면서도 하드웨어의 성능을 최대한 끌어내기 위해 프로그래밍 언어의 컴파일러를 통해 여러 단계의 변환을 거친다. 사용자는 기반 하드웨어의 특성, 성능 및 제약 조건들을 생각하지 않고도 프로그램을 작성할 수 있어야 하며, 컴파일러는 하드웨어의 특성을 충실히 반영해 효율적인 프로그램으로 변환하도록 해야 한다. 높은 추상화 수준을 지니고 있는 프로그래밍 언어를 고 수준 언어라 하며 낮은 추상화 수준을 지니고 있는 프로그래밍 언어를 저 수준 언어라 한다. 고 수준 언어의 설계 목표는 고전 컴퓨터를 위한 언어와 유연하게 통합되고 나아가 인간 사고 체계와 유사한 추상화를 제공하여 [[양자 역학]] 배경이 없는 사용자까지 포섭하는 것이다. Variational quantum eigensolver (VQE), Adiabatic computing 등 특정 문제에 적합한 모델이 있지만 일반적으로는 [[양자 회로]](quantum circuit) 모델을 사용한다. 고 수준 언어는 함수형(functional) 언어와 명령형(imperative) 언어로 분류할 수 있다. 함수형 언어는 알고리듬을 (순수) 함수의 연쇄적 적용으로 표현하는 반면 명령형 언어는 주어진 양자 시스템에 일련의 [[게이트]] 연산을 적용하는 형식으로 표현한다. 일반적으로 함수형 언어는 복잡한 연산을 간략하게 표현할 수 있다는 장점이 있으며, 명령형 언어는 폰 노이만 아키텍처와 잘 대응되기 때문에 보다 직관적이다. 양자 프로그래밍 언어에 있어서 어떤 것이 더 적합한지에 대한 일치된 견해는 없다. 마이크로소프트에서 개발한 Q#은 함수형 언어, 프린스턴 대학 등에서 개발한 Scaffold는 명령형 언어의 예 (표 1)다. 저 수준 언어의 설계 목표는 하드웨어의 주요 특징들을 간추려내 추상화하는 것이다. 저 수준 언어는 중간 표현(IR, intermediate representation)이라고도 일컬어지는데 고 수준 언어와 하드웨어 ISA(instruction set architecture) 사이에 위치한다. 다양한 양자 컴퓨터는 분류 방식에 따라 공통된 특성을 지닐 수 있으며, 이러한 특성을 추상화하여 중간 표현을 설계한다. 중간 표현은 하나의 양자 컴퓨터뿐만 아니라 여러 개의 유사한 하드웨어 집합이 지니는 특성을 고려한 최적화를 가능하게 하여 불필요한 기능 중복을 없애는 데 핵심적인 역할을 한다. 중간 표현은 여러 단계에 걸쳐 있을 수 있다. 예컨대, 일반적인 양자 컴퓨터를 위한 중간 표현인 OpenQASM은 [[초전도 큐비트]](superconducting qubit) 양자 컴퓨터 혹은 [[이온 트랩]](trapped-ion) 양자 컴퓨터를 위한 중간 표현으로 변환되고 최종적으로 목적 하드웨어의 ISA로 변환될 수 있다. {|class="wikitable" |+style="caption-side:bottom; text-align: left;"|양자 프로그래밍 언어의 분류. !width="18%"| !width="25%"| 고 수준 언어 !width="26%"| 저 수준 언어 !width="29%"| 비고 |- | 함수형 언어 | Q#<ref>Microsoft Q# : https://docs.microsoft.com/ko-kr/quantum/language/?view=qsharp-preview</ref>Quipper<ref name=Green>A. S. Green, P. L. Lumsdaine, , N. J. Ross, P. Selinger & B. Valiron, Quipper: a scalable quantum programming language, in ''Proceedings of the 34th ACM SIGPLAN'', (PLDI, 2013), p.333. doi:[https://doi.org/10.1145/2491956.2462177 10.1145/2491956.2462177]. </ref> | QWIRE<ref name=Paykin>J. Paykin, R. Rand & S. Zdancewic, QWIRE: a core language for quantum circuits, in ''Proceedings of the 44th ACM SIGPLAN'' , (POPL, 2017), p.846. doi:[https://doi.org/10.1145/3009837.3009894 10.1145/3009837.3009894]. </ref> | 복잡한 연산을 표현하기에<br /> 적합. |- | 명령형 언어 | QCL<ref name=Selinger>P. Selinger, Towards a quantum programming language, Mathematical Structures in Computer Science, <b>14</b>, 527 (2004). doi:[https://doi.org/10.1017/S0960129504004256 10.1017/S0960129504004256]. </ref> Scaffold<ref name=Abhari>A. Abhari ''et al.'', Scaffold: Quantum Programming Language, Princeton University Dept. of Computer Science, TR-934-12 (2012). </ref> | OpenQASM<ref name=McKay>D. C. McKay ''et al.'', Qiskit backend specifications for OpenQASM and OpenPulse experiments, [https://arxiv.org/abs/1809.03452 arXiv:1809.03452] (2018).</ref> OpenPulse<ref name="McKay" /> | 양자 시스템의 상태를<br /> 직관적으로 표현하기에 적합. |- | 비고 | 알고리듬을 기술하기에 적합. | 하드웨어의 특성을<br /> 반영하기에 적합. | |}
요약:
한국양자정보학회 위키에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다(자세한 사항은
한국양자정보학회 위키:저작권
문서를 보세요).
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기 메뉴
개인 도구
로그인하지 않음
토론
기여
계정 만들기
로그인
이름공간
문서
토론
한국어
보기
읽기
편집
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보