Skip to main content
IBM Quantum Platform

패스 매니저 인프라

Qiskit에는 패스 관리자, 패스 및 IR을 동적으로 정의하기 위한 범용 인프라가 포함되어 있습니다. Qiskit 자체에는 다양한 상황에서 컴파일 IR로 사용되는 특정 유형들이 포함되어 있지만, 확장 모듈에서도 자유롭게 자체 유형을 정의할 수 있습니다.

QkIrBuiltin

enum QkIrBuiltin

IR로 직접 사용할 수 있는 다양한 C 내장 API 유형을 나열합니다.

다음은 에 대한 유효한 입력값입니다 qk_ir_handle_builtin.

값:

열거자 QkIrBuiltin_Circuit

해당 객체 QkCircuit .

열거자 QkIrBuiltin_Dag

해당 객체 QkDag .

QkIrSlot

enum QkIrSlot

사용자 정의 IR에서 구현할 수 있는 사용 가능한 메서드들.

다음은 에 대한 유효한 값들과, QkVtableEntry::slot 의 table 인자에 필요한 관련 함수 포인터 유형들입니다 qk_ir_handle_new.

안전

소멸자를 포함한 모든 함수는 어떤 스레드에서든 호출 가능해야 합니다.

값:

열거자 QkIrSlot_Delete

IR의 data 에 대한 소멸자. 선택 사항입니다.

데이터 포인터가 인 경우 이 메서드는 호출되지 않습니다 NULL.

서명:

void delete(void *data);

QkPassSlot

enum QkPassSlot

사용자 정의 패스에서 구현할 수 있는 사용 가능한 메서드들.

다음은 에 대한 유효한 값들과, QkVtableEntry::slot 의 table 인자에 필요한 관련 함수 포인터 유형들입니다 qk_pass_new.

안전

소멸자를 포함한 모든 함수는 어떤 스레드에서든 호출 가능해야 합니다.

값:

열거자 QkPassSlot_RunOwned

올바른 유형의 소유한 IR에서 패스를 실행하십시오. 필수.

서명:

void *run(void *this, void *ir, QkPassContext *context, QkCompilationError **error);
구현

이 코드는 패스 동작을 구현합니다. this 이 vtable을 사용하여 qk_pass_new 전달된 값과 동일해집니다. ir vtable의 ir_in 필드에 지정된 유형의 소유 데이터를 가리킵니다. 필요한 경우 메모리가 해제되도록 ir 보장하는 것은 구현자의 책임입니다.

이 함수는 로 지정된 유형의 소유 데이터를 반환해야 하며 ir_out, 오류가 발생한 경우에는 NULL 를 반환해야 합니다.

함수가 오류 상태를 표시하려면, 유효한 소유 QkCompilationError * 객체를 포인터에 error 할당하고, 해당 ir 포인터가 해제되었는지 확인한 후 반환해야 합니다 NULL.

열거자 QkPassSlot_Delete

패스가 소멸될 때, 해당 패스의 this 인자에 대한 소멸자입니다. 선택 사항입니다.

데이터 포인터가 NULL.인 경우 이 함수는 호출되지 않습니다.

서명:

void delete(void *this);

QkPass

typedef struct QkPass QkPass

C API를 통해 사용자 정의 동작이 정의된 패스입니다.

이것은 이전에 qk_pass_vtable_new.을 사용하여 일반적인 동작이 정의된 패스의 완전한 인스턴스입니다. 이 구조체의 인스턴스는 다음을 호출하여 생성합니다 qk_pass_new.

이러한 패스는 을 사용하여 QkPassManager 인스턴스에 추가할 수 있습니다 qk_passmanager_push_pass.

안전

데이터 this 포인터는 스레드 간에 전송하고 공유해도 안전해야 합니다. 이 클래스의 모든 메서드는 어떤 스레드에서든 안전하게 호출 가능해야 합니다 QkPassVtable .

QkCompilationError

typedef struct QkCompilationError QkCompilationError

컴파일 중에 발생한 구체적인 오류입니다.

사용자 정의 컴파일러 패스를 포함한 컴파일 파이프라인은 호출자에게 상세한 오류 정보를 반환해야 할 수도 있습니다. 이러한 오류는 일반적으로 프로그래밍 방식으로 처리하기 위한 것이 아니라, 최종 사용자가 직접 확인하고 이에 따라 조치를 취하도록 의도된 것입니다.

