맨위로가기

SPARC

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

SPARC는 1985년 썬 마이크로시스템즈가 개발한 RISC(Reduced Instruction Set Computing) 기반의 명령어 집합 아키텍처이다. 이 아키텍처는 부동 소수점 연산과 바이너리 레벨 호환성에 중점을 두었으며, 여러 번의 개정을 거쳐 SPARC V7, V8, V9 버전으로 발전했다. SPARC는 썬의 워크스테이션과 서버, 그리고 후지쯔 등의 제품에 사용되었으며, 오픈 소스 구현도 존재한다. SPARC 아키텍처는 슈퍼컴퓨터 분야에서도 활용되었으며, 후지쯔의 K 컴퓨터는 SPARC64 VIIIfx CPU를 사용하여 2011년 TOP500 목록에서 1위를 기록했다.

더 읽어볼만한 페이지

  • 후지쯔 - 가와사키 프론탈레
    가와사키 프론탈레는 1955년 후지쓰 축구부로 창단되어 1997년 프로팀으로 전환한 일본의 프로 축구단으로, J2리그 두 차례 우승과 J1리그 네 차례 우승을 포함해 다수의 메이저 타이틀을 획득하며 J리그 최강팀으로 자리매김했고 지역 밀착 활동으로도 유명하다.
  • 후지쯔 - K 컴퓨터
    K 컴퓨터는 일본 이화학연구소에서 개발한 슈퍼컴퓨터로, 2011년 세계 최고 성능을 기록했으며, 기상 예측 등 다양한 분야에 활용되었으나 운영 비용 문제로 2019년 가동이 중단되었다.
  • 32비트 컴퓨터 - VAX
    VAX는 DEC에서 개발한 가상 메모리를 지원하는 32비트 CISC 컴퓨터 아키텍처 및 컴퓨터 시리즈로, PDP-11의 확장이며, 다양한 모델과 운영 체제를 지원하며 슈퍼미니컴퓨터 시장에서 인기를 얻었으나 RISC 아키텍처의 등장으로 대체되었다.
  • 32비트 컴퓨터 - 모토로라 68000 시리즈
    모토로라 68000 시리즈는 1979년 출시된 16/32비트 마이크로프로세서 제품군으로, 데스크톱 컴퓨터, 워크스테이션, 게임 콘솔 등 다양한 시스템에 사용되었으며, 직교적인 명령어 집합, 다양한 주소 지정 방식, 슈퍼바이저 모드 등의 특징을 갖추고 성능과 기능이 개선되었다.
  • 오라클 코퍼레이션 - 오라클 파크
    오라클 파크는 샌프란시스코 자이언츠의 홈 구장으로, 맥코비 코브와 인접한 독특한 입지 조건과 스플래시 히트 존으로 유명하며 야구 외 다양한 스포츠 및 문화 행사가 개최되는 장소이다.
  • 오라클 코퍼레이션 - Btrfs
    Btrfs는 내결함성, 복구 기능, 쉬운 관리를 특징으로 하는 카피-온-라이트 방식의 파일 시스템으로, 동적 아이노드 할당, 쓰기 가능한 스냅샷, 서브볼륨, 압축, 온라인 조각 모음 등의 기능을 제공하며 데이터 무결성 보장 및 오류 자동 수정이 가능하다.
SPARC
SPARC
아키텍처 개요
이미지
설계자선 마이크로시스템즈 (현재 오라클 코퍼레이션에 인수됨)
비트 수64비트 (32 → 64)
출시1986년 (생산), 1987년 (출하)
버전V9 (1993) / OSA2017
설계 방식RISC
유형로드-스토어
인코딩고정
분기조건 코드
엔디언Bi (Big → Bi)
페이지 크기8 KB (4 KB → 8 KB)
확장 기능VIS 1.0, 2.0, 3.0, 4.0
개방 여부예, 로열티 없음
범용 레지스터31 (G0 = 0; 비전역 레지스터는 레지스터 윈도우 사용)
부동 소수점 레지스터32 (32개의 단정밀도, 32개의 배정밀도 또는 16개의 쿼드 정밀도로 사용 가능)

2. 특징

SPARC 아키텍처는 초기 RISC I과 II, 그리고 IBM 801을 포함한 초기 RISC 설계에 큰 영향을 받았다. 이러한 초기 RISC 설계는 최소주의적이었으며, 가능한 한 적은 기능이나 연산 코드를 포함하고 거의 한 사이클당 한 개의 명령을 실행하는 것을 목표로 했다. 이는 곱셈이나 나눗셈과 같은 명령이 없다는 점을 포함하여 여러 면에서 MIPS 아키텍처와 유사했다. SPARC의 또 다른 특징은 이 초기 RISC 운동의 영향을 받아 분기 지연 슬롯을 가지고 있다는 것이다.

SPARC 프로세서는 일반적으로 최대 160개의 범용 레지스터를 포함한다. "Oracle SPARC 아키텍처 2015" 사양에 따르면 "구현은 72개에서 640개의 64비트 범용" 레지스터를 포함할 수 있다.[4] 어느 시점에서든 소프트웨어에서 즉시 볼 수 있는 레지스터는 32개뿐이다. 8개는 전역 레지스터 세트이며 (그중 하나인 '''g0'''는 하드와이어로 0으로 고정되어 있어 레지스터로 사용할 수 있는 것은 7개뿐입니다) 나머지 24개는 레지스터 스택에서 가져온다. 이 24개의 레지스터는 레지스터 윈도우라고 불리는 것을 형성하며, 함수 호출/반환 시 이 윈도우는 레지스터 스택 위아래로 이동한다. 각 윈도우에는 8개의 로컬 레지스터가 있으며, 인접한 각 윈도우와 8개의 레지스터를 공유한다. 공유 레지스터는 함수 매개변수를 전달하고 값을 반환하는 데 사용되며, 로컬 레지스터는 함수 호출 간에 로컬 값을 유지하는 데 사용된다.

SPARC의 "확장성"은 SPARC 사양이 임베디드 프로세서에서 대형 서버 프로세서에 이르기까지 동일한 코어 (비특권) 명령어 집합을 공유하는 구현을 허용한다는 사실에서 비롯된다. 확장 가능한 아키텍처 매개변수 중 하나는 구현된 레지스터 윈도우의 수이다. 사양은 3개에서 32개의 윈도우를 구현할 수 있도록 허용하므로, 구현은 최대 호출 스택 효율성을 제공하기 위해 32개를 모두 구현하거나, 설계의 비용과 복잡성을 줄이기 위해 3개만 구현하거나, 그 사이의 숫자를 구현하도록 선택할 수 있다. 유사한 레지스터 파일 기능을 포함하는 다른 아키텍처로는 인텔 i960, IA-64, AMD 29000 등이 있다.

아키텍처는 여러 차례 개정되었다. 버전 8에서는 하드웨어 곱셈 및 나눗셈 기능이 추가되었다. 64비트 (주소 지정 및 데이터)는 1994년에 발표된 버전 9 SPARC 사양에 추가되었다.

SPARC 버전 8에서 부동 소수점 레지스터 파일에는 16개의 배정밀도 레지스터가 있다. 각 레지스터는 두 개의 단정밀도 레지스터로 사용할 수 있어 총 32개의 단정밀도 레지스터를 제공한다. 배정밀도 레지스터의 짝수-홀수 번호 쌍은 사중 정밀도 레지스터로 사용할 수 있으며, 이를 통해 8개의 사중 정밀도 레지스터를 사용할 수 있다. SPARC 버전 9는 16개의 배정밀도 레지스터를 더 추가했지만 (8개의 사중 정밀도 레지스터로도 접근 가능), 이러한 추가 레지스터는 단정밀도 레지스터로 접근할 수 없다. 2024년 현재, 어떤 SPARC CPU도 하드웨어에서 사중 정밀도 연산을 구현하지 않는다.[5]

태그 덧셈 및 뺄셈 명령어는 두 피연산자의 하위 두 비트가 0인지 확인하고, 그렇지 않은 경우 오버플로를 보고하는 값에 대한 덧셈과 뺄셈을 수행한다. 이는 ML, Lisp, 그리고 태그된 정수 형식을 사용할 수 있는 유사한 언어의 런타임 구현에 유용할 수 있다.

32비트 SPARC V8 아키텍처의 바이트 순서는 순수하게 빅 엔디안이다. 64비트 SPARC V9 아키텍처는 빅 엔디안 명령을 사용하지만, 응용 프로그램 명령어 (로드-저장) 수준 또는 메모리 페이지 수준 (MMU 설정을 통해)에서 빅 엔디안 또는 리틀 엔디안 바이트 순서로 데이터에 접근할 수 있다. 후자는 PCI 버스와 같이 본질적으로 리틀 엔디안 장치에서 데이터를 접근하는 데 자주 사용된다.

2. 1. 레지스터 윈도우

SPARC 아키텍처는 중첩된 레지스터 윈도우 방식을 사용한다. 어느 시점에서든 32개의 범용 레지스터가 보이며, 하드웨어의 현재 윈도우 포인터(''CWP'') 변수가 현재 집합을 가리킨다. 레지스터 파일의 총 크기는 아키텍처의 일부가 아니므로 기술 발전에 따라 레지스터를 추가할 수 있다. SPARC V7 및 V8에서는 최대 32개의 윈도우까지 가능하다.

