---
title: "ISA profile: 같은 이름이어도 벡터 경로를 가정할 수 없는 이유"
author: "브레이브브라우저쓰자"
published_at: "2026-10-17T14:26:04.438Z"
updated_at: "2026-10-06T00:54:09.937Z"
tags: ["isa profile"]
canonical_url: "https://ariser.io/@writer_a9817d5a8de0/isa-profile-%EA%B0%99%EC%9D%80-%EC%9D%B4%EB%A6%84%EC%9D%B4%EC%96%B4%EB%8F%84-%EB%B2%A1%ED%84%B0-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EA%B0%80%EC%A0%95%ED%95%A0-%EC%88%98-%EC%97%86%EB%8A%94-%EC%9D%B4%EC%9C%A0"
ai_assisted: true
---

# ISA profile: 같은 이름이어도 벡터 경로를 가정할 수 없는 이유

이 글은 AI가 활용됐습니다.

[원문](https://ariser.io/@writer_a9817d5a8de0/isa-profile-%EA%B0%99%EC%9D%80-%EC%9D%B4%EB%A6%84%EC%9D%B4%EC%96%B4%EB%8F%84-%EB%B2%A1%ED%84%B0-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EA%B0%80%EC%A0%95%ED%95%A0-%EC%88%98-%EC%97%86%EB%8A%94-%EC%9D%B4%EC%9C%A0)

기능표에 곱셈과 부동소수점, 벡터가 나열되어 있으면 같은 소프트웨어를 돌릴 수 있다고 판단해도 될까. 개별 확장 목록은 무엇이 있는지 알려 주지만, 배포할 프로그램이 어떤 기능을 항상 가정할 수 있는지는 별도 질문이다. ISA profile은 구현마다 달라지는 조합을 소프트웨어가 사용할 공통 계약으로 정리한다.

## 선택 조합이 늘어날 때 생기는 비용

설명용으로 서로 독립적인 기능이 10개이고 각각 있거나 없을 수 있다면 조합은 2¹⁰=1,024개다. 실제 RISC-V 확장은 의존 관계가 있어 이렇게 독립적이지 않지만, 여러 선택지를 임의로 조합할수록 검증·컴파일·배포 대상이 빠르게 늘어난다는 점은 볼 수 있다.

어떤 프로그램은 F를 기본으로 쓰고 다른 프로그램은 벡터를 요구한다. 각각의 구현을 대상으로 모든 가능한 조합을 다룰지, 일정한 공통 기능을 기준으로 배포할지 결정해야 한다. profile은 기본 ISA와 필수 확장, 표준 선택 기능을 묶어 후자의 기준을 제공한다. [RISC-V Profiles, Introduction 및 Components of a Profile](https://github.com/riscv/riscv-profiles/blob/main/src/profiles.adoc)

필수 기능은 해당 profile을 구현하는 환경이 제공해야 한다. 소프트웨어는 이 부분을 존재한다고 가정할 수 있다. 선택 기능은 profile이 지원할 수 있는 표준 옵션이지만, 그 profile 이름만으로 모든 구현에 존재한다고 가정할 수는 없다.

## 같은 profile에서도 벡터 지원은 다를 수 있다

구체적인 예로 원문의 RVA22U64를 읽어 보자. 이는 64비트 application processor의 user-mode 환경에 대한 profile이다. M, A, F, D, C 등의 확장이 필수이고 V는 선택 옵션이다. 이 설명은 이름을 명시한 RVA22U64의 규정이며 다른 연도의 profile도 똑같다는 뜻은 아니다. [RISC-V Profiles, RVA22U64 Mandatory 및 Optional Extensions](https://github.com/riscv/riscv-profiles/blob/main/src/profiles.adoc)

가상의 실행 환경 P와 Q가 RVA22U64의 전체 필수 조건을 모두 충족하고, P는 V를 제공하지 않으며 Q는 V를 제공한다고 하자. 그 차이에 따른 소프트웨어 선택은 다음과 같다.

| 프로그램의 ISA 가정 | P: 필수 기능만 제공 | Q: 필수 기능과 V 제공 |
|---|---|---|
| profile의 필수 기능만 사용 | ISA 가정 충족 | ISA 가정 충족 |
| V를 무조건 사용 | V 요구가 추가로 남음 | V 요구 충족 |
| V를 확인하고 없으면 scalar 경로 사용 | scalar 경로 선택 가능 | vector 경로 선택 가능 |

표의 ‘충족’은 ISA 가정에 대한 판단이다. 실제 실행에는 운영체제와 ABI, 라이브러리 등 다른 조건도 필요하다. V를 확인하는 발견 방법이나 운영체제의 벡터 상태 지원도 플랫폼 규정을 따라야 하며, profile 이름 하나가 이 절차를 모두 대신하지 않는다.

옵션 단위도 주의해야 한다. 원문은 RVA22U64에서 작은 Zve 확장들을 별도 profile 옵션으로 제공하지 않고 full V를 옵션으로 지정한다. 따라서 벡터 명령 일부가 보인다는 이유만으로 V 옵션 전체가 제공된다고 판단해서는 안 된다. 필요한 기능 묶음과 실제 제공되는 계약이 맞아야 한다.

## profile은 완성된 플랫폼 명세가 아니다

Profiles 원문은 profile이 ISA 기능을 설명하며 완전한 실행 환경을 정의하지는 않는다고 구분한다. boot 절차, 호출 규약, environment call의 서비스, 장치 주소와 기능 발견 방법 등은 플랫폼 명세에 속한다. [RISC-V Profiles, Profiles versus Platforms](https://github.com/riscv/riscv-profiles/blob/main/src/profiles.adoc)

예를 들어 두 시스템이 같은 user-mode profile을 제공해도, 파일을 열기 위해 호출하는 서비스나 실행 파일 형식이 다르면 같은 바이너리의 동작을 그 사실만으로 보장할 수 없다. profile은 소프트웨어 호환성 판단의 ISA 부분을 정리하지, 운영체제까지 하나로 통일하지 않는다.

플랫폼은 선택 확장을 필수로 요구하는 등 profile에 조건을 더할 수 있다. 하지만 profile의 필수 요구를 빼거나 약화하면서 같은 profile의 계약이라고 말할 수는 없다. 하드웨어 회로로 직접 구현하는지, 더 높은 권한의 보이지 않는 trap으로 기능을 제공하는지도 기능 계약과 구현 방식을 나누어 읽어야 한다.

## 이름보다 실제 요구 조건을 검증한다

필수 목록에는 명령 이름 외의 세부 조건도 있다. RVA22U64의 Zicclsm은 특정 속성을 가진 주 메모리 영역에서 misaligned load/store의 지원을 요구한다. 원문은 이 접근이 매우 느릴 수 있으므로, 소프트웨어가 정확성에 대해 지원을 가정하되 성능까지 가정해서는 안 된다고 설명한다.

그래서 ‘그 명령을 decode한다’는 시험만으로 profile 전체를 확인했다고 할 수 없다. 요구하는 privilege 환경과 폭, 명령 의미, 해당 메모리 조건과 옵션의 구성요소까지 명세에 맞아야 한다. 선택한 옵션을 빠르게 계산한다는 벤치마크도 이런 기능 검증을 대신하지 않는다.

반대로 profile을 사용하면 소프트웨어가 기본 배포에서 필요한 매 기능을 제각각 협상하는 부담을 줄일 수 있다. 필수 기반을 정하고 선택 기능에만 추가 경로나 별도 배포를 두면 된다. 단, 관심 없는 custom 조합을 금지하는 제도가 아니라 공통 생태계가 집중할 ISA 기준이라는 점도 유지해야 한다.

ISA profile은 기능표에 붙인 짧은 별명이 아니다. 무엇을 항상 제공하고 무엇을 선택할 수 있는지, 어느 실행 권한의 환경에서 그 요구를 읽는지 정하는 계약이다. 같은 profile의 P와 Q가 모두 기본 프로그램의 ISA 가정을 충족해도 V 전용 프로그램의 요구는 다를 수 있다. 배포 가능성을 판단할 때 profile의 필수 기반, 사용하는 옵션, 플랫폼의 나머지 조건을 순서대로 확인해야 한다.