QkIrHandle

typedef struct QkIrHandle QkIrHandle

“IR 유형”을 나타내는 핸들 객체.

이 객체들은 IR 동작만을 나타내며, 완전한 IR 객체를 생성하려면 올바른 유형의 데이터 포인터와 결합해야 합니다. 패스와 패스 관리자를 정의하려면 타입 핸들만 있으면 됩니다.

이 중 하나를 인수로 받는 대부분의 함수는 해당 인수를 빌려 사용합니다. 핸들이 더 이상 필요하지 않게 되면, qk_ir_handle_free 를 호출하여 타입 객체에 대한 참조를 해제해야 합니다.

QkPassVtable

typedef struct QkPassVtable QkPassVtable

사용자 정의 패스의 동작을 나타내는 “타입 객체”.

이 객체들은 단지 동작만을 나타낼 뿐이며, 완전한 패스를 생성하려면 올바른 유형의 데이터 포인터와 결합되어야 합니다.

이것들은 를 사용하여 구성되며 qk_pass_vtable_new, 에 주어집니다 qk_pass_new.

가능한 동작과 그 의미에 대한 목록은 [여기] QkPassSlot 를 참조하십시오.

qk_compilation_error_new

QkCompilationError *qk_compilation_error_new(const char *msg)

메시지가 수정된 새로운 컴파일 오류를 생성합니다.

안전

msg 반드시 널 종결된 바이트를 가리켜야 합니다.

매개변수

  • msg – 널로 끝나는 문자열을 가리키는 차용된 포인터.

리턴

자체 컴파일러 오류입니다.

qk_compilation_error_str

char *qk_compilation_error_str(const QkCompilationError *error)

오류를 나타내는 간단한 문자열 표현을 가져옵니다.

이 표현의 정확한 형식은 고정되어 있지는 않지만, 일반적으로 사용자에게 표시하기 위한 것입니다. 오류 메시지에는 Qiskit 외부에서 정의된 사용자 정의 패스에 의해 제어되는 임의의 문자열이 포함될 수 있습니다.

반환 값은 qk_str_free.을 사용하여 해제해야 합니다.

안전

가 유효한 을 가리키지 error 않는 경우, 동작은 정의되지 않습니다 QkCompilationError.

매개변수

  • 오류 – 해당 메시지를 표시할 오류입니다.

리턴

오류를 나타내는 UTF-8 문자열 표현체입니다.

qk_compilation_error_free

void qk_compilation_error_free(QkCompilationError *error)

주어진 소유 포인터를 해제합니다.

가 null인 error 경우 아무 작업도 수행하지 않습니다.

안전

is error 가 null도 아니고 유효한 소유 객체를 가리키지도 않는 경우, is의 동작은 정의되지 않습니다 CompilationError.

매개변수

  • 오류 – 해제할 소유 포인터입니다.

qk_ir_handle_new

QkIrHandle *qk_ir_handle_new(const char *name, const QkVtableEntry *table)

새로운 “IR” 유형의 동작을 정의하십시오.

이 함수는 새로운 IR 유형의 동작 구성 요소를 정의하기 위해 호출됩니다.

내장된 Qiskit 타입에 대한 핸들을 원한다면, 를 참조하십시오 qk_ir_handle_builtin.

안전

다음 중 하나라도 위반될 경우 동작이 정의되지 않습니다:

  • name 는 널 종결 문자열입니다.
  • table null 포인터이거나, 정렬되어 있으며 중복 slot 값이 .slot = -1 없는 항목으로 끝나는 유효한 슬롯 항목 목록을 가리킵니다.

매개변수

  • name – IR 유형에 대한 사람이 읽기 쉬운 이름.
  • table – IR에 대해 정의된 메서드 목록으로, 슬롯 ID로 -1 를 사용하는 항목으로 끝납니다. 테이블에 항목이 없는 NULL 경우라면 그럴 수도 있습니다. 허용되는 값 및 함수 포인터 시그니처에 QkIrSlot 대해서는 를 참조하십시오.

리턴

IR 유형 객체에 대한 소유 핸들.

qk_ir_handle_builtin

QkIrHandle *qk_ir_handle_builtin(uint32_t ty)