''CWP''는 일반적으로 SAVE 명령어(새로운 스택 프레임을 열고 레지스터 윈도우를 전환하기 위해 프로시저 호출 중에 사용됨)에 의해 감소되거나 RESTORE 명령어(프로시저에서 반환하기 전에 호출로 다시 전환)에 의해 증가한다. 트랩 이벤트(인터럽트, 예외 또는 TRAP 명령어) 및 RETT 명령어(트랩에서 반환)도 ''CWP''를 변경한다. SPARC V9의 경우 CWP 레지스터는 RESTORE 명령어 중에 감소하고 SAVE 명령어 중에 증가하는데, 이는 SPARC V8에서 PSR.CWP의 동작과 반대이다. 이 변경 사항은 비특권 명령어에는 영향을 미치지 않는다.

윈도우 주소 지정
레지스터 그룹니모닉레지스터 주소가용성
globalG0...G7R[}0]...R[}7]항상 동일하며, G0은 항상 0입니다.
outO0...O7R[}8]...R[15]호출된 서브루틴에 전달하고 반환해야 하며, "in"으로 사용됩니다.
localL0...L7R[16]...R[23]현재 서브루틴에만 로컬입니다.
inI0...I7R[24]...R[31]호출자로부터 전달받아 호출자에게 반환되며, "out"으로 사용됩니다.



SPARC 레지스터는 위 표에 나와 있다. 곱셈 단계, 정수 곱셈 및 정수 나눗셈 명령어에 사용되는 비윈도우 Y 레지스터도 있다.

SPARC 프로세서는 일반적으로 128개의 범용 레지스터를 가지지만, 임의의 시점에서 소프트웨어에 보이는 것은 32개뿐이다. 그중 8개는 범용 레지스터지만, ''g0'' 레지스터는 항상 내용이 0이므로 실질적인 범용 레지스터는 7개이다. 나머지 24개는 콜 스택의 일부를 레지스터화한 것이다.

이들 24개의 레지스터는 레지스터 윈도우를 형성하며, 함수 호출과 반환 시 이 윈도우가 레지스터 스택 위를 상하로 이동한다. 각 윈도우는 8개의 로컬 레지스터를 가지며, 8개의 레지스터를 상하의 인접 윈도우의 레지스터와 공유한다. 공유된 레지스터는 함수의 파라미터 전달과 결과 값을 반환하기 위해 사용되며, 로컬 레지스터는 각 함수에서 로컬 값을 유지하기 위해 사용된다.

SPARC의 "Scalable"은 임베디드 용도부터 서버 용도까지 같은 사양을 구현하고, 비특권 명령에 관해서는 완전히 호환성을 유지하는 것을 의미한다. 아키텍처상 용도에 맞춰 규모를 변경할 수 있는 점은 구현하는 레지스터 윈도우의 개수이다. 사양에서는 3개에서 32개까지의 윈도우 구현을 허용하며, 구현자는 32개를 구현하여 함수 호출 성능을 향상시키거나, 3개만 구현하여 컨텍스트 전환 성능을 향상시키거나, 또는 그 중간을 선택할 수 있다. 이러한 이유로 SPARC 아키텍처는 C 언어 등 구조적 프로그래밍 언어에 맞춰 최적화되어 있다고도 한다.

FPU가 있는 SPARC V8 프로세서는 32개의 32비트 부동 소수점 레지스터를 포함하며, 각각 단일 정밀도 IEEE 754 부동 소수점 숫자를 저장할 수 있다. 짝수-홀수 쌍의 부동 소수점 레지스터는 하나의 이중 정밀도 IEEE 754 부동 소수점 숫자를 저장할 수 있으며, 4개의 부동 소수점 레지스터로 구성된 4중 정렬 그룹은 하나의 4중 정밀도 IEEE 754 부동 소수점 숫자를 저장할 수 있다.

FPU가 있는 SPARC V9 프로세서는 32개의 32비트 부동 소수점 레지스터(각각 단일 정밀도 IEEE 754 부동 소수점 숫자 저장), 32개의 64비트 부동 소수점 레지스터(각각 이중 정밀도 IEEE 754 부동 소수점 숫자 저장), 16개의 128비트 부동 소수점 레지스터(각각 4중 정밀도 IEEE 754 부동 소수점 숫자 저장)를 포함한다. 레지스터는 64개의 32비트 레지스터 집합으로 구성되며, 처음 32개는 32비트 부동 소수점 레지스터, 64개 레지스터의 짝수-홀수 쌍은 64비트 부동 소수점 레지스터, 4개의 부동 소수점 레지스터로 구성된 4중 정렬 그룹은 128비트 부동 소수점 레지스터로 사용된다. 부동 소수점 레지스터는 윈도우가 적용되지 않으며, 모두 글로벌 레지스터이다.

SPARC 아키텍처는 캘리포니아 대학교 버클리의 RISC I & II (버클리 RISC영어) 설계에 큰 영향을 받았다. 유사한 레지스터 윈도우를 가진 아키텍처로 Intel i960, AMD 29000이 있다.

SPARC 버전 8 (1987년)에서 부동소수점레지스터 파일은 16개의 배정밀도 레지스터를 가지며, 각 레지스터는 2개의 단정밀도 레지스터로도 사용할 수 있어 총 32개의 단정밀도 레지스터가 된다. 2개의 배정밀도 레지스터를 사배정밀도 레지스터로 사용할 수도 있어, 전체적으로 8개의 사배정밀도 레지스터가 된다. SPARC 버전 9 (1995년)에서는 16개의 배정밀도 레지스터를 추가했지만, 이것들은 단정밀도 레지스터로 사용할 수 없고 사배정밀도 레지스터 8개로만 사용 가능하다.

2. 2. 명령어 형식

SPARC의 모든 명령어는 32비트 워드를 차지하며 워드 경계에서 시작한다. 처음 두 비트로 구별되는 네 가지 형식이 사용된다.[10] 모든 산술 및 논리 명령어는 2개의 소스 피연산자와 1개의 대상 피연산자를 갖는다.[10] RD는 "대상 레지스터"로, 연산의 출력이 저장된다.[10] 대부분의 SPARC 명령어는 적어도 이 레지스터를 가지고 있으므로 명령어 형식의 "앞쪽" 근처에 위치한다.[10] RS1과 RS2는 "소스 레지스터"로, 존재하거나 상수로 대체될 수 있다.[10]

SPARC 명령어 형식
형식비트
313029282726252423222120191817161514131211109876543210
SETHI 형식00RD100즉시 상수 22비트
I 분기 형식00Aicc010변위 상수 22비트
F 분기 형식00Afcc110변위 상수 22비트
C 분기 형식00Accc111변위 상수 22비트
CALL disp01PC 상대 변위
산술 레지스터10RD연산 코드RS100RS2
산술 즉시10RD연산 코드RS11즉시 상수 13비트
FPU 연산10FD110100/110101FS1opfFS2
CP 연산10RD110110/110111RS1opcRS2
JMPL 레지스터10RD111000RS100RS2
JMPL 즉시10RD111000RS11즉시 상수 13비트
LD/ST 레지스터11RD연산 코드RS100RS2
LD/ST 즉시11RD연산 코드RS11즉시 상수 13비트


2. 3. 명령어

SPARC 명령어 집합은 로드/스토어, ALU 연산, 분기, 부동 소수점 연산 등 다양한 종류의 명령어를 포함한다.

분기 지연 슬롯이 존재하는 등, MIPS 아키텍처와 여러 면에서 유사하다.

SPARC 버전 8 (1987년)에서는, 부동소수점레지스터 파일은 16개의 배정밀도 레지스터를 가진다. 각 레지스터는 2개의 단정밀도 레지스터로도 사용할 수 있으며, 모두 32개의 단정밀도 레지스터가 된다. 2개의 배정밀도 레지스터를 사배정밀도 레지스터로 사용할 수도 있으며, 전체적으로 8개의 사배정밀도 레지스터가 된다. SPARC 버전 9 (1995년)에서는 더욱 16개의 배정밀도 레지스터를 추가했지만, 이것들은 단정밀도 레지스터로 사용할 수 없다 (사배정밀도 레지스터 8개로서는 사용 가능).

태그가 붙은 가감산 명령은 LSB의 2비트를 무시하고 가감산을 수행한다. 이는, ML이나 LISP 등 태그가 붙은 정수 형식을 사용하는 언어의 구현에 유효할 것으로 보인다.

==== 로드/스토어 명령어 ====

로드 및 저장 명령어는 세 개의 피연산자 형식을 가지며, 주소 값을 나타내는 두 개의 피연산자와 읽거나 쓸 레지스터를 지정하는 하나의 피연산자를 갖는다. 주소는 두 개의 주소 피연산자를 더하여 생성된다. 두 번째 주소 피연산자는 상수 또는 레지스터일 수 있다. 로드는 주소의 값을 가져와 세 번째 피연산자로 지정된 레지스터에 배치하고, 저장은 첫 번째 피연산자로 지정된 레지스터의 값을 가져와 주소에 배치한다. 어셈블러 언어는 쉼표로 구분된 목록 대신 더하기 기호로 주소를 구분하여 대괄호로 주소 피연산자를 표시한다.

