hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
뷰 모델 개요
뷰와 뷰포인트의 목적은 인간이 매우 복잡계를 이해하고, 전문성 영역을 중심으로 문제와 해결책의 요소를 조직하고, 관심사를 분리하는 것이다. 물리적으로 집중적인 시스템의 공학에서 뷰포인트는 종종 공학 조직 내의 역량 및 책임과 일치한다.
대부분의 복잡한 시스템 명세는 너무 광범위하여 한 개인이 명세의 모든 측면을 완전히 이해할 수 없다. 또한, 우리는 주어진 시스템에 대해 서로 다른 관심사를 가지고 있으며 시스템의 명세를 검토하는 이유도 다르다. 사업 임원은 시스템 구현자보다 시스템 구성에 대해 다른 질문을 할 것이다. 따라서 뷰포인트 프레임워크의 개념은 이해관계자와의 의사소통을 용이하게 하기 위해 주어진 복잡한 시스템의 명세에 대한 개별적인 뷰포인트를 제공하는 것이다. 각 뷰포인트는 시스템의 특정 측면에 관심을 가진 청중을 만족시킨다. 각 뷰포인트는 해당 뷰포인트의 청중을 위해 어휘와 표현을 최적화하는 특정 뷰포인트 언어를 사용할 수 있다. 뷰포인트 모델링은 대규모 분산 시스템의 고유한 복잡성을 다루는 효과적인 접근 방식이 되었다.
뷰 모델 개요
IEEE Std 1471-2000에 설명된 아키텍처 설명 관행은 여러 관심 영역을 다루기 위해 여러 뷰를 사용하며, 각 뷰는 시스템의 특정 측면에 중점을 둔다. 여러 뷰를 사용하는 아키텍처 프레임워크의 예로는 크룩텐의  "4+1" 뷰 모델, 자크만 프레임워크, TOGAF, DoDAF, RM-ODP가 있다.
뷰 모델 역사
1970년대에 소프트웨어 공학에서 여러 뷰를 사용하여 모델링하는 방법이 등장하기 시작했다. 더글러스 T. 로스와 K.E. 쇼먼은 1977년에 시스템 요구사항 정의에서 모델링 프로세스를 조직하기 위해 컨텍스트, 뷰포인트, 시점 구성을 도입했다. 로스와 쇼먼에 따르면, 뷰포인트는 "[모델의] 전체 목적을 달성하는 데 관련 있다고 간주되는 측면을 명확히 하고" "[모델링되는 대상]을 어떻게 볼 것인가"를 결정한다.
뷰포인트의 예로는 기술적, 운영적, 경제적 뷰포인트가 제시된다. 1992년, 앤서니 핀켈스타인 외 다수는 뷰포인트에 관한 매우 중요한 논문을 발표했다. 이 연구에서: "뷰포인트는 개발 프로세스에서 '행위자', '지식 출처', '역할' 또는 '에이전트'라는 개념과 행위자가 유지하는 '뷰' 또는 '관점'이라는 개념의 조합으로 생각할 수 있다." 이 논문의 중요한 아이디어는 "뷰포인트가 볼 수 있는 것을 표현하는 방식, 스키마 및 표기법인 표현 스타일"과 "뷰포인트의 스타일로 특정 도메인을 설명하는 진술인 명세"를 구별하는 것이었다. IEEE 1471과 같은 후속 작업은 각각 뷰포인트와 뷰라는 두 개의 별도 용어를 사용하여 이러한 구별을 유지했다.
뷰 모델 역사
1990년대 초반부터 시스템 아키텍처를 설명하고 분석하는 접근 방식을 체계화하려는 여러 노력이 있었다. 이러한 것들은 종종 아키텍처 프레임워크 또는 때로는 뷰포인트 집합이라고 불린다. 이들 중 다수는 미국 국방부의 자금 지원을 받았지만, 일부는 ISO 또는 IEEE의 국제적 또는 국가적 노력에서 비롯되었다. 이들 중, 소프트웨어 집중 시스템의 아키텍처 설명에 대한 IEEE 권장 실무 지침(IEEE Std 1471-2000)은 뷰, 뷰포인트, 이해관계자 및 관심사의 유용한 정의와 이해관계자 관심사를 다루기 위해 뷰포인트를 적용하여 여러 뷰를 사용하여 시스템 아키텍처를 문서화하는 지침을 수립했다. 여러 뷰를 사용하는 이점은 숨겨진 요구사항과 이해관계자 간의 불일치를 더 쉽게 발견할 수 있다는 것이다. 그러나 연구에 따르면 실제로는 여러 뷰를 조정하는 추가 복잡성이 이러한 이점을 약화시킬 수 있다.
뷰 모델 역사
IEEE 1471 (현재 ISO/IEC/IEEE 42010:2011, 시스템 및 소프트웨어 공학 — 아키텍처 설명)은 아키텍처 설명의 내용을 규정하고, 전례 있는/없는 설계, 진화적 설계, 기존 시스템의 설계 캡처를 포함한 여러 시나리오에서 이들의 생성 및 사용을 설명한다. 이 모든 시나리오에서 전체 프로세스는 동일하다: 이해관계자를 식별하고, 관심사를 도출하고, 사용될 뷰포인트 집합을 식별한 다음, 이러한 뷰포인트 명세를 적용하여 관심 시스템과 관련된 뷰 집합을 개발한다. 특정 뷰포인트 집합을 정의하는 대신, 이 표준은 아키텍트와 조직이 자체 뷰포인트를 정의하기 위한 균일한 메커니즘과 요구사항을 제공한다. 1996년에 분산 처리 참조 모델(RM-ODP) ISO가 대규모 분산 시스템의 아키텍처 및 설계를 설명하는 데 유용한 프레임워크를 제공하기 위해 발표되었다.
뷰 모델 뷰 모델 주제
시스템의 뷰는 뷰포인트의 관점에서 시스템을 나타낸 것이다. 시스템에 대한 이 뷰포인트는 시스템에 관한 특정 관심사에 초점을 맞추는 관점을 포함하며, 뷰포인트의 관심사와 관련된 요소만 포함하는 단순화된 모델을 제공하기 위해 세부 사항을 숨긴다. 예를 들어, 보안 뷰포인트는 보안 관심사에 초점을 맞추고, 보안 뷰포인트 모델은 시스템의 더 일반적인 모델에서 보안과 관련된 요소를 포함한다.
뷰 모델 뷰 모델 주제
뷰는 사용자가 특정 관심 영역의 일부를 검사할 수 있도록 한다. 예를 들어, 정보 뷰는 특정 정보 조각을 사용하는 모든 기능, 조직, 기술 등을 제시할 수 있는 반면, 조직 뷰는 특정 조직과 관련된 모든 기능, 기술 및 정보를 제시할 수 있다. 자크만 프레임워크에서 뷰는 개발에 특정 분석 및 기술 전문 지식이 필요한 작업 산출물 그룹을 포함한다. 이는 기업의 "무엇," "어떻게," "누가," "어디서," "언제," 또는 "왜"에 초점을 맞추기 때문이다. 예를 들어, 기능 뷰 작업 산출물은 "임무는 어떻게 수행되는가?"라는 질문에 답한다. 이러한 작업 산출물은 프로세스 및 활동 모델링을 사용하는 기능 분해 전문가가 가장 쉽게 개발할 수 있다. 이들은 기능의 관점에서 기업을 보여준다. 또한 조직 및 정보 구성 요소를 보여줄 수도 있지만, 기능과 관련될 때만 보여준다.
시스템 공학에서 뷰포인트는 시스템 내 관심사의 분할 또는 제한이다. 뷰포인트를 채택하는 것은 해당 측면의 문제를 별도로 다룰 수 있도록 유용하다. 뷰포인트를 잘 선택하면 시스템 설계가 특정 전문 분야로 분할되기도 한다.
뷰 모델 뷰 모델 주제
뷰포인트는 뷰를 구성하고 제시하며 분석하기 위한 규칙, 규약 및 언어를 제공한다. ISO/IEC 42010:2007(IEEE-Std-1471-2000)에서 뷰포인트는 개별 뷰에 대한 명세이다. 뷰는 뷰포인트의 관점에서 전체 시스템을 나타낸 것이다. 뷰는 하나 이상의 아키텍처 모델로 구성될 수 있다. 각 아키텍처 모델은 관련 아키텍처 시스템과 전체 시스템에 의해 설정된 방법을 사용하여 개발된다.
모델링 관점은 시스템의 미리 선택된 측면을 표현하는 다양한 방식의 집합이다. 각 관점은 모델이 나타내는 것에 대해 다른 초점, 개념화, 전념 및 시각화를 가지고 있다.
정보 시스템에서 모델링 관점을 나누는 전통적인 방법은 구조적, 기능적, 행동/프로세스적 관점을 구별하는 것이다. 이는 규칙, 객체, 통신, 행위자 및 역할 관점과 함께 모델링 접근 방식을 분류하는 한 가지 방법이다.
주어진 뷰포인트에서 해당 뷰포인트에서 보이는 객체만 포함하지만 시스템에 존재하고 해당 뷰포인트와 관련된 모든 객체, 관계 및 제약 조건을 캡처하는 시스템 모델을 만드는 것이 가능하다. 이러한 모델을 뷰포인트 모델 또는 해당 뷰포인트에서 본 시스템의 뷰라고 한다.
뷰 모델 뷰 모델 주제
주어진 뷰는 특정 뷰포인트에서 특정 추상화 수준의 시스템에 대한 명세이다. 추상화 수준이 다르면 세부 수준도 다르다. 상위 수준 뷰는 엔지니어가 전체 설계를 구상하고 이해하며 큰 문제점을 식별하고 해결할 수 있도록 한다. 하위 수준 뷰는 엔지니어가 설계의 일부에 집중하고 상세 명세를 개발할 수 있도록 한다.
그러나 시스템 자체에서 다양한 뷰포인트 모델에 나타나는 모든 명세는 시스템의 실제 구성 요소에서 다루어져야 한다. 그리고 주어진 구성 요소에 대한 명세는 여러 다른 뷰포인트에서 가져올 수 있다. 반면에, 특정 구성 요소 및 구성 요소 상호 작용에 걸친 기능 분배에 의해 유도된 명세는 일반적으로 원래 뷰포인트에 반영된 것과는 다른 관심사 분할을 반영할 것이다. 따라서 개별 구성 요소 및 시스템의 상향식 합성에 대한 관심사를 다루는 추가 뷰포인트도 유용할 수 있다.
아키텍처 설명은 구성 요소, 해당 구성 요소의 작동 방식, 해당 구성 요소가 작동하는 규칙 및 제약 조건, 해당 구성 요소가 서로 및 환경과 어떻게 관련되는지에 대한 시스템 아키텍처의 표현이다. 아키텍처 설명에서 아키텍처 데이터는 여러 뷰 및 제품에 걸쳐 공유된다.
데이터 계층에는 아키텍처 데이터 요소와 해당 정의 속성 및 관계가 있다. 프레젠테이션 계층에는 아키텍처의 목적, 설명하는 내용, 수행된 다양한 아키텍처 분석을 시각적으로 전달하고 이해하는 데 도움이 되는 제품 및 뷰가 있다. 제품은 아키텍처 데이터를 그래픽, 표 또는 텍스트 형식으로 시각화하는 방법을 제공한다. 뷰는 제품 전반에 걸쳐 아키텍처 데이터를 시각화하고, 아키텍처의 특정 또는 전체적인 관점을 위해 데이터를 논리적으로 구성하는 기능을 제공한다.
뷰 모델 시스템 뷰 모델의 유형
1977년에 도입된 3-스키마 접근 방식은 데이터 모델링을 위한 최초의 뷰 모델 중 하나로 간주될 수 있다. 이는 개념 모형을 데이터 통합을 달성하기 위한 핵심으로 홍보하는 정보 시스템 및 시스템 정보 관리를 구축하는 접근 방식이다. 3-스키마 접근 방식은 세 가지 스키마와 뷰를 정의한다.
중심에서 개념 스키마는 사용자가 생각하고 이야기하는 방식대로 개념의 온톨로지를 정의한다. 물리적 스키마는 데이터베이스에 저장된 데이터의 내부 형식을 설명하고, 외부 스키마는 애플리케이션 프로그램에 제시되는 데이터의 뷰를 정의한다. 이 프레임워크는 외부 스키마에 여러 데이터 모델을 사용할 수 있도록 시도했다.
뷰 모델 시스템 뷰 모델의 유형
수년에 걸쳐 정보 시스템 구축에 대한 기술과 관심은 엄청나게 성장했다. 그러나 대부분의 경우 시스템 구축에 대한 전통적인 접근 방식은 "사용자 뷰"와 "컴퓨터 뷰"라는 두 가지 뚜렷한 뷰에서 데이터를 정의하는 데만 중점을 두었다. "외부 스키마"라고 불리는 사용자 뷰에서 데이터의 정의는 개인이 특정 작업을 수행하는 데 도움이 되도록 설계된 보고서 및 화면의 맥락에서 이루어진다. 사용량 뷰에서 데이터의 필수 구조는 비즈니스 환경과 사용자의 개별 선호도에 따라 변경된다. "내부 스키마"라고 불리는 컴퓨터 뷰에서 데이터는 저장 및 검색을 위한 파일 구조 측면에서 정의된다. 컴퓨터 저장을 위한 데이터의 필수 구조는 사용된 특정 컴퓨터 기술과 데이터의 효율적인 처리에 대한 필요성에 따라 달라진다.
4+1은 1995년 필립 크룩텐이 여러 동시 뷰를 기반으로 소프트웨어 집중 시스템의 아키텍처를 설명하기 위해 설계한 뷰 모델이다. 뷰는 최종 사용자, 개발자 및 프로젝트 관리자와 같은 다양한 이해관계자의 관점에서 시스템을 설명하는 데 사용된다. 모델의 네 가지 뷰는 논리적, 개발, 프로세스 및 물리적 뷰이다.
모델의 네 가지 뷰는 다음을 다룬다.
또한 선택된 유스 케이스 또는 시나리오는 아키텍처를 설명하는 데 활용된다. 따라서 모델은 4+1 뷰를 포함한다.
뷰 모델 엔터프라이즈 아키텍처 뷰의 종류
엔터프라이즈 아키텍처 프레임워크는 엔터프라이즈 아키텍처와 관련된 구조와 뷰를 구성하는 방법을 정의한다. 엔터프라이즈 아키텍처 및 공학 분야가 매우 광범위하고, 기업이 크고 복잡할 수 있기 때문에, 해당 분야와 관련된 모델 또한 크고 복잡한 경향이 있다. 이러한 규모와 복잡성을 관리하기 위해 아키텍처 프레임워크는 작업을 집중시키고 가장 필요할 때 가치 있는 산출물을 생산할 수 있는 도구와 방법을 제공한다.
아키텍처 프레임워크는 일반적으로 정보기술 및 정보 시스템 거버넌스에서 사용된다. 조직은 시스템 설계가 승인되기 전에 특정 모델이 생산되도록 의무화할 수 있다. 유사하게, 조달된 시스템의 문서화에 특정 뷰가 사용되도록 지정할 수 있다. 미 국방부는 특정 가치 이상의 자본 프로젝트에 대해 장비 공급업체가 특정 DoDAF 뷰를 제공하도록 규정하고 있다.
1987년 IBM의 존 자크만이 처음 구상한 자크만 프레임워크는 기업을 보고 정의하는 공식적이고 고도로 구조화된 방식을 제공하는 엔터프라이즈 아키텍처를 위한 프레임워크이다.
뷰 모델 엔터프라이즈 아키텍처 뷰의 종류
이 프레임워크는 아키텍처 "산출물"을 누가 산출물을 대상으로 하는지(예: 비즈니스 소유자 및 구축자)와 어떤 특정 문제(예: 데이터 및 기능)를 다루는지 모두 고려하는 방식으로 구성하는 데 사용된다. 이러한 산출물에는 설계 문서, 명세 및 모델이 포함될 수 있다.
자크만 프레임워크는 엔터프라이즈 아키텍처의 기본 요소를 표현하는 표준 접근 방식으로 자주 언급된다. 자크만 프레임워크는 미국 연방 정부로부터 "...기업 및 이를 지원하는 시스템의 변화를 관리하기 위한 통합 프레임워크로 전 세계적으로 인정받았다"고 인정받았다.
국제 표준화 기구(ISO) 개방 분산 처리 참조 모델(RM-ODP)는 분산 소프트웨어/하드웨어 시스템의 설계를 분할하기 위한 뷰포인트 집합을 지정한다. 대부분의 통합 문제는 이러한 시스템의 설계 또는 매우 유사한 상황에서 발생하므로, 이러한 뷰포인트는 통합 문제를 분리하는 데 유용할 수 있다. RM-ODP 뷰포인트는 다음과 같다.
RM-ODP는 또한 뷰포인트 간 일관성 명세를 설계에 포함할 것을 요구한다.
뷰 모델 엔터프라이즈 아키텍처 뷰의 종류
미국 국방부 아키텍처 프레임워크(DoDAF)는 엔터프라이즈 아키텍처(EA) 또는 시스템 아키텍처를 보완적이고 일관된 뷰로 구성하는 표준적인 방법을 정의한다. 복잡한 통합 및 상호 운용성 과제를 가진 대규모 시스템에 특히 적합하며, 개발 중인 시스템이 작동할 외부 고객의 운영 도메인을 상세히 설명하는 "운영 뷰"를 사용하는 데 있어 독특하다고 할 수 있다.
DoDAF는 그래픽, 표, 텍스트 수단을 통해 아키텍처 설명의 광범위한 범위와 복잡성을 시각화하고 이해하며 동화하는 메커니즘 역할을 하는 일련의 제품을 정의한다. 이 제품은 네 가지 뷰로 구성된다.
각 뷰는 아래 설명된 대로 아키텍처의 특정 관점을 나타낸다. 각 시스템 개발에는 전체 DoDAF 뷰셋의 하위 집합만 생성되는 것이 일반적이다. 이 그림은 운영 뷰, 시스템 및 서비스 뷰, 기술 표준 뷰를 연결하는 정보를 나타낸다. 세 가지 뷰와 이들의 상호 관계는 공통 아키텍처 데이터 요소에 의해 구동되며, 상호 운용성 또는 성능과 같은 측정값을 도출하고, 이러한 메트릭 값의 운영 임무 및 작업 효율성에 미치는 영향을 측정하는 기반을 제공한다.
뷰 모델 엔터프라이즈 아키텍처 뷰의 종류
미국 연방 엔터프라이즈 아키텍처에서 엔터프라이즈, 세그먼트, 솔루션 아키텍처는 세부 수준을 다양화하고 관련되지만 구별되는 문제를 다룸으로써 다른 비즈니스 관점을 제공한다. 기업 자체가 계층적으로 조직된 것처럼, 각 아키텍처 유형이 제공하는 다양한 뷰도 계층적이다. 연방 엔터프라이즈 아키텍처 실무 지침(2006)은 세 가지 유형의 아키텍처를 정의했다.
정의에 따르면 엔터프라이즈 아키텍처(EA)는 전략, 비즈니스 프로세스, 투자, 데이터, 시스템 또는 기술 등 공통 또는 공유 자산을 식별하는 것과 근본적으로 관련된다. EA는 전략에 의해 주도되며, 기관이 자원을 기관 임무 및 전략적 목표에 적절하게 조정했는지 식별하는 데 도움이 된다. 투자 관점에서 EA는 IT 투자 포트폴리오 전체에 대한 의사 결정을 이끌어내는 데 사용된다. 따라서 EA의 주요 이해관계자는 기관이 임무를 가능한 한 효과적이고 효율적으로 수행하도록 보장하는 고위 관리자와 임원이다.
뷰 모델 엔터프라이즈 아키텍처 뷰의 종류
대조적으로, 세그먼트 아키텍처는 핵심 임무 영역, 비즈니스 서비스 또는 엔터프라이즈 서비스를 위한 간단한 로드맵을 정의한다. 세그먼트 아키텍처는 비즈니스 관리에 의해 주도되며 시민 및 기관 직원에 대한 서비스 제공을 개선하는 제품을 제공한다. 투자 관점에서 세그먼트 아키텍처는 핵심 임무 영역 또는 공통 또는 공유 서비스를 지원하는 비즈니스 사례 또는 비즈니스 사례 그룹에 대한 의사 결정을 이끌어낸다. 세그먼트 아키텍처의 주요 이해관계자는 비즈니스 소유자 및 관리자이다. 세그먼트 아키텍처는 구조, 재사용 및 정렬의 세 가지 원칙을 통해 EA와 관련된다. 첫째, 세그먼트 아키텍처는 EA에서 사용되는 프레임워크를 상속하지만, 핵심 임무 영역 또는 공통 또는 공유 서비스의 특정 요구 사항을 충족하도록 확장 및 전문화될 수 있다. 둘째, 세그먼트 아키텍처는 데이터, 공통 비즈니스 프로세스 및 투자, 애플리케이션 및 기술을 포함하여 엔터프라이즈 수준에서 정의된 중요한 자산을 재사용한다. 셋째, 세그먼트 아키텍처는 비즈니스 전략, 명령, 표준 및 성과 측정과 같이 엔터프라이즈 수준에서 정의된 요소와 정렬된다.
뷰 모델 엔터프라이즈 아키텍처 뷰의 종류
"우주 시스템 아키텍처 모델링을 위한 프레임워크"를 탐색하면서 피터 셰임즈와 조셉 스키퍼(2006)는 "명목상 뷰 집합"을 정의했다. CCSDS RASDS, RM-ODP, ISO 10746에서 파생되었으며 IEEE 1471을 준수한다.
아래 설명된 "뷰 집합"은 가능한 모델링 뷰포인트의 목록이다. 이 모든 뷰가 어떤 프로젝트에도 사용될 필요는 없으며, 필요에 따라 다른 뷰가 정의될 수 있다. 일부 분석에서는 여러 뷰포인트의 요소가 새로운 뷰로 결합될 수 있으며, 아마도 계층화된 표현을 사용할 수도 있다.
후반부 발표에서 이 명목상 뷰 집합은 확장된 RASDS 의미 정보 모델 파생으로 제시되었다. 여기서 RASDS는 우주 데이터 시스템을 위한 참조 아키텍처(Reference Architecture for Space Data Systems)를 의미한다. 두 번째 이미지를 참조하라.
기업 뷰포인트
정보 뷰포인트
기능 뷰포인트
물리적 뷰포인트
엔지니어링 뷰포인트
소프트웨어 뷰 – 시스템의 소프트웨어 공학적 측면, 소프트웨어 구성 요소 내 기능의 소프트웨어 설계 및 구현, 사용될 언어 및 라이브러리 선택, API 정의, 추상 기능 객체를 실제 소프트웨어 요소로 공학하는 것을 설명한다. 소프트웨어 언어를 사용하여 설명된 일부 기능 요소는 실제로 하드웨어(FPGA, ASIC)로 구현될 수 있다.
기술 뷰포인트
이전에 나열된 뷰 모델과 달리, 이 "명목상 뷰 집합"은 광범위한 뷰를 나열하며, 일반적인 소프트웨어 집약적 시스템 아키텍처를 설명하기 위한 강력하고 확장 가능한 접근 방식을 개발할 수 있다.
뷰 모델 각주
속성
이 문서는 다음을 포함합니다: 퍼블릭 도메인 자료 - National Institute of Standards and Technology 웹사이트 https://www.nist.gov.
임의 정밀도 연산
컴퓨터 과학에서 임의 정밀도 연산(Arbitrary-precision arithmetic)은 큰 수 연산, 다중 정밀도 연산 또는 때로는 무한 정밀도 연산이라고도 불리며, 호스트 시스템의 가용 메모리에 의해서만 정밀도의 자릿수가 잠재적으로 제한되는 수에 대해 계산이 수행됨을 나타낸다. 이는 일반적으로 8비트에서 64비트의 정밀도를 제공하는 대부분의 산술 논리 장치(ALU) 하드웨어에서 발견되는 더 빠른 고정 소수점 연산과 대조된다.
여러 최신 프로그래밍 언어는 큰 수에 대한 내장 지원을 제공하며, 다른 언어는 임의 정밀도 정수형 및 부동소수점 연산을 위한 라이브러리를 사용할 수 있다. 이 구현들은 프로세서 레지스터 크기와 관련된 고정된 비트 수로 값을 저장하는 대신, 일반적으로 가변 길이 배열의 자릿수를 사용한다.
임의 정밀도는 산술 속도가 제한 요소가 아니거나 매우 큰 수에 대한 정확한 결과가 필요한 응용 분야에 사용된다. 이는 많은 컴퓨터 대수학 시스템에서 제공하는 심볼릭 연산과 혼동해서는 안 된다. 심볼릭 연산은 π·sin(2)와 같은 표현식으로 숫자를 나타내며, 따라서 무한 정밀도로 모든 계산 가능한 수를 나타낼 수 있다.
임의 정밀도 연산 응용 분야
일반적인 응용 분야는 공개 키 암호 방식이며, 그 알고리즘은 일반적으로 수백 자리의 정수 연산을 사용한다. 또 다른 분야는 인위적인 한계와 오버플로가 부적절한 상황이다. 또한 고정 정밀도 계산 결과를 확인하고, 예를 들어 가우스 적분에 나타나는 와 같은 공식에 필요한 계수의 최적 또는 거의 최적의 값을 결정하는 데 유용하다.
임의 정밀도 연산은 π과 같은 기본 수학 상수를 수백만 자리 이상으로 계산하고 자릿수 문자열의 특성을 분석하거나 더 일반적으로 특정 질문을 분석적 방법으로 탐색하기 어려운 리만 제타 함수와 같은 함수의 정확한 동작을 조사하는 데에도 사용된다. 또 다른 예는 망델브로 집합에서 볼 수 있는 것과 같이 극도로 높은 확대율로 프랙탈 이미지를 렌더링하는 경우이다.
임의 정밀도 연산 응용 분야
임의 정밀도 연산은 고정 정밀도 연산의 본질적인 한계인 오버플로를 피하는 데에도 사용될 수 있다. 자동차의 오도미터 디스플레이가 99999에서 00000으로 바뀌는 것과 유사하게, 숫자가 너무 커서 고정된 정밀도 수준에서 표현할 수 없을 때 고정 정밀도 정수는 오버플로를 나타낼 수 있다. 일부 프로세서는 대신 포화를 통해 오버플로를 처리할 수 있다. 이는 결과가 표현할 수 없는 경우, 가장 가까운 표현 가능한 값으로 대체됨을 의미한다. (16비트 부호 없는 포화 연산에서는 65535에 양수 값을 더하면 65535가 된다.) 일부 프로세서는 산술 결과가 사용 가능한 정밀도를 초과할 경우 예외를 생성할 수 있다. 필요한 경우 예외를 포착하고 복구할 수 있다. 예를 들어, 임의 정밀도 연산을 사용하여 소프트웨어에서 연산을 다시 시작할 수 있다.
임의 정밀도 연산 응용 분야
많은 경우, 태스크 또는 프로그래머는 특정 응용 프로그램의 정수 값이 오버플로를 일으킬 만큼 커지지 않을 것임을 보장할 수 있다. 이러한 보장은 실용적인 한계에 기반할 수 있다: 학교 출석 프로그램은 4,000명의 학생이라는 태스크 한계를 가질 수 있다. 프로그래머는 중간 결과가 지정된 정밀도 경계 내에 유지되도록 계산을 설계할 수 있다.
리스프, 파이썬, 펄, 하스켈, 루비, 라쿠와 같은 일부 프로그래밍 언어는 모든 정수 연산에 임의 정밀도 숫자를 사용하거나 사용할 수 있는 옵션이 있다. 이를 통해 정수는 시스템의 가용 메모리에 의해서만 제한되는 어떤 크기로든 커질 수 있다. 비록 이것이 성능을 저하시키지만, 단순한 오버플로로 인한 잘못된 결과(또는 예외)에 대한 우려를 없애준다. 또한 특정 시스템의 워드 크기에 관계없이 모든 기계에서 산술 결과가 동일함을 거의 보장할 수 있게 한다. 프로그래밍 언어에서 임의 정밀도 숫자만을 독점적으로 사용하는 것은 언어를 단순화시키는데, 숫자는 숫자이며 다른 정밀도 수준을 나타내기 위해 여러 유형이 필요 없기 때문이다.
임의 정밀도 연산 구현 문제
임의 정밀도 연산은 프로세서 레지스터에 완전히 맞는 숫자를 사용하는 연산보다 훨씬 느리다. 후자는 일반적으로 하드웨어 산술로 구현되는 반면, 전자는 소프트웨어로 구현되어야 하기 때문이다. 컴퓨터에 특정 연산(정수 나눗셈 또는 모든 부동 소수점 연산 등)을 위한 하드웨어가 부족하고 대신 소프트웨어가 제공되더라도, 이는 사용 가능한 하드웨어 레지스터와 밀접하게 관련된 숫자 크기, 즉 한두 워드만 사용한다. 1950년대와 1960년대의 특정 가변 워드 길이 컴퓨터들, 특히 IBM 1620, IBM 1401 및 하니웰 200 시리즈는 값의 경계를 나타내는 추가 비트와 함께 사용 가능한 저장 공간에 의해서만 제한되는 숫자를 조작할 수 있었다는 예외가 있다.
임의 정밀도 연산 구현 문제
숫자는 고정 소수점 형식 또는 부동소수점 형식으로 임의의 지수를 곱한 유효 숫자로 저장될 수 있다. 그러나 나눗셈은 거의 즉시 무한 반복 자릿수 시퀀스(예: 십진법에서 4/7, 이진법에서 1/10)를 도입하므로, 이러한 가능성이 발생하면 표현이 만족스러운 크기에서 잘리거나 유리수가 사용된다. 즉, 분자와 분모에 큰 정수를 사용한다. 그러나 최대 공약수를 제거하더라도 유리수 연산은 매우 빠르게 다루기 어려워질 수 있다. 1/99 − 1/100 = 1/9900이고, 1/101을 더하면 결과는 10001/999900이다.
임의 정밀도 숫자의 크기는 실제로 사용 가능한 총 저장 공간과 계산 시간에 의해 제한된다.
임의 정밀도로 저장된 숫자에 대한 산술 연산을 효율적으로 수행하기 위해 수많은 알고리즘이 개발되었다. 특히 N 자릿수가 사용된다고 가정할 때, 큰 N에 대한 점근 복잡도를 최소화하기 위한 알고리즘이 설계되었다.
가장 간단한 알고리즘은 덧셈과 뺄셈이며, 여기서는 단순히 자릿수를 순서대로 더하거나 빼고 필요에 따라 올림수를 처리하여 O(N) 알고리즘( 점근 표기법 참조)을 산출한다.
임의 정밀도 연산 구현 문제
비교 또한 매우 간단하다. 차이가 발견될 때까지 상위 자릿수(또는 기계어 단어)를 비교한다. 나머지 자릿수/단어를 비교할 필요는 없다. 최악의 경우는 (N)이지만, 유사한 크기의 피연산자로 훨씬 더 빨리 완료될 수 있다.
곱셈의 경우, 손으로 숫자를 곱하는 데 사용되는 가장 간단한 알고리즘(초등학교에서 가르치는 대로)은 (N2) 연산이 필요하지만, 곱셈 알고리즘은 고속 푸리에 변환에 기반한 쇤하게-슈트라센 알고리즘과 같이 O(N log(N) log(log(N))) 복잡도를 달성하는 알고리즘이 고안되었으며, 약간 더 나쁜 복잡도를 가지지만 더 작은 N에 대해 때로는 뛰어난 실제 성능을 보이는 알고리즘도 있다. 카라추바 알고리즘 곱셈이 그러한 알고리즘이다.
나눗셈의 경우, 호제법을 참조하라.
복잡도 추정치와 함께 알고리즘 목록은 수학 연산의 계산 복잡도를 참조하라.
X86 어셈블리 예시는 외부 링크를 참조하라.
임의 정밀도 연산 사전 설정 정밀도
REXX 및 ooRexx와 같은 일부 언어에서는 계산을 수행하기 전에 모든 계산의 정밀도를 설정해야 한다. 파이썬 및 루비와 같은 다른 언어는 오버플로를 방지하기 위해 자동으로 정밀도를 확장한다.
임의 정밀도 연산 예시
계승 계산은 매우 큰 숫자를 쉽게 생성할 수 있다. 이는 많은 공식(테일러 급수 등)에서 사용되는 데 문제가 되지 않는다. 왜냐하면 다른 항과 함께 나타나기 때문에, 평가 순서에 주의를 기울이면 중간 계산 값이 문제가 되지 않기 때문이다. 계승 값의 근사치가 필요한 경우 스털링 근사는 부동 소수점 연산을 사용하여 좋은 결과를 제공한다. 고정 크기 정수 변수의 가장 큰 표현 가능한 값은 아래 표에 나타난 것처럼 상대적으로 작은 인수에서도 초과될 수 있다. 부동 소수점 숫자도 곧 범위를 벗어나므로, 계산을 숫자의 로그로 다시 캐스팅하는 것이 도움이 될 수 있다.
그러나 큰 계승에 대한 정확한 값이 필요한 경우, 다음의 의사코드와 같이 특수 소프트웨어가 필요하다. 이 코드는 연속적인 계승 값인 1, 1×2, 1×2×3, 1×2×3×4 등을 계산하는 고전적인 알고리즘을 구현한다.
```
```
이 예제를 통해 여러 세부 사항을 논의할 수 있다. 가장 중요한 것은 큰 수 표현 방식의 선택이다. 이 경우, 자릿수에 정수 값만 필요하므로 고정 너비 정수 배열이 적절하다. 배열의 연속적인 요소가 기수의 더 높은 거듭제곱을 나타내도록 하는 것이 편리하다.
임의 정밀도 연산 예시
두 번째로 중요한 결정은 산술의 기수(여기서는 10)를 선택하는 것이다. 고려해야 할 사항이 많다. 스크래치패드 변수 d는 한 자릿수 곱셈의 결과와 이전 자릿수 곱셈의 올림수를 합한 값을 담을 수 있어야 한다. 10진법에서는 16비트 정수가 32767까지 허용하므로 확실히 적절하다. 그러나 이 예제는 n의 값이 한 자릿수로 제한되지 않는다는 점에서 속임수를 썼다. 이는 n > 3200 정도에서는 이 방법이 실패할 것이라는 결과를 초래한다. 더 일반적인 구현에서는 n도 여러 자릿수 표현을 사용한다. 지름길의 두 번째 결과는 여러 자릿수 곱셈이 완료된 후, 올림수의 마지막 값이 단일 자릿수가 아니라 여러 상위 자릿수로 전달되어야 할 수 있다는 것이다.
임의 정밀도 연산 예시
사람의 고려를 위해 결과를 10진수로 인쇄하는 문제도 있다. 기수가 이미 10이므로 배열 `digit`의 연속적인 자릿수를 인쇄하여 결과를 간단하게 표시할 수 있지만, 가장 높은 자릿수가 마지막에 나타난다(예: 123이 "321"로 나타남). 배열 전체를 역순으로 인쇄할 수 있지만, 이는 선행 0("00000...000123")이 있는 숫자를 표시하여 불쾌감을 줄 수 있으므로 이 구현은 공백으로 채워진 텍스트 변수에 표현을 만들고 이를 인쇄한다. 처음 몇 가지 결과(5자리마다 공백을 추가하고 주석을 달았다)는 다음과 같다.
임의 정밀도 연산 예시
이 구현은 컴퓨터에 내장된 연산을 더 효율적으로 사용할 수 있다. 간단한 확장은 기수를 100으로 사용하는 것(출력 번역 과정에서 해당 변경 사항 적용)이거나, 충분히 넓은 컴퓨터 변수(예: 32비트 정수)가 있다면 10,000과 같은 더 큰 기수를 사용할 수 있다. 컴퓨터의 내장 정수 연산에 가까운 2의 거듭제곱 기수에서 작업하는 것이 유리하지만, 출력을 위한 십진법으로의 변환은 더 어려워진다. 일반적인 최신 컴퓨터에서는 덧셈과 곱셈이 피연산자의 값과 무관하게(피연산자가 단일 기계어 단어에 들어맞는 한) 일정한 시간이 걸리므로, 자릿수 배열의 각 요소에 가능한 한 많은 큰 숫자를 패킹하는 데 큰 이점이 있다. 컴퓨터는 또한 예제와 같이 나머지 연산과 나눗셈 연산을 두 번 수행할 필요 없이 곱셈 결과를 자릿수와 올림수로 분리하는 기능을 제공할 수 있으며, 거의 모든 산술 장치는 다중 정밀도 덧셈 및 뺄셈에 활용될 수 있는 올림수 플래그를 제공한다. 이러한 세부 사항은 기계어 코드 프로그래머의 주된 관심사이며, 적절한 어셈블리 언어 큰 숫자 루틴은 이러한 기능에 직접 접근할 수 없고 고수준 문장을 최적화 컴파일러를 사용하여 대상 기계의 모델에 매핑하는 고수준 언어 컴파일 결과보다 빠르게 실행될 수 있다.
한 자릿수 곱셈의 경우 작업 변수는 (기수−1)2 + 올림수 값을 담을 수 있어야 하며, 여기서 올림수의 최대값은 (기수−1)이다. 마찬가지로, 자릿수 배열을 인덱싱하는 데 사용되는 변수 자체도 너비가 제한된다. 인덱스를 확장하는 간단한 방법은 큰 숫자의 자릿수를 편리한 크기의 블록으로 처리하여 주소 지정이 (블록 i, 자릿수 j)와 같이 이루어지도록 하는 것이다. 여기서 i와 j는 작은 정수이거나, 인덱싱 변수에 큰 숫자 기술을 적용할 수도 있다. 궁극적으로, 기계 저장 용량과 실행 시간은 문제 크기에 제약을 가한다.
임의 정밀도 연산 역사
IBM의 최초 비즈니스 컴퓨터인 1950년대 중반의 진공관 기계인 IBM 702는 1자리에서 511자리까지 모든 길이의 자릿수 문자열에 대해 정수 연산을 완전히 하드웨어로 구현했다. 임의 정밀도 연산의 가장 초기에 널리 사용된 소프트웨어 구현은 아마도 맥리스프에 있었을 것이다. 이후 1980년경, VAX/VMS 및 VM/CMS 운영체제는 한 경우에는 문자열 함수 모음으로, 다른 경우에는 EXEC 2 및 REXX 언어로 큰 수 기능을 제공했다.
초기 널리 퍼진 구현은 1959년부터 1970년까지의 IBM 1620을 통해 가능했다. 1620은 이산 트랜지스터를 사용한 십진 숫자 기계였지만, 두 자리부터 사용 가능한 메모리만큼의 길이까지의 자릿수 문자열에 대해 정수 연산을 수행하는 하드웨어(순람표 사용)를 가지고 있었다. 부동 소수점 연산의 경우, 가수부는 100자리 이하로 제한되었고, 지수부는 두 자리로만 제한되었다. 공급된 가장 큰 메모리는 60,000자리를 제공했지만, 1620용 포트란 컴파일러는 기본값이 만족스럽지 않은 경우 제어 카드에서 지정할 수 있었지만 10자리와 같은 고정된 크기를 사용했다.
임의 정밀도 연산 소프트웨어 라이브러리
대부분의 컴퓨터 소프트웨어에서 임의 정밀도 연산은 요청된 정밀도로 숫자를 저장하고 계산을 수행하는 자료형 및 서브루틴을 제공하는 외부 라이브러리를 호출하여 구현된다.
다양한 라이브러리는 임의 정밀도 숫자를 나타내는 방식이 다르며, 일부 라이브러리는 정수 숫자만 사용하고, 다른 라이브러리는 다양한 기수(10진수 또는 2진수 거듭제곱)로 부동소수점 숫자를 저장한다. 일부 라이브러리는 숫자를 단일 값으로 표현하는 대신 분자/분모 쌍(유리수)으로 저장하며, 일부는 계산 가능한 수를 완전히 표현할 수 있지만, 이는 저장 한도까지이다. 근본적으로 튜링 기계는 모든 실수를 표현할 수 없다. 의 크기가 의 크기를 초과하기 때문이다.
미니플로트
컴퓨팅에서 미니플로트(minifloat)는 매우 적은 비트로 표현되는 부동소수점 값이다. 이렇게 정밀도가 줄어들면 범용 수치 계산에는 적합하지 않지만, 다음과 같은 특수 목적에 유용하다.
또한, 부동소수점 및 IEEE 754 숫자의 속성과 구조를 시연하기 위해 컴퓨터 과학 과정에서 교육 도구로 자주 사용된다.
맥락에 따라 미니플로트는 32비트 미만, 16비트 이하 또는 16비트 미만의 모든 크기를 의미할 수 있다. 마이크로플로트라는 용어는 8비트 이하의 모든 크기를 의미할 수 있다.
미니플로트 표기법
이 페이지는 미니플로트를 설명하기 위해 (S.E.M) 표기법을 사용한다.
미니플로트는 IEEE 754 표준의 원칙을 따라 설계할 수 있다. 거의 모든 미니플로트는 비정규수와 정규수에 가장 작은 지수를 사용한다. 많은 미니플로트는 무한과 NaN에 가장 큰 지수를 사용하며, 이는 (특수 지수) SE = 1로 표시된다. 일부 미니플로트는 이 지수 값을 정상적으로 사용하며, 이 경우 SE = 0이다.
지수 편향 B = 2E − 1 − SE이다. 이 값은 모든 표현 가능한 숫자가 표현 가능한 역수를 갖도록 보장한다.
이 표기법은 (B,P,L,U) 형식으로 (2, M + 1, SE − 2E − 1 + 1, 2E − 1 − 1)와 같이 변환할 수 있다.
미니플로트 사용법
라데온 R300 및 R420 GPU는 "fp24" 부동소수점 형식 (1.7.16)을 사용했다. Direct3D 9.0의 "전체 정밀도"는 독점적인 24비트 부동소수점 형식이다. 마이크로소프트의 D3D9(셰이더 모델 2.0) 그래픽 API는 초기에 FP24(ATI의 R300 칩과 유사)와 FP32(엔비디아의 NV30 칩과 유사)를 "전체 정밀도"로 지원했으며, FP16은 그래픽 하드웨어에서 수행되는 정점 및 픽셀 셰이더 계산을 위한 "부분 정밀도"로 지원했다.
미니플로트는 또한 부동소수점을 소프트웨어에서 에뮬레이션해야 하는 마이크로컨트롤러와 같은 임베디드 장치에서도 일반적으로 사용된다. 계산 속도를 높이기 위해 가수는 일반적으로 비트의 정확히 절반을 차지하므로 레지스터 경계가 시프트 없이 부분을 자동으로 주소 지정한다(예: 4비트 장치에서 (1.3.4)).
bfloat16 (1.8.7) 형식은 단정밀도 숫자의 처음 16비트이며, 다른 형식에 대한 하드웨어 지원이 추가되기 전에 이미지 처리 및 기계 학습에서 자주 사용되었다.
미니플로트 사용법
IEEE 754-2008 개정판에는 "반정밀도"라고 불리는 16비트 (1.5.10) 부동소수점(32비트 단정밀도 및 64비트 배정밀도와 반대)이 포함되어 있다.
2016년에 크로노스는 불칸에서 사용할 10비트 (0.5.5) 및 11비트 (0.5.6) 부호 없는 형식을 정의했다. 이 형식은 부호 및 후미 숫자를 잘라내어 양수 반정밀도에서 변환할 수 있다.
2022년에 엔비디아와 다른 회사들은 "fp8" 형식 (1.5.2)에 대한 지원을 발표했다. 이 형식은 후미 숫자를 잘라내어 반정밀도에서 변환할 수 있다.
2023년부터 IEEE SA 워킹 그룹 P3109는 기계 학습에 최적화된 8비트 미니플로트 표준을 작업하고 있다. 현재 초안은 단일 형식이 아닌 "binary8pP"라는 7가지 다른 형식의 패밀리를 정의하며, 여기서 "P"는 1부터 7까지의 숫자이고 비트 패턴은 (1.8-P.P-1)이다. 이 형식은 또한 SE=0을 가지며 가장 큰 값을 무한대로 사용하고 음수 0의 패턴을 NaN으로 사용한다.
또한 2023년부터 4비트 (1.2.1) 부동소수점 숫자(네 가지 특수 IEEE 값 없음)는 대형 언어 모델의 가속화에 사용되기 시작했다.
미니플로트 예시
여기서는 1비트 부호, 4비트 지수, 3비트 가수 (1.4.3)를 가진 1바이트(8비트) 미니플로트를 시연한다. 지수 편향은 다른 IEEE 754 부동소수점과 일치하도록 값을 1 중심으로 설정하기 위해 7로 정의된다. 따라서 (대부분의 값에 대해) 지수 x의 실제 승수는 2x−7이다. 모든 IEEE 754 원칙이 유효해야 한다. 이 형식은 명령어에 매우 흔하게 사용된다.
0은 지수가 0이고 가수가 0인 것으로 표현된다. 지수가 0이라는 것은 0이 선행 "0." 접두사를 가진 비정규수이며, 가수가 0이면 소수점 이하의 모든 비트가 0이므로 이 값은 으로 해석된다. 부동소수점 숫자는 부호 있는 0을 사용하므로 도 사용할 수 있으며 양수 과 같다.
가장 낮은 지수의 경우 가수는 "0."으로 확장되고 지수 값은 가장 작은 정규화된 숫자처럼 1 더 높은 것으로 처리된다.
다른 모든 지수의 경우 가수는 "1."로 확장된다.
무한 값은 가수가 0으로 설정된 가장 높은 지수를 갖는다. 부호 비트는 양수 또는 음수가 될 수 있다.
미니플로트 예시
NaN 값은 가장 높은 지수를 가지며, 가수는 0이 아니다.
이것은 이 예시 8비트 부동소수점의 가능한 모든 값에 대한 차트이다.
NaN이 아닌 값은 242개밖에 없다( +0과 −0을 다른 것으로 간주할 경우). 14개의 비트 패턴이 NaN을 나타내기 때문이다.
이러한 작은 크기에서는 다른 편향 값이 흥미로울 수 있다. 예를 들어, 편향이 −2이면 숫자 0-16이 정수 0-16과 동일한 비트 표현을 갖게 되지만, 정수가 아닌 값은 표현할 수 없다는 손실이 발생한다.
모든 비트 할당이 가능하다. 더 적은 정밀도로 더 많은 동적 범위를 필요로 하는 경우 지수에 더 많은 비트를 할당하거나, 더 적은 동적 범위로 더 많은 정밀도를 필요로 하는 경우 가수에 더 많은 비트를 할당할 수 있다. 극단적으로는 모든 비트를 지수에 할당하거나(1.7.0), 한 비트를 제외한 모든 비트를 가수에 할당하여(1.1.6) 지수에 한 비트만 남길 수 있다. 지수에는 최소한 한 비트가 주어져야 한다. 그렇지 않으면 더 이상 부동소수점으로 의미가 없으며, 단지 부호 있는 숫자가 된다.
미니플로트 예시
다음은 (1.3.4)에 대한 모든 가능한 값의 차트이다. M ≥ 2E − 1는 전체 범위에 걸쳐 정밀도가 최소한 0.5를 유지하도록 보장한다.
위와 같은 표는 스크립트를 사용하여 모든 SEMB(부호, 지수, 가수/유효 숫자, 편향) 값 조합에 대해 생성할 수 있다. 파이썬 또는 GDScript.
64개의 값만으로는 모든 값을 다이어그램으로 나타낼 수 있어 유용하다.
이 그래픽은 IEEE 754의 규칙을 정확히 따르는 두 개의 6비트 (1.3.2) 미니플로트의 수학을 보여준다. 녹색 X는 NaN 결과, 청록색 X는 +무한 결과, 자홍색 X는 −무한 결과이다. 유한 결과의 범위는 같은 값을 연결하는 곡선으로 채워져 있으며, 양수는 파란색, 음수는 빨간색이다.
정규화된 숫자, 비정규수, 부호 있는 0, 부호 있는 무한대, 여러 NaN 값을 포함하여 모든 IEEE 원칙을 따르는 가장 작은 부동소수점 크기는 1비트 부호, 2비트 지수, 1비트 가수를 가진 4비트 부동소수점이다.
미니플로트 예시
정규화된 숫자가 필요하지 않은 경우, 지수를 1로 줄여 크기를 3비트로 줄일 수 있다.
부호 비트를 제외할 수 있는 상황에서는 위 예시 각각을 1비트 더 줄여 위 표의 첫 번째 행만 유지할 수 있다. 1비트 지수와 1비트 가수를 가진 2비트 부동소수점은 0, 1, Inf, NaN 값만 가질 것이다.
가수를 제거하면 0과 Inf 두 가지 값만 허용된다. 지수를 제거하는 것은 작동하지 않는다. 위 공식은 0과 sqrt(2)/2를 생성한다. 지수는 최소 1비트여야 한다. 그렇지 않으면 더 이상 부동소수점으로 의미가 없어진다(단지 부호 있는 숫자가 될 뿐).
Bfloat16 부동소수점
bfloat16(brain floating point) 부동소수점 형식은 주기억장치에서 16비트를 차지하는 컴퓨터 숫자 형식이다. 이는 부동 소수점(floating radix point)을 사용하여 넓은 동적 범위의 숫자 값을 나타낸다. 이 형식은 기계 학습 및 니어 센서 컴퓨팅의 가속화를 목표로 하는 32비트 IEEE 754 단정밀도 부동소수점 형식(binary32)의 단축(16비트) 버전이다. 8개의 지수 비트를 유지함으로써 32비트 부동소수점 숫자의 대략적인 동적 범위를 보존하지만, binary32 형식의 24비트 유효숫자 대신 8비트 정밀도만을 지원한다. 단정밀도 32비트 부동소수점 숫자보다 bfloat16 숫자는 정수 계산에는 부적합하지만, 이는 의도된 용도가 아니다. bfloat16은 기계 학습 알고리즘의 저장 요구 사항을 줄이고 계산 속도를 높이는 데 사용된다.
Bfloat16 부동소수점
bfloat16 형식은 구글의 인공지능 연구 그룹인 구글 브레인에서 개발되었다. 이는 인텔 제온 프로세서(AVX-512 BF16 확장), 인텔 데이터 센터 GPU, 인텔 너바나 NNP-L1000, 인텔 FPGA, AMD 젠, AMD 인스팅트, 엔비디아 GPU, 구글 클라우드 TPU, AWS 인퍼렌티아, AWS 트레이니움, ARMv8.6-A, 애플의 M2 및 이후 A15 칩 등 다양한 CPU, GPU, AI 프로세서에서 활용된다. CUDA, 인텔 oneAPI Math Kernel Library, AMD ROCm, AMD 최적화 CPU 라이브러리, PyTorch, 텐서플로 등 여러 라이브러리가 bfloat16을 지원한다. 이러한 플랫폼에서 bfloat16은 혼합 정밀도 연산에서도 사용될 수 있으며, 이때 bfloat16 숫자는 더 넓은 자료형으로 연산되고 확장될 수 있다.
Bfloat16 부동소수점 bfloat16 부동소수점 형식
bfloat16은 다음 형식을 가진다.
bfloat16 형식은 단축된 IEEE 754 단정밀도 32비트 부동소수점 형식이므로 IEEE 754 단정밀도 32비트 부동소수점 형식으로의 형 변환 및 그 반대 변환이 빠르다. bfloat16 형식으로 변환할 때 지수 비트는 보존되는 반면, 유효숫자 필드는 절단(따라서 0으로 반올림에 해당) 또는 기타 반올림 메커니즘에 의해 축소될 수 있으며, NaN 특수 사례는 무시된다. 지수 비트를 보존함으로써 32비트 부동소수점의 범위인 약 10−38에서 약 3 × 1038이 유지된다.
비트는 다음과 같이 배열된다.
bfloat16 이진 부동소수점 지수는 오프셋 이진 표현을 사용하여 인코딩되며, 0 오프셋은 127이다. 이는 IEEE 754 표준에서 지수 편향으로도 알려져 있다.
따라서, 오프셋 이진 표현으로 정의된 실제 지수를 얻기 위해서는 지수 필드 값에서 127의 오프셋을 빼야 한다.
지수 필드의 최소 및 최대 값(00H 및 FFH)은 IEEE 754 표준 형식과 마찬가지로 특별하게 해석된다.
Bfloat16 부동소수점 bfloat16 부동소수점 형식
최소 양수 정규 값은 2−126 ≈ 1.18 × 10−38이고 최소 양수 (비정규) 값은 2−126−7 = 2−133 ≈ 9.2 × 10−41이다.
가장 일반적인 사용 사례는 IEEE 754 binary32와 bfloat16 사이의 변환이다. 다음 섹션에서는 변환 과정과 변환 시의 반올림 방식을 설명한다. bfloat16으로 또는 bfloat16에서 다른 형식으로의 변환 시나리오도 있을 수 있음을 참고한다. 예를 들어, int16과 bfloat16.
binary32에서 bfloat16으로. bfloat16이 처음 저장 형식으로 도입되었을 때, IEEE 754 binary32(32비트 부동소수점)에서 bfloat16으로의 변환은 절단(0으로 반올림)이었다. 이후 행렬 곱셈 단위의 입력이 되면서, 변환은 하드웨어 플랫폼에 따라 다양한 반올림 메커니즘을 가질 수 있다. 예를 들어, 구글 TPU의 경우 변환 시 반올림 방식은 가장 가까운 짝수로 반올림이다. ARM은 비IEEE Round-to-Odd 모드를 사용한다. 엔비디아의 경우, float 숫자를 가장 가까운 짝수로 반올림 모드로 bfloat16 정밀도로 변환하는 것을 지원한다.
Bfloat16 부동소수점 특수 값 인코딩
IEEE 754에서와 마찬가지로, 양의 무한대와 음의 무한대는 해당 부호 비트와 8개의 지수 비트가 모두 설정(FFhex)되고 모든 유효숫자 비트가 0으로 표현된다. 명시적으로,
IEEE 754에서와 마찬가지로, NaN 값은 부호 비트, 8개의 지수 비트가 모두 설정(FFhex)되고 모든 유효숫자 비트가 0이 아닌 경우로 표현된다. 명시적으로,
여기서 k, l, m, n, o, p, q 중 적어도 하나는 1이다. IEEE 754와 마찬가지로, NaN 값은 quiet 또는 signaling일 수 있지만, 2018년 9월 현재 signaling bfloat16 NaN의 알려진 사용 사례는 없다.
Bfloat16 부동소수점 범위 및 정밀도
Bfloat16은 32비트 IEEE 754 단정밀도 부동소수점 형식(binary32)의 숫자 범위를 유지하면서 정밀도를 24비트에서 8비트로 줄이도록 설계되었다. 이는 정밀도가 2에서 3십진수 자릿수 사이이며, bfloat16은 최대 약 3.4 × 1038의 유한 값을 표현할 수 있음을 의미한다.
Bfloat16 부동소수점 예시
이 예시들은 부동소수점 값의 비트 표현을 십육진법과 이진법으로 보여준다. 여기에는 부호, (편향된) 지수, 유효숫자가 포함된다.
일반 bfloat16 숫자의 최대 양의 유한 값은 3.38953139 × 1038이며, 단정밀도에서 표현 가능한 최대 양의 유한 값인 (224 − 1) × 2−23 × 2127 = 3.402823466 × 1038보다 약간 낮다.
구마노군
구마노군(熊野郡)은 일본 교토부(단고국)에 있던 군이다.
구마노군 군역
1879년 행정 구역으로 발족 당시의 군역은 교탄고시의 일부에 해당한다.
직관주의 유형 이론
직관주의 유형 이론(Intuitionistic type theory, 直觀主義類型理論), 직관주의 유형론, 구성주의 유형 이론 또는 마르틴뢰프 유형 이론(Martin-Löf type theory, MLTT)은 유형 이론이자 대안적인 수학의 기초이다. 직관주의 유형 이론은 스웨덴의 수학자이자 철학자인 페르 마르틴뢰프(Per Martin-Löf)가 만들었으며, 1972년에 처음 출판되었다. 이 유형 이론에는 여러 버전이 있는데, 마르틴뢰프는 이론의 내포적(intensional) 및 외연적(extensional) 변형과 초기의 비가술적(非可述的, impredicative) 버전을 모두 제안했지만, 지라르의 역설(Girard's paradox)로 인해 모순이 있는 것으로 나타나 가술적(predicative) 버전으로 대체되었다. 그러나 모든 버전은 의존형을 사용하는 구성주의 논리의 핵심 설계를 유지한다.
직관주의 유형 이론 설계
마르틴뢰프는 수학적 구성주의의 원리에 따라 유형 이론을 설계했다. 구성주의는 모든 존재 증명이 "증거"를 포함해야 한다고 요구한다. 따라서 "1000보다 큰 소수가 존재한다"는 증명은 소수이면서 1000보다 큰 특정 숫자를 식별해야 한다. 직관주의 유형 이론은 BHK 해석을 내면화함으로써 이러한 설계 목표를 달성했다. 유용한 결과는 증명이 검사, 비교 및 조작될 수 있는 수학적 객체가 된다는 것이다.
직관주의 유형 이론의 유형 생성자는 논리적 연결사와 일대일 대응을 따르도록 구축되었다. 예를 들어, 함의()라는 논리적 연결사는 함수의 유형()에 해당한다. 이 대응을 커리-하워드 동형이라고 한다. 이전 유형 이론도 이 동형을 따랐지만, 마르틴뢰프의 이론은 의존형을 도입하여 술어 논리로 확장한 최초의 이론이었다.
직관주의 유형 이론 유형 이론
유형 이론은 존재하는 근본적인 객체를 기술하는 수학적 존재론 또는 기초론의 일종이다. 표준 기초론인 집합론과 수리 논리학의 결합에서, 근본적인 객체는 원소를 포함하는 컨테이너인 집합이다. 유형 이론에서 근본적인 객체는 항(term)이며, 각 항은 오직 하나의 유형(type)에 속한다.
직관주의 유형 이론은 세 가지 유한 유형(finite type)을 가지며, 이들은 다섯 가지 다른 유형 생성자를 사용하여 구성된다. 집합론과는 달리, 유형 이론은 프레게의 논리처럼 논리 위에 구축되지 않는다. 따라서 유형 이론의 각 기능은 수학과 논리 모두의 기능으로 두 가지 역할을 한다.
세 가지 유한 유형이 있다. 0 유형은 항을 포함하지 않는다. 1 유형은 하나의 기초 항(canonical term)을 포함한다. 2 유형은 두 개의 기초 항을 포함한다.
0 유형은 항을 포함하지 않으므로 공 유형이라고도 불린다. 존재할 수 없는 모든 것을 나타내는 데 사용된다. 또한 으로도 쓰이며 증명 불가능한 모든 것(즉, 그것의 증명이 존재할 수 없음)을 나타낸다. 결과적으로 부정은 그것에 대한 함수로 정의된다. .