Qiskit의 내장 타입에 대한 IR “타입 객체”를 가져옵니다.

매개변수

  • ty – 원하는 유형을 나타내는 식별자. 허용되는 값은 QkIrBuiltin 를 참조하십시오.

리턴

IR 유형 객체에 대한 소유 핸들, 또는 유효하지 않은 값이 지정된 경우 NULL .

qk_ir_handle_free

void qk_ir_handle_free(QkIrHandle *handle)

소유 중인 IR 핸들을 해제하세요.

핸들 처리가 완료되면, 직접 소유한 핸들 객체에 대해 이 메서드를 호출할 수 있습니다. 자신의 핸들을 사용하여 free를 호출한다고 해서 기존 QkIr 객체들이 무효화되지는 않습니다. 각 객체는 고유한 핸들을 가지고 있기 때문입니다.

포인터가 null인 경우 아무 작업도 수행하지 않습니다.

안전

handle 가 null이 아니면서 유효한 소유 QkIrHandle 객체를 가리키지 않는 경우, 동작은 정의되지 않습니다.

매개변수

  • handle – 해제할 포인터.

qk_pass_vtable_new

QkPassVtable *qk_pass_vtable_new(const char *name, const QkIrHandle *ir_in, const QkIrHandle *ir_out, const QkVtableEntry *table)

사용자 정의 패스를 위한 새로운 “타입 객체”를 생성합니다.

이 함수의 출력값을 얻으면, qk_pass_new.을 사용하여 데이터 포인터와 결합함으로써 pass의 인스턴스를 생성합니다.

안전

다음 중 하나라도 위반될 경우 동작이 정의되지 않습니다:

  • name 는 널 종결 문자열입니다.
  • ir_in 유효한 QkIrHandle 객체를 가리킵니다.
  • ir_out 유효한 QkIrHandle 객체를 가리킵니다.
  • table 는 에 의해 정의된 대로 모두 일관된 항목이며 VtableEntry``QkPassSlot , 중복된 항목이 slot 없고 로 끝나는, 연속적이고 유효한 인스턴스들을 가리킵니다 .slot = -1.
  • table 필요한 모든 슬롯에 해당하는 슬롯 아이템이 포함되어 있습니다.

매개변수

  • 이름 – 패스에 부여된, 공백으로 끝나는 사람이 읽기 쉬운 이름입니다. 디버깅에 사용됩니다.
  • ir_in – 해당 패스의 예상 입력 유형을 나타내는 IR “유형 객체”에 대한 차용된 핸들입니다.
  • ir_out – 해당 패스의 예상 출력 유형을 나타내는 IR “유형 객체”에 대한 차용된 핸들입니다.
  • 테이블 – 로 끝나는 항목이 포함된 QkVtableEntry 객체들로 구성된 차용된 테이블 .slot = -1. 허용되는 슬롯 값 및 관련 함수 포인터 유형에 QkPassSlot 대해서는 를 참조하십시오. 알 수 없는 값은 무시됩니다 slot .

리턴

패스의 인스턴스를 생성하기 위해 qk_pass_new 대여할 수 있는 소유형 객체입니다.

qk_pass_vtable_free

void qk_pass_vtable_free(QkPassVtable *vtable)

.에 대한 단일 참조를 해제합니다 PassVtable.

이 vtable이 필요한 패스의 인스턴스 생성을 모두 마친 후 이 함수를 호출할 수 있습니다. 생성된 각 패스는 이 테이블에 대한 자체 참조를 가지고 있습니다.

vtable 일 때 아무 작업도 수행하지 않습니다 NULL.

안전

가 null이 vtable 아니거나 에 대한 유효한 소유 참조가 아닌 경우, 해당 동작은 정의되지 않습니다 PassVtable.

매개변수

  • vtable – 해제할 소유 참조.

qk_pass_new

QkPass *qk_pass_new(void *data, const QkPassVtable *vtable)

이전에 동작이 정의된 패스의 새 인스턴스를 생성합니다.

그런 다음 결과 pass 객체는 일반적으로 또는 관련 메서드에 전달됩니다 qk_passmanager_push_pass.

안전

다음 중 하나라도 위반될 경우 동작이 정의되지 않습니다:

  • this . 내의 메서드에 적합한 유형의 데이터를 가리킵니다 vtable.
  • vtable ...의 유효한 인스턴스를 가리킵니다 QkPassVtable.