예:

  • ld [%L1+%L2],%L3 ! 주소 %L1+%L2의 32비트 값을 로드하여 %L3에 넣는다.
  • ld [%L1+8],%L2 ! %L1+8의 값을 %L2로 로드한다.
  • ld [%L1],%L2 ! 위와 같지만 오프셋이 없다. 이는 +%G0과 같다.
  • st %L1,[%I2] ! %L1의 값을 %I2에 저장된 위치에 저장한다.
  • st %G0,[%I1+8] ! %I1+8의 메모리를 지운다.


16비트 또는 8비트 정수 데이터 또는 문자열의 8비트 바이트와 같이 32비트가 아닌 데이터가 널리 사용되기 때문에 16비트 하프 워드와 8비트 바이트를 로드하고 저장하는 명령어와 32비트 워드를 로드하는 명령어가 있다. 로드하는 동안 해당 명령어는 지정된 위치에서 바이트 또는 하프 워드만 읽은 다음 대상 레지스터의 나머지 부분을 0으로 채우거나(부호 없는 로드) 바이트 또는 하프 워드의 최상위 비트 값으로 채운다(부호 있는 로드). 저장하는 동안 해당 명령어는 레지스터의 상위 비트를 버리고 하위 비트만 저장한다.

또한 부동 소수점 연산에 사용되는 배정밀도 값을 로드하기 위한 명령어가 있어 지정된 레지스터와 "다음" 레지스터에서 8바이트를 읽거나 쓰므로 로드의 대상이 L1이면 L1과 L2가 설정된다. 32비트 SPARC의 범용 레지스터에 대한 로드 및 저장 명령에는 LD, ST, LDUB(부호 없는 바이트), LDSB(부호 있는 바이트), LDUH(부호 없는 하프 워드), LDSH(부호 있는 하프 워드), LDD(더블 로드), STB(바이트 저장), STH(하프 워드 저장), STD(더블 저장)가 있다.

SPARC V9에서 레지스터는 64비트이며, LD 명령어는 LDUW로 이름이 변경되었으며, 레지스터의 상위 32비트를 지우고 32비트 값을 하위 32비트로 로드하며, ST 명령어는 STW로 이름이 변경되었으며, 레지스터의 상위 32비트를 버리고 하위 32비트만 저장한다. 새로운 LDSW 명령어는 레지스터의 상위 비트를 워드의 최상위 비트 값으로 설정하고 32비트 값을 하위 비트로 로드한다. 새로운 LDX 명령어는 64비트 값을 레지스터로 로드하고 STX 명령어는 레지스터의 모든 64비트를 저장한다.

LDF, LDDF, LDQF 명령어는 단정밀도, 배정밀도 또는 쿼드 정밀도 값을 메모리에서 부동 소수점 레지스터로 로드하고, STF, STDF, STQF 명령어는 단정밀도, 배정밀도 또는 쿼드 정밀도 부동 소수점 레지스터를 메모리에 저장한다.

메모리 배리어 명령어인 MEMBAR는 메모리 참조 간의 순서 제약 조건을 명확하게 표현하고 메모리 참조의 완료에 대한 명시적인 제어를 용이하게 한다. 예를 들어, MEMBAR 명령어 앞에 나타나는 저장의 모든 효과는 MEMBAR 뒤에 오는 로드를 실행하기 전에 모든 프로세서에 표시되어야 한다.

==== ALU 연산 ====

정수 및 논리 연산을 수행한다. 산술 및 논리 연산 명령어는 세 개의 피연산자 형식을 사용하며, 처음 두 개는 피연산자이고 마지막은 결과를 저장할 위치이다. 중간 피연산자는 레지스터 또는 13비트 부호 있는 정수 상수일 수 있으며, 다른 피연산자는 레지스터이다. 레지스터 피연산자 중 어느 것이든 G0을 가리킬 수 있으며, 결과를 G0으로 가리키면 결과가 폐기되어 테스트에 사용할 수 있다.[10]

예시는 다음과 같다:

```text

add %L1,%L2,%L3 ! %L1과 %L2의 값을 더하여 결과를 %L3에 저장

add %L1,1,%L1 ! %L1 증가

add %G0,%G0,%L4 ! %L4의 값을 지움

```

산술 명령어 목록은 ADD, SUB, AND, OR, XOR이며, 부정 버전인 ANDN, ORN, XNOR도 있다. SPARC 디자인의 한 가지 특징은 대부분의 산술 명령어가 쌍으로 제공된다는 점이다. 한 버전은 상태 레지스터에서 NZVC 조건 코드 비트를 설정하고, 다른 버전은 설정하지 않으며, 기본값은 코드를 ''설정하지 않는'' 것이다. 이는 컴파일러가 지연 슬롯을 채우려고 할 때 명령어를 이동할 수 있는 방식을 갖도록 하기 위한 것이다. 조건 코드를 설정하려면 명령어에 cc를 추가하여 나타낸다:[10]

```text

subcc %L1,10,%G0 ! %L1을 10과 비교하고 결과를 무시하지만 플래그를 설정

```

`add`와 `sub`에는 연산이 캐리 비트를 설정해야 하는지를 나타내는 X라는 또 다른 수정자가 있다.

```text

addx %L1,100,%L1 ! %L1의 값에 100을 더하고 캐리를 추적

```

SPARC V7에는 곱셈 또는 나눗셈 명령어가 없지만, 곱셈의 한 단계를 수행하여 한 비트를 테스트하고 피승수를 조건부로 곱에 더하는 MULSCC가 있다. 이는 MULSCC가 RISC 철학에 따라 한 클럭 사이클 내에 완료될 수 있기 때문이다. SPARC V8은 UMUL (부호 없는 곱셈), SMUL (부호 있는 곱셈), UDIV (부호 없는 나눗셈) 및 SDIV (부호 있는 나눗셈) 명령어를 추가했으며, 조건 코드를 업데이트하지 않는 버전과 업데이트하는 버전이 모두 있다. MULSCC 및 곱셈 명령어는 Y 레지스터를 사용하여 곱의 상위 32비트를 저장하며, 나눗셈 명령어는 이를 사용하여 피제수의 상위 32비트를 저장한다. RDY 명령어는 Y 레지스터의 값을 범용 레지스터로 읽고, WRY 명령어는 범용 레지스터의 값을 Y 레지스터로 쓴다. SPARC V9는 두 개의 64비트 값을 곱하여 64비트 결과를 생성하는 MULX와 64비트 부호 있는 피제수를 64비트 부호 있는 제수로 나누어 64비트 부호 있는 몫을 생성하는 SDIVX, 64비트 부호 없는 피제수를 64비트 부호 없는 제수로 나누어 64비트 부호 있는 몫을 생성하는 UDIVX를 추가했다. 이러한 명령어는 Y 레지스터를 사용하지 않는다.

==== 분기 명령어 ====

조건 분기는 상태 레지스터의 조건 코드를 검사하는데, 이는 IBM System/360 아키텍처와 후속 아키텍처 및 x86 아키텍처를 비롯한 많은 명령어 집합에서 볼 수 있다. 이는 테스트 및 분기가 일반적으로 두 개의 명령어로 수행됨을 의미한다. 첫 번째는 조건 코드를 설정하는 ALU 명령어이고, 두 번째는 해당 플래그 중 하나를 검사하는 분기 명령어이다. SPARC는 특수화된 테스트 명령어를 가지고 있지 않다. 테스트는 대상을 %G0으로 설정한 일반적인 ALU 명령어를 사용하여 수행된다. 예를 들어, 레지스터에 값 10이 있는지 테스트한 다음 이를 처리하는 코드로 분기하려면 다음과 같이 한다.

```text

subcc %L1,10,%G0 ! %L1에서 10을 빼고, %L1이 10이면 제로 플래그 설정

be WASEQUAL ! 제로 플래그가 설정되면 WASEQUAL로 표시된 주소로 분기

```

조건 분기 명령어에서 '''icc''' 또는 '''fcc''' 필드는 테스트되는 조건을 지정한다. 22비트 변위 필드는 현재 PC를 기준으로 한 대상의 주소(단어 단위)이므로 조건 분기는 최대 8메가바이트 앞 또는 뒤로 이동할 수 있다. ''ANNUL''(A) 비트는 일부 지연 슬롯을 제거하는 데 사용된다. 조건 분기에서 0이면 지연 슬롯이 평소대로 실행된다. 1이면 분기가 실행된 경우에만 지연 슬롯이 실행된다. 분기가 실행되지 않으면 조건 분기 뒤의 명령어가 건너뜁니다.

다양한 조건 분기가 있다: BA (항상 분기, 본질적으로 jmp), BN (분기 없음), BE (같음), BNE (같지 않음), BL (작음), BLE (작거나 같음), BLEU (작거나 같음, 부호 없음), BG (큼), BGE (크거나 같음), BGU (큼, 부호 없음), BPOS (양수), BNEG (음수), BCC (캐리 클리어), BCS (캐리 세트), BVC (오버플로우 클리어), BVS (오버플로우 세트).

FPU 및 CP는 정수 조건 코드와 서로 별도의 조건 코드 집합을 가지고 있다. 해당 조건 코드를 테스트하기 위해 두 개의 추가 분기 명령어 집합이 정의되었다. 위 목록에서 분기 명령어 앞에 F를 추가하면 FPU의 조건 코드에 대해 테스트를 수행하고, SPARC V8에서는 C를 추가하면 그렇지 않으면 정의되지 않은 CP의 플래그를 테스트한다.

CALL (서브루틴으로 점프) 명령어는 30비트 프로그램 카운터 상대 ''단어'' 오프셋을 사용한다. 대상 주소가 바이트가 아닌 단어의 시작을 지정하므로 4기가바이트 주소 공간의 모든 주소에 도달하는 데 30비트만 필요하다.[10] CALL 명령어는 반환 주소를 레지스터 R15(출력 레지스터 O7이라고도 함)에 저장한다.

JMPL (점프 및 링크) 명령어는 세 개의 피연산자를 가진 명령어이며, 두 개의 피연산자는 대상 주소에 대한 값을 나타내고, 하나의 피연산자는 반환 주소를 저장할 레지스터를 나타낸다. 주소는 두 주소 피연산자를 더하여 32비트 주소를 생성하여 생성된다. 두 번째 주소 피연산자는 상수 또는 레지스터일 수 있다.

==== 부동 소수점 연산 ====

SPARC 아키텍처는 부동 소수점 연산을 지원한다.

2. 3. 1. 로드/스토어 명령어

로드 및 저장 명령어는 세 개의 피연산자 형식을 가지며, 주소 값을 나타내는 두 개의 피연산자와 읽거나 쓸 레지스터를 지정하는 하나의 피연산자를 갖는다. 주소는 두 개의 주소 피연산자를 더하여 생성된다. 두 번째 주소 피연산자는 상수 또는 레지스터일 수 있다. 로드는 주소의 값을 가져와 세 번째 피연산자로 지정된 레지스터에 배치하고, 저장은 첫 번째 피연산자로 지정된 레지스터의 값을 가져와 주소에 배치한다. 어셈블러 언어는 쉼표로 구분된 목록 대신 더하기 기호로 주소를 구분하여 대괄호로 주소 피연산자를 표시한다.

예:

  • ld [%L1+%L2],%L3 ! 주소 %L1+%L2의 32비트 값을 로드하여 %L3에 넣는다.
  • ld [%L1+8],%L2 ! %L1+8의 값을 %L2로 로드한다.
  • ld [%L1],%L2 ! 위와 같지만 오프셋이 없다. 이는 +%G0과 같다.
  • st %L1,[%I2] ! %L1의 값을 %I2에 저장된 위치에 저장한다.
  • st %G0,[%I1+8] ! %I1+8의 메모리를 지운다.


16비트 또는 8비트 정수 데이터 또는 문자열의 8비트 바이트와 같이 32비트가 아닌 데이터가 널리 사용되기 때문에 16비트 하프 워드와 8비트 바이트를 로드하고 저장하는 명령어와 32비트 워드를 로드하는 명령어가 있다. 로드하는 동안 해당 명령어는 지정된 위치에서 바이트 또는 하프 워드만 읽은 다음 대상 레지스터의 나머지 부분을 0으로 채우거나(부호 없는 로드) 바이트 또는 하프 워드의 최상위 비트 값으로 채운다(부호 있는 로드). 저장하는 동안 해당 명령어는 레지스터의 상위 비트를 버리고 하위 비트만 저장한다.

또한 부동 소수점 연산에 사용되는 배정밀도 값을 로드하기 위한 명령어가 있어 지정된 레지스터와 "다음" 레지스터에서 8바이트를 읽거나 쓰므로 로드의 대상이 L1이면 L1과 L2가 설정된다. 32비트 SPARC의 범용 레지스터에 대한 로드 및 저장 명령에는 LD, ST, LDUB(부호 없는 바이트), LDSB(부호 있는 바이트), LDUH(부호 없는 하프 워드), LDSH(부호 있는 하프 워드), LDD(더블 로드), STB(바이트 저장), STH(하프 워드 저장), STD(더블 저장)가 있다.

SPARC V9에서 레지스터는 64비트이며, LD 명령어는 LDUW로 이름이 변경되었으며, 레지스터의 상위 32비트를 지우고 32비트 값을 하위 32비트로 로드하며, ST 명령어는 STW로 이름이 변경되었으며, 레지스터의 상위 32비트를 버리고 하위 32비트만 저장한다. 새로운 LDSW 명령어는 레지스터의 상위 비트를 워드의 최상위 비트 값으로 설정하고 32비트 값을 하위 비트로 로드한다. 새로운 LDX 명령어는 64비트 값을 레지스터로 로드하고 STX 명령어는 레지스터의 모든 64비트를 저장한다.

LDF, LDDF, LDQF 명령어는 단정밀도, 배정밀도 또는 쿼드 정밀도 값을 메모리에서 부동 소수점 레지스터로 로드하고, STF, STDF, STQF 명령어는 단정밀도, 배정밀도 또는 쿼드 정밀도 부동 소수점 레지스터를 메모리에 저장한다.

메모리 배리어 명령어인 MEMBAR는 메모리 참조 간의 순서 제약 조건을 명확하게 표현하고 메모리 참조의 완료에 대한 명시적인 제어를 용이하게 한다. 예를 들어, MEMBAR 명령어 앞에 나타나는 저장의 모든 효과는 MEMBAR 뒤에 오는 로드를 실행하기 전에 모든 프로세서에 표시되어야 한다.

2. 3. 2. ALU 연산

정수 및 논리 연산을 수행한다. 산술 및 논리 연산 명령어는 세 개의 피연산자 형식을 사용하며, 처음 두 개는 피연산자이고 마지막은 결과를 저장할 위치이다. 중간 피연산자는 레지스터 또는 13비트 부호 있는 정수 상수일 수 있으며, 다른 피연산자는 레지스터이다. 레지스터 피연산자 중 어느 것이든 G0을 가리킬 수 있으며, 결과를 G0으로 가리키면 결과가 폐기되어 테스트에 사용할 수 있다. [10]

예시는 다음과 같다:

```text

add %L1,%L2,%L3 ! %L1과 %L2의 값을 더하여 결과를 %L3에 저장

add %L1,1,%L1 ! %L1 증가

add %G0,%G0,%L4 ! %L4의 값을 지움

```

산술 명령어 목록은 ADD, SUB, AND, OR, XOR이며, 부정 버전인 ANDN, ORN, XNOR도 있다. SPARC 디자인의 한 가지 특징은 대부분의 산술 명령어가 쌍으로 제공된다는 점이다. 한 버전은 상태 레지스터에서 NZVC 조건 코드 비트를 설정하고, 다른 버전은 설정하지 않으며, 기본값은 코드를 ''설정하지 않는'' 것이다. 이는 컴파일러가 지연 슬롯을 채우려고 할 때 명령어를 이동할 수 있는 방식을 갖도록 하기 위한 것이다. 조건 코드를 설정하려면 명령어에 cc를 추가하여 나타낸다:[10]

```text

subcc %L1,10,%G0 ! %L1을 10과 비교하고 결과를 무시하지만 플래그를 설정

```

`add`와 `sub`에는 연산이 캐리 비트를 설정해야 하는지를 나타내는 X라는 또 다른 수정자가 있다.

```text

addx %L1,100,%L1 ! %L1의 값에 100을 더하고 캐리를 추적

```

SPARC V7에는 곱셈 또는 나눗셈 명령어가 없지만, 곱셈의 한 단계를 수행하여 한 비트를 테스트하고 피승수를 조건부로 곱에 더하는 MULSCC가 있다. 이는 MULSCC가 RISC 철학에 따라 한 클럭 사이클 내에 완료될 수 있기 때문이다. SPARC V8은 UMUL (부호 없는 곱셈), SMUL (부호 있는 곱셈), UDIV (부호 없는 나눗셈) 및 SDIV (부호 있는 나눗셈) 명령어를 추가했으며, 조건 코드를 업데이트하지 않는 버전과 업데이트하는 버전이 모두 있다. MULSCC 및 곱셈 명령어는 Y 레지스터를 사용하여 곱의 상위 32비트를 저장하며, 나눗셈 명령어는 이를 사용하여 피제수의 상위 32비트를 저장한다. RDY 명령어는 Y 레지스터의 값을 범용 레지스터로 읽고, WRY 명령어는 범용 레지스터의 값을 Y 레지스터로 쓴다. SPARC V9는 두 개의 64비트 값을 곱하여 64비트 결과를 생성하는 MULX와 64비트 부호 있는 피제수를 64비트 부호 있는 제수로 나누어 64비트 부호 있는 몫을 생성하는 SDIVX, 64비트 부호 없는 피제수를 64비트 부호 없는 제수로 나누어 64비트 부호 있는 몫을 생성하는 UDIVX를 추가했다. 이러한 명령어는 Y 레지스터를 사용하지 않는다.

2. 3. 3. 분기 명령어

조건 분기는 상태 레지스터의 조건 코드를 검사하는데, 이는 IBM System/360 아키텍처와 후속 아키텍처 및 x86 아키텍처를 비롯한 많은 명령어 집합에서 볼 수 있다. 이는 테스트 및 분기가 일반적으로 두 개의 명령어로 수행됨을 의미한다. 첫 번째는 조건 코드를 설정하는 ALU 명령어이고, 두 번째는 해당 플래그 중 하나를 검사하는 분기 명령어이다. SPARC는 특수화된 테스트 명령어를 가지고 있지 않다. 테스트는 대상을 %G0으로 설정한 일반적인 ALU 명령어를 사용하여 수행된다. 예를 들어, 레지스터에 값 10이 있는지 테스트한 다음 이를 처리하는 코드로 분기하려면 다음과 같이 한다.