매개변수

  • data – 이 vtable.에 대한 소유 데이터 포인터입니다.
  • vtable –.에 의해 생성된 차용된 “타입 객체”입니다 qk_pass_vtable_new.

리턴

소유 중인 패스 객체.

qk_pass_free

void qk_pass_free(QkPass *pass)

사용자 정의 패스 인스턴스를 해제합니다.

일반적으로 이 함수를 호출할 필요는 없습니다. 패스 매니저 생성 함수가 QkPass 인수의 소유권을 가져가기 때문입니다.

안전

가 null이 아니거나 에 대한 유효한 소유 포인터가 pass 아닌 경우, 해당 동작은 정의되지 않습니다 QkPass.

매개변수

  • pass – 해제할 패스를 가리키는 소유 포인터.

qk_passmanager_new

QkPassManager *qk_passmanager_new(void)

빈 패스 관리자를 생성합니다.

이 객체는 사용자가 직접 해제해야 합니다.

리턴

소유된, 비어 있는 패스 관리자.

qk_passmanager_free

void qk_passmanager_free(QkPassManager *pm)

패스 관리자를 해제하세요.

안전

가 null이 아니거나 에 대한 유효한 포인터가 pm 아닌 경우, 동작은 정의되지 않습니다 QkPassManager.

매개변수

  • pm – 패스 관리자를 가리키는 소유 포인터.

qk_passmanager_push_pass

QkExitCode qk_passmanager_push_pass(QkPassManager *pm, QkPass *pass)

패스를 패스 관리자에게 전달하십시오.

안전

다음 중 하나라도 위반될 경우 동작이 정의되지 않습니다:

  • pm 유효한 것을 가리킵니다 QkPassManager
  • pass 자사가 소유한 QkPass 인스턴스를 가리킵니다.

매개변수

  • pm – 패스 관리자를 가리키는 차용된 포인터.
  • 패스 – 밀어낼 소유한 패스. 이렇게 하면 지정된 패스의 소유권을 빼앗게 됩니다.

리턴

QkExitCode_Success 타입이 성공적으로 추가된 경우, 또는 예상되는 IR 타입이 파이프라인의 기대치와 일치하지 않아 패스를 추가할 수 없는 경우 QkExitCode_IncompatibleTypes .

qk_passmanager_run_simple

void *qk_passmanager_run_simple(QkPassManager *pm, void *ir, const QkIrHandle *ir_in_handle, const QkIrHandle *ir_out_handle, QkCompilationError **error)

패스 관리자를 실행하십시오.

ir_in_handle 그리고 파이프라인의 유형 요구 사항을 충족해야 ir_out_handle 합니다. 이 함수는 해당 조건이 위반될 경우 오류 상태를 NULL 반환하고 (선택적으로) 설정합니다.

안전

다음 중 하나라도 위반될 경우 동작이 정의되지 않습니다:

  • pm 는.에 대한 유효한 포인터입니다 QkPassManager.
  • ir 는 가 나타내는 유형의 소유 데이터 포인터입니다 ir_in_handle.
  • ir_in_handle 유효한 IrHandle.을 가리킵니다.
  • ir_out_handle 유효한 IrHandle.을 가리킵니다.
  • error null이거나, 1개의 데이터를 한 번만 쓸 수 있는 유효한 저장 위치를 가리킵니다 QkCompilationError *.

매개변수

  • pm – 실행할 패스 관리자를 가리키는 차용된 포인터.
  • ir – 가 기대하는 유형의 소유 데이터 포인터 ir_in_handle. 이 함수는 포인터의 소유권을 인수하며, 오류가 발생하더라도 해당 포인터가 소멸되도록 처리합니다.
  • ir_in_handle – 패스 관리자의 입력 유형 및 의 유형에 해당하는 차용된 유형 객체입니다 ir.
  • ir_out_handle – 패스 관리자의 출력 유형에 해당하는 차용된 유형 객체.
  • 오류 – 그렇지 않은 [out] 경우 NULL, 결과를 QkCompilationError * 기록할 위치.

리턴

치명적인 오류가 발생하지 않았다면, ir_out_handle.에 해당하는 유형의 소유 데이터 포인터가 반환됩니다. NULL 치명적인 오류가 발생한 경우.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.