```

subcc %L1,10,%G0 ! %L1에서 10을 빼고, %L1이 10이면 제로 플래그 설정

be WASEQUAL ! 제로 플래그가 설정되면 WASEQUAL로 표시된 주소로 분기

```

조건 분기 명령어에서 '''icc''' 또는 '''fcc''' 필드는 테스트되는 조건을 지정한다. 22비트 변위 필드는 현재 PC를 기준으로 한 대상의 주소(단어 단위)이므로 조건 분기는 최대 8메가바이트 앞 또는 뒤로 이동할 수 있다. ''ANNUL''(A) 비트는 일부 지연 슬롯을 제거하는 데 사용된다. 조건 분기에서 0이면 지연 슬롯이 평소대로 실행된다. 1이면 분기가 실행된 경우에만 지연 슬롯이 실행된다. 분기가 실행되지 않으면 조건 분기 뒤의 명령어가 건너뜁니다.

다양한 조건 분기가 있다: BA (항상 분기, 본질적으로 jmp), BN (분기 없음), BE (같음), BNE (같지 않음), BL (작음), BLE (작거나 같음), BLEU (작거나 같음, 부호 없음), BG (큼), BGE (크거나 같음), BGU (큼, 부호 없음), BPOS (양수), BNEG (음수), BCC (캐리 클리어), BCS (캐리 세트), BVC (오버플로우 클리어), BVS (오버플로우 세트).

FPU 및 CP는 정수 조건 코드와 서로 별도의 조건 코드 집합을 가지고 있다. 해당 조건 코드를 테스트하기 위해 두 개의 추가 분기 명령어 집합이 정의되었다. 위 목록에서 분기 명령어 앞에 F를 추가하면 FPU의 조건 코드에 대해 테스트를 수행하고, SPARC V8에서는 C를 추가하면 그렇지 않으면 정의되지 않은 CP의 플래그를 테스트한다.

CALL (서브루틴으로 점프) 명령어는 30비트 프로그램 카운터 상대 ''단어'' 오프셋을 사용한다. 대상 주소가 바이트가 아닌 단어의 시작을 지정하므로 4기가바이트 주소 공간의 모든 주소에 도달하는 데 30비트만 필요하다.[10] CALL 명령어는 반환 주소를 레지스터 R15(출력 레지스터 O7이라고도 함)에 저장한다.

JMPL (점프 및 링크) 명령어는 세 개의 피연산자를 가진 명령어이며, 두 개의 피연산자는 대상 주소에 대한 값을 나타내고, 하나의 피연산자는 반환 주소를 저장할 레지스터를 나타낸다. 주소는 두 주소 피연산자를 더하여 32비트 주소를 생성하여 생성된다. 두 번째 주소 피연산자는 상수 또는 레지스터일 수 있다.

2. 3. 4. 부동 소수점 연산

SPARC 아키텍처는 부동 소수점 연산을 지원한다.

3. 역사

(코드이름)모델주파수
[MHz]아키텍처
버전출시연도스레드
코어 당 × 코어
= Total 스레드공정
[µm]트랜지스터
[100만]다이 크기
[mm²]IO 핀전력
[W]전압
[V]1차 데이터 D캐시
[k]1차 명령어 캐시
[k]2차 캐시
[k]3차 캐시
[k]SPARC(다양함)[66]14.28–40V71987-19921×1=10.8–1.3~0.1–1.8--160–256----0–128 (unified)없음없음microSPARC I (Tsunami)TI TMS390S1040–50V819921×1=10.80.8225?2882.5524없음없음SuperSPARC I (Viking)TI TMX390Z50 / Sun STP102033–60V819921×1=10.83.1--29314.3516200-2048없음SPARCliteFujitsu MB8683x66–108V8E19921×1=1------144–176--2.5/3.3V1–161–16없음없음hyperSPARC (Colorado 1)Ross RT620A40–90V819931×1=10.51.5------5?08128-256없음microSPARC II (Swift)Fujitsu MB86904 / Sun STP101260–125V819941×1=10.52.323332153.3816없음없음hyperSPARC (Colorado 2)Ross RT620B90–125V819941×1=10.41.5------3.308128-256없음SuperSPARC II (Voyager)Sun STP102175–90V819941×1=10.83.1299--16--16201024-2048없음hyperSPARC (Colorado 3)Ross RT620C125–166V819951×1=10.351.5------3.308512-1024없음TurboSPARCFujitsu MB86907160–180V819951×1=10.353.013241673.51616512없음UltraSPARC I (Spitfire)Sun STP1030143–167V919951×1=10.475.231552130 @167 MHz3.31616512-1024없음UltraSPARC I (Hornet)Sun STP1030200V919981×1=10.425.2265521--3.31616512-1024없음hyperSPARC (Colorado 4)Ross RT620D180–200V819961×1=10.351.7------3.31616512없음SPARC64Fujitsu (HAL)101–118V919951×1=10.4--297+163+142286503.8128128----SPARC64 IIFujitsu (HAL)141–161V919961×1=10.35--202+103+84286643.3128128----SPARC64 IIIFujitsu (HAL) MBCS70301250–330V919981×1=10.2417.6240----2.564648192--UltraSPARC IIs (Blackbird)Sun STP1031250–400V919971×1=10.355.414952125 @250 MHz2.516161024 or 4096없음UltraSPARC IIs (Sapphire-Black)Sun STP1032 / STP1034360–480V919991×1=10.255.412652121 @400 MHz1.916161024–8192없음UltraSPARC IIi (Sabre)Sun SME1040270–360V919971×1=10.355.4156587211.91616256–2048없음UltraSPARC IIi (Sapphire-Red)Sun SME1430333–480V919981×1=10.255.4--58721 @440 MHz1.916162048없음UltraSPARC IIe (Hummingbird)Sun SME1701400–500V920001×1=10.18 Al----37013 max @500 MHz1.5-1.71616256없음UltraSPARC IIi (IIe+) (Phantom)--550–650V920021×1=10.18 Cu----37017.61.71616512없음SPARC64 GPFujitsu SFCB81147400–810V920001×1=10.1830.2217----1.81281288192--SPARC64 IVFujitsu MBCS80523450–810V920001×1=10.13----------1281282048--UltraSPARC III (Cheetah)Sun SME1050600V920011×1=10.18 Al293301368531.664328192없음UltraSPARC III (Cheetah)Sun SME1052750–900V920011×1=10.13 Al29--1368--1.664328192없음UltraSPARC III Cu (Cheetah+)Sun SME10561002–1200V920011×1=10.13 Cu29232136880 @900 MHz1.664328192없음UltraSPARC IIIi (Jalapeno)Sun SME16031064–1593V920031×1=10.1387.5206959521.364321024없음SPARC64 V (Zeus)Fujitsu1100–1350V9/JPS120031×1=10.13190289269401.21281282048--SPARC64 V+ (Olympus-B)Fujitsu1650–2160V9/JPS120041×1=10.094002972796511281284096--UltraSPARC IV (Jaguar)Sun SME11671050–1350V920041×2=20.136635613681081.35643216384없음UltraSPARC IV+ (Panther)Sun SME1167A1500–2100V920051×2=20.092953361368901.16464204832768UltraSPARC T1 (Niagara)Sun SME19051000–1400V9 / UA 200520054×8=320.093003401933721.38163072없음SPARC64 VI (Olympus-C)Fujitsu2150–2400V9/JPS220072×2=40.09540422--120--1281285120없음UltraSPARC T2 (Niagara 2)Sun SME1908A1000–1400V9 / UA 200720078×8=640.0655033421831951.1–1.58164096없음UltraSPARC T2 Plus (Victoria Falls)Sun SME1910A1200–1400V9 / UA 200720088×8=640.0655033421831--8164096없음SPARC64 VII (Jupiter)[67]Fujitsu2400–2520V9/JPS2(?)20082×4=80.065600?--?--64646144없음UltraSPARC RK (Rock)[68]Sun SME18322300V9 / UA__?__20092×16=320.065?3962326??3232 + 8 predecoded bits2048?이름모델주파수
[MHz]아키텍처
버전출시연도스레드
코어 당 × 코어
= Total 스레드공정
[µm]트랜지스터
[100만]다이 크기
[mm²]IO 핀전력
[W]전압
[V]1차 데이터 D캐시
[k]1차 명령어 캐시
[k]2차 캐시
[k]3차 캐시
[k]



SPARC 아키텍처에는 세 가지 주요 개정이 있었다. 최초로 공개된 버전은 1986년의 32비트 ''SPARC 버전 7''(V7)이었다. 향상된 SPARC 아키텍처 정의인 ''SPARC 버전 8''(V8)은 1990년에 출시되었다. V7과 V8의 주요 차이점은 정수 곱셈 및 나눗셈 명령어의 추가와 80비트 "확장 정밀도" 부동 소수점 연산에서 128비트 "사중 정밀도" 연산으로의 업그레이드였다. SPARC V8은 32비트 마이크로프로세서 아키텍처에 대한 IEEE 표준인 IEEE Standard 1754-1994의 기반이 되었다.

64비트 SPARC 아키텍처인 ''SPARC 버전 9''는 1993년 SPARC International에서 출시되었다. 이 아키텍처는 Amdahl Corporation, Fujitsu, ICL, LSI Logic, Matsushita, Philips, Ross Technology, Sun Microsystems, Texas Instruments로 구성된 SPARC 아키텍처 위원회에서 개발했다. 최신 사양은 항상 전체 SPARC V9 레벨 1 사양을 준수한다.

2002년에는 Fujitsu와 Sun에서 SPARC ''Joint Programming Specification 1''(JPS1)을 출시하여 두 회사의 CPU에서 동일하게 구현된 프로세서 기능("공통성")을 설명했다. JPS1을 준수하는 최초의 CPU는 Sun의 UltraSPARC III와 Fujitsu의 SPARC64 V였다. JPS1에서 다루지 않는 기능은 "구현 보충 자료"에 각 프로세서별로 문서화되어 있다.

2003년 말에는 멀티코어 CPU를 지원하기 위해 JPS2가 출시되었다. JPS2를 준수하는 최초의 CPU는 Sun의 UltraSPARC IV와 Fujitsu의 SPARC64 VI였다.

2006년 초 Sun은 확장된 아키텍처 사양인 ''UltraSPARC Architecture 2005''를 출시했다. 여기에는 비특권 및 대부분의 특권 SPARC V9 부분뿐만 아니라 UltraSPARC T1 구현을 시작으로 UltraSPARC III, IV, IV+의 프로세서 세대를 통해 개발된 모든 아키텍처 확장과 CMT 확장(병렬 멀티스레딩 확장)이 포함되어 있다.



2007년 Sun은 UltraSPARC T2 구현이 준수하는 업데이트된 사양인 ''UltraSPARC Architecture 2007''을 출시했다.

2007년 12월, Sun은 또한 OpenSPARC 프로젝트를 통해 UltraSPARC T2 프로세서의 RTL을 공개했다.[6] 또한 GNU General public license v2로 출시되었다.[7] OpenSPARC T2는 8개의 코어, 16개의 파이프라인, 64개의 스레드로 구성된다.

2012년 8월, Oracle Corporation은 참조 전반의 업데이트 외에도 VIS 3 명령어 집합 확장과 하이퍼 특권 모드를 2007년 사양에 추가한 새로운 사양인 ''Oracle SPARC Architecture 2011''을 발표했다.

2015년 10월, Oracle은 새로운 ''Oracle SPARC Architecture 2015'' 사양을 기반으로 하는 최초의 프로세서인 SPARC M7을 출시했다.[4][8] 이 개정판에는 VIS 4 명령어 집합 확장과 하드웨어 지원 암호화 및 실리콘 보안 메모리(SSM)가 포함되어 있다.[9]

SPARC 아키텍처는 1987년 최초의 SPARC V7 구현부터 Sun UltraSPARC Architecture 구현에 이르기까지 지속적인 애플리케이션 바이너리 호환성을 제공했다.

SPARC의 다양한 구현 중 Sun의 SuperSPARC와 UltraSPARC-I가 매우 인기가 있었으며 SPEC CPU95 및 CPU2000 벤치마크의 참조 시스템으로 사용되었다. 296MHz UltraSPARC-II는 SPEC CPU2006 벤치마크의 참조 시스템이다.

SPARC는 썬 마이크로시스템즈(Sun Microsystems)가 1985년에 처음 개발했다.

SPARC는 RISC 기반이며, 특히 부동 소수점 연산과 바이너리 레벨의 호환성에 주의를 기울였다. 썬 마이크로시스템즈는 처음에는 자사의 워크스테이션모토로라의 68000 시리즈 MPU를 사용했지만, 이후 캘리포니아 대학교 버클리(University of California, Berkeley)의 RISC I을 모델로 자체 개발에 착수했다. Sun4의 SPARC 탑재 모델을 발표했다.

SPARC는 완전 빅 엔디안 RISC 아키텍처이며, '''SPARC 인터내셔널''' (''SPARC International, Inc.'')의 등록 상표이다. SPARC 인터내셔널은 SPARC 아키텍처의 보급과 규격 검정 테스트의 실시를 목적으로 1989년에 설립된 조직이며, SPARC 아키텍처를 오픈하여 수명을 연장하는 것을 목표로 한다. 텍사스 인스트루먼트(Texas Instruments), 사이프러스 세미컨덕터(Cypress Semiconductor), 후지쯔(富士通), 썬 마이크로시스템즈 등의 제조업체가 SPARC의 라이선스를 제공받았다. 결과적으로, SPARC 아키텍처는 완전히 오픈되었으며, GPL 하에 오픈 소스로 구현된 LEON영어도 존재한다.

SPARC 아키텍처의 첫 번째 구현은 썬 마이크로시스템즈의 워크스테이션에서 사용되었다. 그 후 후지쯔(富士通) 등에서도 사용되기 시작했고, 이윽고 더 큰 SMP 시스템, 슈퍼컴퓨터 및 제어용으로도 사용되게 되었다. SPARC 머신은 일반적으로 Solaris운영 체제 (썬이 SPARC용으로 설계한 운영 체제)와 결합되어 생각되지만, NEXTSTEP, 리눅스, FreeBSD, OpenBSD, NetBSD 등의 운영 체제도 사용할 수 있다.

아키텍처는 여러 번 개정되었으며, 가장 최신 버전은 8과 9이다. 1999년 10월, 후지쯔(富士通)와 썬 마이크로시스템즈는 버전 9을 기반으로 하이엔드 SPARC 프로세서의 공통 사양(커먼 프로그래머 레퍼런스 모델)을 공동 개발할 것을 발표했다. 이 공통 사양은 SPARC Joint Programming Specification (JPS1) - Commonality로 공개되었다. 또한 2005년 12월, 썬 마이크로시스템즈는 UltraSPARC T1을 오픈 소스화할 것을 발표했다.

SPARC는 정통 UNIX가 구동되는 신뢰성 높은 CPU로서 오랫동안 광범위한 시스템에서 사용되었지만, 2010년대클라우드 컴퓨팅 보급과 운용 실적의 축적에 따라, 다수의 시스템이 범용적인 하드웨어에서 x86 가상화를 사용하여 소프트웨어적으로 정의하여 구축되게 됨에 따라, SPARC는 특히 성능 요구가 까다로운 극히 일부의 시스템에만 사용되게 되었다[42]

아키텍처는 여러 번 개정되었다. 하드웨어에 의한 곱셈과 나눗셈이 버전 8에서 추가되었다. 버전 9에서는 상당히 대폭적인 개정이 이루어져, 64비트화된 SPARC 사양이 완성되었다.

또한 SPARC Joint Programming Specification (JPS1)에서는 MMU 등 버전 9에서 미정의된 부분의 사양이 규정되어 있다.

선 마이크로시스템즈 고유의 아키텍처 사양인 UltraSPARC Architecture 2005에서는 명령과 레지스터가 추가되었고, 초특권(hyperprivileged) 모드도 추가되었다. 이 사양은 UltraSPARC T1부터 시작하는 새로운 UltraSPARC 시리즈에서 구현된다. T1은 CPU 코어 8개를 갖추고 있으며, 전체적으로 32개의 스레드를 실행할 수 있다. UltraSPARC Architecture 2005에는 선의 표준 확장 기능이 포함되어 있지만, 그 외에는 SPARC V9 Level 1 사양에 완전하게 준수한다. 이 아키텍처는 1987년의 SPARC V7부터의 애플리케이션의 바이너리 호환성을 유지하고 있다.

2005년 12월에 선 마이크로시스템즈는 UltraSPARC T1의 구현을 오픈 소스화했다(OpenSPARC 참조).

SPARC의 다양한 구현 중, 선 마이크로시스템즈의 SuperSPARC과 UltraSPARC-1은 매우 인기가 있었기 때문에, SPEC CPU95와 CPU2000 벤치마크의 기준 시스템으로 사용되었다.

3. 1. SPARC 프로세서 목록

SPARC 프로세서는 다양한 제조업체에서 개발 및 생산되었다.[66] 초기에는 후지쯔[14][15][16], 사이프러스 반도체[12], 텍사스 인스트루먼트[12] 등이 SPARC 프로세서를 출시했다.[12]

SPARC 마이크로프로세서 사양
모델주파수
(MHz)
아키텍처
버전
출시 연도코어 수 × 스레드 수 = 총 스레드 수공정
(nm)
트랜지스터 수
(백만)
다이 크기
(mm²)
핀 수전력
(W)
전압
(V)
L1 D캐시
(KB)
L1 I캐시
(KB)
L2 캐시
(KB)
L3 캐시
(KB)
SF9010/MB86900
(또는 L64801)
14.28–25V71988?1/1
CYC7C60125–40V71989?1/1
microSPARC I40–50V819921/18000.82252882.5524----
SuperSPARC I33–60V81991-19921/18003.1----14.3516200-2048--
HyperSPARC A40–90V819931/1500--------5?08128-256--
microSPARC II60–125V819941/15002.323332153.3816----
HyperSPARC B90–125V819941/1400--------3.308128-256--
SuperSPARC II75–90V819941/18003.1299--16--16201024-2048--
HyperSPARC C125–166V819951/1350--------3.308512-1024--
TurboSPARC160–180V819951/1350----41673.51616512--
UltraSPARC I143–200V919951/15005.231552130[20]3.31616512-1024--
HyperSPARC D180–200V819961/1350--------3.31616512--
UltraSPARC IIs (Blackbird)250–360V919971/13505.4--52125[21]2.516161024 또는 4096--
UltraSPARC IIs
(Sapphire-Black)
360–480V919991/12505.415652121[22]1.916161024–8192--
UltraSPARC IIi (Sabre)270–360V919971/13505.4148587211.91616256–2048--
UltraSPARC IIi
(Sapphire-Red)
333–480V919981/12505.4--58721[23]1.916162048--
UltraSPARC IIe
(Hummingbird)
400–600V920001/1180----37013[24]1.5-1.71616256--
UltraSPARC IIi (IIe+)550–650V920021/1180----37017.61.71616512--
UltraSPARC III600–900V9/JPS120011/1130293301368531.664328192--
UltraSPARC IIIcu1002–1200V9/JPS120011/113029--1368--1.664328192--
UltraSPARC IIIi1064–1593V920031/113087.5206959521.364321024--
UltraSPARC IV1050–1350V920042/1=21306635613681081.35643216384--
UltraSPARC IV+1500V920052/1=2902953361368901.16464204832768
UltraSPARC T11000–1400V9/UA 200520058/4=32903003401933721.38163072--
UltraSPARC T21200–1400V9/UA 200720078/8=64655033421831951.1-1.58164096--
SPARC T3–1670V9201016/8=128403711358166144--
SPARC T42850 - 3000V920118/8=644085540324016161284096
SPARC64101–118V919951/1400----------128128----
SPARC64 II141–161V919961/1340----------128128----
SPARC64 GP250–330V919981/124017.6240----2.564648192--
SPARC64 GP400–810V920001/1180
150
30.2217----1.81281288192--
SPARC64 V1100–1350V9/JPS120031/1130190289269401.21281282048--
SPARC64 V1650–2160V9/JPS120041/1904002972796511281284096--
SPARC64 VI2150–2400V9/JPS120072/2=490540421--120--1281286144--
SPARC64 VII2400–2520V9/JPS1?20084/2=865-445--135--64646144--
SPARC64 VIIIfx[43]2000V9/JPS1/HPC-ACE20098/1=845760513127158--32325210--
SPARC64 IXfx[44]1848V9/JPS1/HPC-ACE201116/1=164018704841442110--323212288--
SPARC64 X[45]3000+V9/JPS1/HPC-ACE201216x2=3228
CMOS
2950587.51500??64x1664x1624576--
SPARC T53600V9 / OSA2011?20138×16=12828?????16x816x8128x168192
SPARC M53600V9 / OSA2011?20138×6=4828?????16x616x6128x649152
SPARC M63600OSA201120138×12=9628?????16×1216×12128×1249152
SPARC64 X+
(Athena+) [46]
3200–3700OSA2011 / HPC-ACE20142×16=322829906001500392?64×1664×1624M
SPARC64 XIfx [47]2200OSA2011 / HPC-ACE22015?1×(32+2)=34203750?1001??64×3464×3412M×2
SPARC M7 [48][49]4133OSA201520158×32=25620>10,000????16×3216×32256×2465536
SPARC S7[50]4270OSA201520168×8=6420>10,000????16×816×8256Dx4
256Ix2
16384
SPARC64 XII[51]4250
(>4350)
SPARC-V9/JPS
HPC-ACE VM / SWoC
201712×8=96205,4507951860?32×9664×9651232M
SPARC M8[52]5000OSA2015201732×8=25620>10,000????16×3232×32128Dx32
256Ix8
65536



HAL 컴퓨터 시스템과 후지쯔가 개발한 '''SPARC64'''는 SPARC 시리즈의 하이엔드 프로세서이다.[66] SPARC64 V는 후지쯔의 PRIMEPOWER 서버 시리즈에 사용되었고,[66] SPARC64 VI 및 SPARC64 VII는 후지쯔 및 썬 마이크로시스템즈의 SPARC Enterprise M3000부터 M9000에 사용되었다.[66]

SPARC64 VIIIfx는 TOP500 리스트 1위를 차지한 슈퍼컴퓨터 "게이"에 채용되었다.[53] SPARC64 IXfx는 후지쯔의 슈퍼컴퓨터 PRIMEHPC FX10에 채용되었다.[54][55] SPARC64 X는 UNIX 서버용 프로세서로 처음으로 HPC-ACE를 구현했으며, 후지쯔의 UNIX 서버 SPARC M10에 채용되었다.[56] SPARC64 X+는 SPARC64 X의 클록 주파수를 3.7GHz로 향상시키고, 암호 처리 및 데이터베이스 처리 지원 명령을 추가했다.[57]

2010년 1월 27일, 썬 마이크로시스템즈는 오라클에 흡수 합병되었지만, SPARC의 개발은 계속되었다.[65]

3. 2. 한국과 SPARC

4. 운영 체제 지원

SPARC 머신은 일반적으로 SunOS, 솔라리스, JavaOS, OpenSolaris를 사용해 왔으며, 파생 제품인 illumos 및 OpenIndiana를 포함하지만, NeXTSTEP, RTEMS, FreeBSD, OpenBSD, NetBSD, 리눅스와 같은 다른 운영 체제도 사용되었다.

1993년, 인터그래프는 Windows NT를 SPARC 아키텍처로 포팅한다고 발표했지만 나중에 취소되었다.

2015년 10월, 오라클사는 "SPARC용 리눅스 참조 플랫폼"을 발표했다.

5. 오픈 소스 구현

SPARC 아키텍처의 여러 가지 완전한 오픈 소스 구현이 존재한다.



SPARC 아키텍처를 위한 완전한 오픈 소스 시뮬레이터도 존재한다.

6. 슈퍼컴퓨터

SPARC 프로세서는 슈퍼컴퓨터 분야에서도 활용되었다.[53] 후지쯔는 HPC-ACE(High Performance Computing – Arithmetic Computational Extensions)라는 새로운 명령 확장 세트를 갖춘 특수 SPARC64 fx 프로세서를 제작하여 슈퍼컴퓨터 개발에 활용하였다.

「京」(K)의 SPARC64 VIIIfx(오사카 시립 과학관)


2011년 6월과 11월에 TOP500 목록 1위를 기록한 K 컴퓨터는 88,128개의 SPARC64 VIIIfx CPU를 결합하여 총 705,024개의 코어를 갖추고 있었다. K 컴퓨터는 당시 TOP500에 있는 다른 어떤 시스템보다 거의 두 배나 많은 코어를 가지고 있었으며, 목록에 있는 다음 다섯 개의 시스템을 합친 것보다 더 강력했다. 또한 최고의 성능 대 전력 비율을 보였으며, Green500 2011년 6월 목록에서 824.56 MFLOPS/W의 점수로 6위를 기록했다. 그러나 TOP500의 2012년 11월 릴리스에서 K 컴퓨터는 상위 3개 시스템 중 가장 많은 전력을 사용하여 3위를 기록했고, 해당 Green500 릴리스에서는 85위를 기록했다.

2009년에 발표된 SPARC64 VIIIfx는 HPC(고성능 컴퓨팅)용 제품으로, 싱글 스레드에서 코어 수는 4코어에서 8코어로 증가했다. 메모리 컨트롤러가 프로세서에 통합되었고, HPC용 명령 확장 "HPC-ACE"가 구현되었으며, 레지스터 수가 증가하고, SIMD 명령이 강화되었다.

2011년에 발표된 SPARC64 IXfx는 코어 수를 8코어에서 16코어로 늘리고 메모리 대역폭을 향상시켰다. SPARC64 IXfx는 후지쯔의 슈퍼컴퓨터 PRIMEHPC FX10에 채용되었다.[54][55]

최신 HPC 프로세서인 IXfx 및 XIfx는 PRIMEHPC FX10 및 FX100 슈퍼컴퓨터에 포함되었다. 톈허-2는 중국에서 개발된 갤럭시 FT-1500 OpenSPARC 기반 프로세서를 갖춘 여러 노드를 보유하고 있지만, LINPACK 점수에는 기여하지 않았다.[41]

SPARC64 X는 UNIX 서버용 프로세서로 처음으로 HPC-ACE를 구현했으며, 후지쯔의 UNIX 서버 SPARC M10에 채용되었다.[56] SPARC64 X+는 클록 주파수를 높이고, 암호 처리·십진 부동 소수점수(IEEE 754 형식과 Oracle NUMBER 형식)·데이터베이스 처리를 지원하는 명령이 추가되었다. 또한, 기존에는 불가능했던 call/return을 넘나드는 아웃 오브 오더 처리를 가능하게 했다.[57]

2019년 8월, 후지쯔는 "게이"의 후속 슈퍼컴퓨터 "후가쿠"에 SPARC와는 다른 ARM 아키텍처를 사용하는 A64FX를 개발했다고 발표했다.[58]

7. 각주

참조

[1] 뉴스 Sun set: Oracle closes down last Sun product lines https://www.zdnet.co[...] 2017-09-05
[2] 뉴스 Oracle finally decides to stop prolonging the inevitable, begins hardware layoffs https://www.theregis[...] 2017-08-31
[3] 웹사이트 Roadmap: Fujitsu Global https://www.fujitsu.[...] 2022-02-15
[4] 웹사이트 Oracle SPARC Architecture 2015: One Architecture ... Multiple Innovative Implementations https://www.oracle.c[...] 2016-01-12
[5] 서적 Numerical Computation Guide – Sun Studio 10 Sun Microsystems, Inc 2011-09-24
[6] 웹사이트 Sun Accelerates Growth of UltraSPARC CMT Eco System http://www.sun.com/p[...] Sun Microsystems
[7] 웹사이트 OpenSPARC Frequently Asked Questions http://www.oracle.co[...] Oracle 2021-03-20
[8] 웹사이트 SPARC M7 Innovation https://www.oracle.c[...] Oracle Corporation 2015-10-13
[9] 웹사이트 Software in Silicon Cloud - Oracle https://www.oracle.c[...] 2019-01-21
[10] 웹사이트 SPARC Fundamental Instructions https://arcb.csc.ncs[...]
[11] 웹사이트 SPARC64 IXfx Extensions Fujitsu Limited Ver 12, 2 Dec. 2013 https://www.fujitsu.[...] 2023-12-17
[12] 간행물 Worth the RISC https://archive.org/[...] McGraw-Hill 2024-10-08
[13] 문서 Threads per core × number of cores
[14] 웹사이트 Fujitsu to take ARM into the realm of Super https://www.cpushack[...] 2016-06-21
[15] 웹사이트 Fujitsu SPARC http://www.cpu-colle[...] 2019-06-30
[16] 웹사이트 Timeline https://sparc.org/ti[...] 2019-06-30
[17] 문서 Various SPARC V7 implementations were produced by Fujitsu, [[LSI Logic]], Weitek, Texas Instruments, Cypress and Temic. A SPARC V7 processor generally consisted of several discrete chips, usually comprising an integer unit (IU), a [[floating-point unit]] (FPU), a [[memory management unit]] (MMU) and cache memory. Conversely, the Atmel (now Microchip Technology) TSC695 is a single-chip SPARC V7 implementation.
[18] 웹사이트 Floodgap Retrobits presents the Solbourne Solace: a shrine to the forgotten SPARC https://www.floodgap[...] 2020-01-14
[19] conference A 0.18 μm CMOS IA32 microprocessor with a 4 GHZ integer execution unit IEEE 2001
[20] 문서 "@167 MHz"
[21] 문서 "@250 MHz"
[22] 문서 "@400 MHz"
[23] 문서 "@440 MHz"
[24] 문서 "max. @500 MHz"
[25] 문서 "@1200 MHz"
[26] 문서 excluding I/O buses
[27] 웹사이트 Ixfx Download https://www.fujitsu.[...] fujitsu.com 2015-05-17
[28] 웹사이트 Images of SPARC64 https://www.fujitsu.[...] fujitsu.com 2017-08-29
[29] 웹사이트 Oracle Products https://www.oracle.c[...] oracle.com 2017-08-29
[30] 웹사이트 Oracle SPARC products https://www.oracle.c[...] oracle.com 2017-08-29
[31] 웹사이트 Fujitsu Presentation pdf https://www.fujitsu.[...] fujitsu.com 2017-08-29
[32] 웹사이트 Fujitsu Global Images https://www.fujitsu.[...] fujitsu.com 2017-08-29
[33] 웹사이트 M7: Next Generation SPARC. Hotchips 26 https://swisdev.orac[...] swisdev.oracle.com 2014-08-12
[34] 웹사이트 Oracle's SPARC T7 and SPARC M7 Server Architecture https://www.oracle.c[...] oracle.com 2015-10-10
[35] 웹사이트 Hot Chips – August 23–25, 2015 – Conf. Day1 – Oracle's Sonoma Processor: Advanced low-cost SPARC processor for enterprise workloads https://old.hotchips[...] hotchips.org 2022-01-25
[36] 웹사이트 Blueprints revealed: Oracle crams Sparc M7 and InfiniBand into cheaper 'Sonoma' chips https://www.theregis[...] theregister.co.uk 2017-08-29
[37] 웹사이트 Documents at Fujitsu https://www.fujitsu.[...] fujitsu.com 2017-08-29
[38] 웹사이트 Oracle's New SPARC Systems Deliver 2-7x Better Performance, Security Capabilities, and Efficiency than Intel-based Systems https://www.oracle.c[...] oracle.com 2017-09-18
[39] 웹사이트 SPARC M8 Processor https://www.oracle.c[...] oracle.com 2017-09-18
[40] 문서 nominal; specification from 100 to 424 MHz depending on attached RAM capabilities
[41] 뉴스 U.S. says China building 'entirely indigenous' supercomputer https://www.computer[...] Computerworld 2010-11-04
[42] 웹사이트 クラウド時代にSPARC/Solarisに何が求められているのか――x86/Linuxにはない優位性や使い続ける意義を考える https://atmarkit.itm[...] 2024-02-03
[43] 웹사이트 SPARC64™ VIIIfx: Fujitsu's New Generation Octo Core Processor for PETA Scale computing(ペタスケールコンピューティングに向けた富士通の新世代オクトコアプロセッサ) http://img.jp.fujits[...] Fujitsu Limited 2009-08-25
[44] 문서 White paperスーパーコンピュータ PRIMEHPC FX10 の先進技術 http://img.jp.fujits[...]
[45] 웹사이트 SPARC64™ X: Fujitsu’s New Generation 16 Core Processor for the next generation UNIX servers http://jp.fujitsu.co[...] 富士通 2012-08-29
[46] 문서 SPARC64™ X: Fujitsu’s New Generation 16 Core Processor for the next generation UNIX servers http://www.fujitsu.c[...]
[47] 문서 SPARC64™ XIfx: Fujitsu’s Next Generation Processor for HPC http://www.fujitsu.c[...]
[48] 문서 M7: Next Generation SPARC. http://swisdev.oracl[...] Hotchips 26 – August 12, 2014. Stephen Phillips
[49] 문서 Oracle's SPARC T7 and SPARC M7 Server Architecture. http://www.oracle.co[...] October 2015
[50] 문서 SPARC S7 プロセッサ データシート https://www.oracle.c[...] Oracle
[51] 문서 SPARC64™ XII: Fujitsu’s latest 12 Core Processor for Mission Critical Servers http://www.fujitsu.c[...] COOL Chips 20 講演資料、富士通 2017
[52] 문서 SPARC M8 プロセッサ データシート https://www.oracle.c[...] Oracle
[53] 서적 コンピュータアーキテクチャ 改定4版 オーム社 2016-11-15
[54] 문서 PRIMEHPC FX10 : 富士通 http://jp.fujitsu.co[...]
[55] 문서 【PC Watch】 富士通、最大23.2PFLOPSを実現するスパコンを発売 ~京で用いた技術をさらに発展 https://pc.watch.imp[...]
[56] 웹사이트 富士通とオラクル、新UNIXサーバ「Fujitsu M10」を全世界に提供開始 http://pr.fujitsu.co[...] 富士通 2013-04-10
[57] 웹사이트 富士通株式会社とオラクル・コーポレーションは、動作周波数最大3.7GHz、16コアの新プロセッサ「SPARC64 X+」を搭載し、従来に比べ約30%性能を強化したUNIXサーバ「SPARC M10-1」、「SPARC M10-4」、「SPARC M10-4S」を4月8日に全世界で販売開始します。
[58] 웹사이트 PRESS RELEASE (技術):ポスト「京」のCPUの仕様を公表 https://pr.fujitsu.c[...] 富士通 2018-08-22
[59] 웹사이트 富士通メインフレーム撤退はいばらの道、雲をつかめるか https://xtech.nikkei[...] 日経BP 2022-03-07
[60] 문서 Sun、「Rock」を2008年にリリース https://www.itmedia.[...]
[61] 문서 Sunがサーバー向けハイエンドプロセッサ「Rock」の概要を公表 https://pc.watch.imp[...]
[62] 문서 Sun、Rockのリリースを2009年に延期 https://www.itmedia.[...]
[63] 문서 「SunがサーバプロセッサRockの開発打ち切り」の報道 http://www.itmedia.c[...]
[64] 뉴스 Sun Is Said to Cancel Big Chip Project http://bits.blogs.ny[...] The New York Times
[65] 웹사이트 日本オラクル、買収以降のSPARCプロセッサと最新世代の「M7」を解説 https://pc.watch.imp[...]
[66] 문서 Various SPARC V7 implementations were produced by Fujitsu, [[LSI Logic]], Weitek, Texas Instruments and Cypress. A SPARC V7 processor generally consisted of several discrete chips, usually comprising an Integer Unit (IU), a [[Floating-Point Unit]] (FPU), a [[Memory Management Unit]] (MMU) and 캐시 memory.
[67] 웹인용 FX1 Key Features & Specifications http://www.fujitsu.c[...] Fujitsu 2008-02-19
[68] 웹인용 A Third-Generation 65nm 16-Core 32-Thread Plus 32-Scout-Thread CMT SPARC(R) processor http://www.opensparc[...] Sun Microsystems 2008-02-19



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com