단일 명령, 다중 데이터
Single instruction, multiple data![]() |
플린의 분류법 |
---|
단일 데이터 스트림 |
다중 데이터 스트림 |
SIMD 하위 카테고리[1] |
참고 항목 |
단일 명령, 다중 데이터(SIMD)는 플린의 분류학에서 병렬 처리의 한 유형이다.SIMD는수 있으며, 지침 집합 아키텍처(ISA)를 통해 직접 접근할 수 있지만 ISA와 혼동해서는안 된다 내부(하드웨어 설계의 일부)일.SIMD는 여러 데이터 지점에서 동시에 동일한 작업을 수행하는 여러 처리 요소가 있는 컴퓨터를 설명한다.
그러한 기계는 데이터 수준 병렬화를 이용하지만 동시성은 이용하지 않는다. 동시(병렬) 계산이 있지만, 각 장치는 주어진 어떤 순간에도 정확히 동일한 명령을 수행한다(다른 데이터만 이용).SIMD는 특히 디지털 이미지의 대비 조절이나 디지털 오디오 볼륨 조절과 같은 일반적인 작업에 적용된다.대부분의 현대적인 CPU 설계는 멀티미디어 사용의 성능을 향상시키기 위한 SIMD 지침을 포함한다.SIMD는 플린의 1972년 택사노미에서 세 가지 다른 하위 범주를 가지고 있는데,그 중 하나는 SIMT이다. SIMT는스레드나 하드웨어 소프트웨어. SIMT는 둘다작업 시간 공유(시간 동기화)이다안 된다 혼동해서는 스레드와.SIMT는 진정한 동시 병렬 하드웨어 레벨 실행이다.
역사
SIMD 지침의 첫 번째 용도는 1966년에 완공된 일리악 4에 있었다.
SIMD는 CDC Star-100과 텍사스 인스트루먼트 ASC와 같은 1970년대 초 벡터 슈퍼컴퓨터의 기초로서, 단일 명령으로 데이터의 "벡터"로 작동할 수 있었다.벡터 프로세싱은 특히 1970년대와 1980년대에 크레이에 의해 대중화되었다.벡터 프로세싱 아키텍처는 이제 SIMD 컴퓨터와는 별개로 간주된다.Duncan's Taxonomy는 플린의 작품(1966년, 1972년)으로 인해 플린의 택사노미(Taxonomy)가 하지 않는 곳에 그것들을 포함한다.
현대 SIMD 컴퓨터의 제1시대는 생각 머신 CM-1과 CM-2와 같은 대량 병렬 처리 방식의 슈퍼컴퓨터가 특징이었다.이 컴퓨터들은 병렬로 작동하는 많은 제한된 기능 프로세서를 가지고 있었다.예를 들어, Thinking Machines CM-2의 각 65,536개의 단일 비트 프로세서는 동일한 명령을 동시에 실행할 수 있으며, 예를 들어, 하이퍼큐브 연결 네트워크 또는 프로세서 전용 RAM을 사용하여 피연산자를 찾을 수 있다.슈퍼컴퓨팅은 인텔 i860 XP[2] 등 범용 프로세서를 기반으로 한 저렴한 스칼라 MIMD 접근법이 더욱 강력해지며 SIMD에 대한 관심이 시들해지자 SIMD 접근 방식에서 멀어졌다.
현재의 SIMD 프로세서 시대는 슈퍼컴퓨터 시장이 아닌 데스크탑 컴퓨터 시장에서 성장했다.1990년대 동안 데스크탑 프로세서가 실시간 게임과 오디오/비디오 처리를 지원할 만큼 강력해짐에 따라, 이러한 유형의 컴퓨팅 파워에 대한 수요가 증가했고, 마이크로프로세서 공급업체들은 수요를 충족시키기 위해 SIMD로 눈을 돌렸다.[3]Hewlett-Packard는 MPEG 디코딩을 가속화하기 위해 1994년 PA-RISC 1.1 데스크톱에 MAX 지침을 도입했다.[4]Sun Microsystems는 1995년 UltraSPARC I 마이크로프로세서에서 "VIS" 명령 집합 확장에 SIMD 정수 명령을 도입했다.MIPS는 유사한 MDMX 시스템을 채택했다.
처음으로 널리 배포된 데스크톱 SIMD는 1996년 인텔의 MMX 확장 기능을 통해 x86 아키텍처에 적용되었다.이는 모토로라 파워PC와 IBM의 POWER 시스템에 훨씬 더 강력한 AltiVec 시스템을 도입하는 계기가 되었다.인텔은 1999년 올 뉴 SSE 시스템을 도입해 대응했다.그 이후로, 두 아키텍처에 대한 SIMD 명령 집합에 대한 몇 가지 확장이 있었다.첨단 벡터 익스텐션 AVX, AVX2, AVX-512는 인텔이 개발했다.AMD는 현재 제품에서 AVX와 AVX2를 지원한다.
이러한 모든 개발은 실시간 그래픽에 대한 지원을 지향했으며, 따라서 데이터 유형과 아키텍처에 따라 대개 2~16단어 사이의 벡터 길이를 가진 2, 3, 4차원의 프로세싱을 지향한다.새로운 SIMD 아키텍처들이 이전의 것과 구별되어야 할 때, 이전의 SIMD와 벡터 슈퍼컴퓨터가 벡터 길이를 64,000에서 64,000까지 가졌던 것처럼, 새로운 아키텍처들은 그 후 "짧은 벡터" 아키텍처로 간주된다.현대의 슈퍼 컴퓨터는 거의 항상 MIMD 컴퓨터의 클러스터로, 각각 SIMD 명령을 구현한다.
이점
SIMD를 이용할 수 있는 애플리케이션은 다수의 멀티미디어 애플리케이션에서 공통적인 작업인 다수의 데이터 포인트에 동일한 값이 추가되거나 감산되는 애플리케이션이다.한 가지 예는 이미지의 밝기를 바꾸는 것이다.이미지의 각 픽셀은 색상의 적색(R), 녹색(G), 청색(B) 부분의 밝기에 대한 3개의 값으로 구성된다.밝기를 변경하기 위해 R, G, B 값은 메모리에서 판독되고, 값은 메모리에 추가(또는 감산)되며, 결과 값은 메모리에 다시 기록된다.마찬가지로, 오디오 DSP는 볼륨 제어를 위해 왼쪽과 오른쪽 두 채널을 동시에 곱할 수 있다.
SIMD 프로세서를 사용하면 이 프로세스에서 두 가지 개선사항이 있다.하나의 경우 데이터는 블록으로 이해되며, 여러 값을 동시에 로드할 수 있다.SIMD 프로세서는 "이 픽셀을 회수하고, 다음 픽셀을 회수하라"는 일련의 명령 대신 "n 픽셀을 회수하라"(여기서 n은 설계에 따라 다른 숫자임)라고 효과적으로 말하는 단일 명령이 있을 것이다.다양한 이유로, 이것은 전통적인 CPU 설계와 같이 각 픽셀을 개별적으로 검색하는 것보다 훨씬 적은 시간이 걸릴 수 있다.
또 다른 장점은 한 번의 작업으로 모든 로드된 데이터에 대해 명령이 작동한다는 것이다.즉, 8개의 데이터 포인트를 한꺼번에 로딩하여 SIMD 시스템이 작동한다면,add
데이터에 적용되는 연산은 8개의 값 모두에 동시에 발생한다.이 병렬은 슈퍼스칼라 프로세서가 제공하는 병렬과는 별개다. 8개의 값은 비수퍼스칼라 프로세서에서조차 병렬로 처리되며, 슈퍼칼라 프로세서는 병렬로 여러 개의 SIMD 연산을 수행할 수 있다.
단점들
SIMD가 절감 효과가 큰 전문 영역 및 용도 외에서는 범용 컴퓨팅에 사용될 때 SIMD의 단점을 아무리 강조해도 지나치지 않다.
- 모든 알고리즘이 쉽게 벡터화할 수 있는 것은 아니다.예를 들어, 코드 구문 분석과 같은 흐름 제어 집약적인 작업은 SIMD에서 쉽게 이익을 얻을 수 없을 수 있지만, 이론적으로 이 기법은 더 많은 중간 상태를 필요로 하지만 최대 캐시 최적성을 목표로 비교와 "배치 흐름"을 벡터화하는 것이 가능하다.참고: 배치-파이프라인 시스템(예: GPU 또는 소프트웨어 래스터화 파이프라인)은 SIMD 본질로 구현했을 때 캐시 제어에 가장 유리하지만 SIMD 기능에만 국한되지는 않는다.코드 문자열과 같은 직렬 내 의존성을 피하기 위해 추가적인 복잡성이 나타날 수 있지만 벡터화를 위해서는 독립성이 필요하다.[clarification needed]
- 전력 소비량과 필요한 칩 면적을 증가시키는 대용량 레지스터 파일.
- 현재, SIMD 지침과 함께 알고리즘을 구현하는 것은 보통 인간의 노동을 요구한다. 예를 들어, 대부분의 컴파일러는 일반적인 C 프로그램에서 SIMD 지침을 생성하지 않는다.컴파일러에서의 자동 벡터화는 컴퓨터 과학 연구의 활발한 영역이다. (컴파어 벡터 처리)
- 특정 SIMD 명령어 세트를 이용한 프로그래밍은 수많은 낮은 수준의 과제를 수반할 수 있다.
- SIMD는 데이터 정렬에 제한이 있을 수 있다. 특정 구조에 익숙한 프로그래머들은 이를 예상하지 못할 수 있다.더 나쁜 것은 정렬이 한 수정기호 또는 "호환성" 프로세서에서 다른 프로세서로 변경될 수 있다는 점이다.
- 데이터를 SIMD 레지스터로 수집하여 올바른 목적지 위치로 분산시키는 것은 까다로우며(때로는 허가 작업이 필요함) 비효율적일 수 있다.
- 일부 SIMD 명령 집합에서는 회전 또는 3-oper 및 추가와 같은 특정 지침을 사용할 수 없다.
- 명령 집합은 아키텍처마다 다르다. 일부 프로세서는 전적으로 SIMD 명령이 없기 때문에 프로그래머는 이들을 위해 비벡터화된 구현(또는 다른 벡터화된 구현)을 제공해야 한다.
- 서로 다른 아키텍처는 다른 레지스터 크기(예: 64, 128, 256 및 512비트)와 명령어 세트를 제공하며, 이는 프로그래머가 주어진 CPU에서 최적으로 작동하기 위해 벡터화된 코드의 다중 구현을 제공해야 함을 의미한다.또한, 가능한 SIMD 명령어 세트는 각각의 새로운 레지스터 크기에 따라 증가한다.안타깝게도, 레거시 지원 이유로, 이전 버전은 폐기될 수 없다.
- 초기 MMX 명령 집합은 부동 소수점 스택과 레지스터 파일을 공유하여 부동 소수점과 MMX 코드를 혼합할 때 비효율을 발생시켰다.그러나 SSE2는 이를 수정한다.
문제 1과 5를 해결하기 위해, RISC-V의 벡터 확장은 대체 접근방식을 사용한다. 즉, 하위 등록 수준 세부사항을 프로그래머에게 노출하는 대신, 명령 집합은 이를 이 명령 집합과 함께 모든 CPU에 걸쳐 동일한 인터페이스를 사용하는 몇 개의 "벡터 레지스터"로 추상화한다.하드웨어는 모든 정렬 문제와 루프의 "스트립 마이닝"을 처리한다.벡터 크기가 다른 기계들은 동일한 코드를 실행할 수 있을 것이다.LLVM은 이 벡터 유형을 "vscale"[citation needed]라고 부른다.
일반용도용 벡터 프로세싱 및 스칼라 프로세싱에 비해 SIMD의 단점은 아무리 강조해도 지나치지 않다.등가 스칼라 또는 등가 벡터 코드와 비교할 때 코드 크기의 크기 증가 순서는 드물지 않으며, 벡터 ISA를[5] 통해 규모 또는 더 큰 효과(지침당 수행된 작업)를 달성할 수 있다.
ARM의 확장 가능한 벡터 익스텐션은 플린의 택사노미에서 오늘날 일반적으로 "Predified"(마스크된) SIMD로 알려진 "Associative Processing"으로 알려진 또 다른 접근 방식을 취한다.이 접근방식은 벡터 프로세싱만큼 콤팩트하지는 않지만 여전히 비프레미티드 SIMD보다 훨씬 낫다. 자세한 비교 예는 벡터 프로세싱 페이지에 제시되어 있다.
연대기
SIMD 슈퍼컴퓨터의 예(벡터 프로세서 제외)연도 | 예 |
---|---|
1974 | 일리악 4세 |
1974 | ICL 분산 어레이 프로세서(DAP) |
1976 | 버러우스 과학 프로세서 |
1981 | Martin Marietta의 기하-산술 병렬 프로세서(Rockheed Martin에서 계속, Teranex와 Silicon Optix에서) |
1983-1991 | NASA/Goddard 우주비행센터의 MPP(Massive Parallel Processor) |
1985 | 연결 기계(Connection Machine, 모델 1 및 2(CM-1 및 CM-2), Thinking Machine Corporation의 모델 |
1987-1996 | MasPar MP-1 및 MP-2 |
1991 | 웨이브 트레이서의 제피르 DC |
2001 | 팍시스의 엑스플로어 |
하드웨어
소형(64비트 또는 128비트) SIMD는 1990년대 초반 범용 CPU에서 인기를 끌었고 1997년 이후 알파용 MVI(Motion Video Instructions)로 이어졌다.SIMD instructions can be found, to one degree or another, on most CPUs, including IBM's AltiVec and SPE for PowerPC, HP's PA-RISC Multimedia Acceleration eXtensions (MAX), Intel's MMX and iwMMXt, SSE, SSE2, SSE3 SSSE3 and SSE4.x, AMD's 3DNow!, ARC's ARC Video subsystem, SPARC's VIS and VIS2, Sun's MAJC, ARM's Neon technology, MIPS' MDMX (MaDMaX) aND MIPS-3D.IBM, Sony, Toshiba가 공동 개발한 셀프로세서의 SPU의 명령어 세트는 SIMD 기반이다.현재 NXP인 필립스는 제탈이라는 이름의 여러 SIMD 프로세서를 개발했다.제탈은 320개의 16비트 프로세서 요소를 가지고 있다. 특히 시각 작업을 위해 설계되었다.
현대의 GPU(Graphics Processing Unit)는 한 번에 128비트 또는 256비트로 지점, 로드 및 저장소가 가능한 광범위한 SIMD 구현인 경우가 많다.
인텔의 최신 AVX-512 SIMD 지침은 현재 512비트의 데이터를 한 번에 처리한다.
소프트웨어
SIMD 지침은 3D 그래픽 처리 시 널리 사용되지만 SIMD가 내장된 현대 그래픽 카드는 주로 CPU에서 이 작업을 넘겨받았다. 일부 시스템에는 벡터 내부에 요소를 재포장하는 퍼머 기능이 포함되어 있어 데이터 처리 및 압축에 특히 유용하다.그것들은 암호학에도 사용된다.[6][7][8]GPPU(General-pur-computing)의 추세는 향후 SIMD의 폭넓은 활용으로 이어질 수 있다.
개인용 컴퓨터 소프트웨어의 SIMD 시스템 채택은 처음에는 여러 가지 문제로 인해 더디게 진행되었다.하나는 많은 초기 SIMD 명령 집합이 기존의 부동소수점 레지스터의 재사용으로 인해 시스템의 전반적인 성능이 저하되는 경향이 있다는 것이었다.MMX와 3DNow!와 같은 다른 시스템들은 FPU와 MMX 레지스터를 사용하는 것 사이에서 전환하기 위한 값비싼 컨텍스트 전환 지침이 있는 데이터 유형에 대한 지원을 제공했다.컴파일러도 종종 지원이 부족하여 프로그래머들이 조립 언어 코딩에 의존해야 한다.
x86의 SIMD는 시작이 느렸다.AMD에 의한 3DNow!와 인텔에 의한 SSE의 도입은 다소 혼란스럽지만, 오늘날 시스템은 (AMD가 SSE를 채택한 이후) 정착된 것으로 보이며, 새로운 컴파일러는 SIMD를 지원하는 소프트웨어를 더 많이 만들어야 한다.이제 Intel과 AMD는 모두 SIMD 명령을 사용하는 최적화된 수학 라이브러리를 제공하며 libSIMD, SIMDx86, SLEEF와 같은 오픈 소스 대안이 나타나기 시작했다(libm 참조).[9]
애플컴퓨터는 SIMD 시장에 다른 제품보다 늦게 진입했음에도 불구하고 다소 더 많은 성공을 거두었다.AltiVec은 풍부한 시스템을 제공했으며 모토로라, IBM, GNU의 점점 더 정교한 컴파일러를 사용하여 프로그래밍할 수 있으므로 어셈블리 언어 프로그래밍은 거의 필요하지 않다.또한, SIMD의 혜택을 받을 수 있는 많은 시스템들, 예를 들어 iTunes와 QuickTime과 같은 애플 자체에서 공급되었다.그러나 2006년 애플 컴퓨터는 인텔 x86 프로세서로 이전했다.애플의 API와 개발 툴(XCode)이 SSE2와 SSE3는 물론 AltiVec도 지원하도록 수정됐다.애플은 파워의 지배적인 구매자였다.IBM과 Freescale Semiconductor의 PC 칩과 플랫폼을 포기했음에도 불구하고 Freescale과 IBM의 여러 PowerPC와 Power ISA 설계에서 AltiVec의 추가 개발은 계속되고 있다.
레지스터 내의 SIMD, 즉 SWAR은 SIMD 지침에 대한 직접적인 지원을 제공하지 않는 하드웨어의 범용 레지스터에서 SIMD를 수행하는 데 사용되는 다양한 기술과 요령이다.이것은 SIMD를 직접 지원하지 않는 하드웨어에서도 특정 알고리즘의 병렬화를 이용하는데 이용될 수 있다.
프로그래머 인터페이스
SIMD 명령어 세트의 게시자가 벡터 코드 생성을 보장하는 내장함수나 특별한 데이터 유형(운영자 과부하)을 가진 독자적인 C/C++ 언어 확장을 만드는 것이 일반적이다.Intel, AltiVec, ARM NEON은 컴파일러가 CPU를 대상으로 광범위하게 채택한 확장을 제공한다. (더 복잡한 연산은 벡터 수학 라이브러리의 작업이다.)
GNU C 컴파일러는 SIMD 데이터 유형을 정의하는 방법을 제공하여 어떤 플랫폼에서도 사용할 수 있는 범용 인터페이스로 추상화함으로써 확장을 한 단계 더 진전시킨다.[10]또한 LLVM Clang 컴파일러는 IR에 정의된 유사 인터페이스를 사용하여 이 기능을 구현한다.[11]Rust's packed_simd crate는 이 인터페이스를 사용하며 Swift 2.0+도 마찬가지다.
C++에는 실험 인터페이스가 있음std::experimental::simd
GCC 확장과 유사하게 작동한다.LLVM의 libcxx가 그것을 구현하는 것 같다.GCC 및 libstdc++의 경우 GCC 확장자 위에 빌드된 래퍼 라이브러리를 사용할 수 있다.[12]
Microsoft는 에 SIMD를 추가했다.YuJ의 NETIT.[13] TheSystem.Numerics.Vector
NuGet에서 제공되는 패키지는 SIMD 데이터 유형을 구현한다.[14]Java는 또한 인큐베이터 모듈의 OpenJDK 17에서 이용할 수 있는 새로운 SIMD 지시사항을 제안하였다.또한 지원되지 않는 CPU에서 간단한 루프까지 안전한 예비 메커니즘을 가지고 있다.
SIMD 데이터 유형을 제공하는 대신 컴파일러는 일부 루프를 자동 제어하여 데이터 의존성 부족에 대한 일부 주장을 취할 수도 있다.이는 SIMD 변수를 직접 조작하는 것만큼 유연하지는 않지만 사용하기 쉽다.OpenMP 4.0+에는#pragma omp simd
힌트.[16]실크는 비슷한 특징을 가지고 있다.#pragma simd
.[17] GCC와 클랑도 루프 벡터블을 만들 수 있는 자체적인 실용화를 가지고 있지만, 이 세 가지 모두 OpenMP에 의해 쓸모없게 되었다.
SIMD 다중 버전
소비자 소프트웨어는 일반적으로 여러 세대를 아우르는 다양한 CPU에서 작동할 것으로 예상되며, 이것은 프로그램의 계산 성능을 향상시키기 위해 새로운 SIMD 명령을 사용하는 프로그래머의 능력을 제한할 수 있다.솔루션은 구형 또는 신형 SIMD 기술을 사용하는 동일한 코드의 여러 버전을 포함하고 런타임에 사용자의 CPU에 가장 적합한 버전(동적 디스패치)을 선택하는 것이다.해결책에는 크게 두 가지 캠프가 있다.
- 함수 다중버전: 프로그램이나 라이브러리의 서브루틴은 많은 명령어 세트 확장을 위해 복제되고 컴파일되며, 프로그램은 런타임에 사용할 서브루틴을 결정한다.
- 라이브러리 다중 버전: 전체 프로그래밍 라이브러리는 많은 명령 집합 확장에 대해 복제되며, 운영 체제 또는 프로그램이 런타임에 로드할 명령 집합 확장자를 결정한다.
이전 솔루션은 인텔 C++ 컴파일러, GCC 6 이후 GNU 컴파일러 컬렉션, 7 이후 클랑(Clang)이 지원한다.그러나 GCC와 clang은 명시적인 것을 요구하기 때문에target_clones
"복제" 기능에 대한 레이블을 지정하는 더 쉬운 방법은 여러 버전의 라이브러리를 컴파일하고 시스템 glibc가 하나를 선택하도록 하는 것인데, 이는 인텔이 지원하는 Clear Linux 프로젝트에서 채택한 접근방식이다.[18]
러스트 프로그래밍 언어도 멀티버전화를 지원한다.복제는 원래 기능을 호출하여 인라이닝이 이어지도록 할 수 있다.[19]
웹 상의 SIMD
2013년에 John McCutchan은 다트 프로그래밍 언어의 SIMD 명령 집합에 대한 고성능 인터페이스를 만들어 처음으로 웹 프로그램에 SIMD의 이점을 제공했다고 발표했다.인터페이스는 두 가지 유형으로 구성된다.[20]
- Float32x4, 4개의 단일 정밀 부동 소수점 값.
- Int32x4, 4개의 32비트 정수 값.
이러한 유형의 인스턴스는 불변하며 최적화된 코드는 SIMD 레지스터에 직접 매핑된다.다트에 표현된 작전은 일반적으로 오버헤드 없이 단일 명령으로 편성된다.이것은 C와 C++ 본질과 비슷하다.4×4 매트릭스 곱하기, 3D 꼭지점 변환, 만델브로트 세트 시각화에 대한 벤치마크는 다트어로 작성된 스칼라 코드에 비해 거의 400%의 속도 증가를 보여준다.
현재 SIMD.js로 불리는 다트에 대한 McCutchan의 작업은 ECMascript에 의해 채택되었고 Intel은 IDF 2013에서 V8과 SpiderMonkey 모두에 대한 McCutchan의 사양을 구현하고 있다고 발표했다.[21]그러나, 2017년까지 SIMD.js는 WebAssembly에서 유사한 인터페이스를 추구하기 위해 ECMAScript 표준 대기열에서 제외되었다.[22]2020년 8월 현재 WebAssembly 인터페이스는 미완성 상태로 남아 있지만, 휴대용 128비트 SIMD 기능은 이미 많은 엔진에서 일부 사용되고 있다.
Mozilla의 C/C++-to-JavaScript 컴파일러인 Emscripten은 확장이 있는 경우 자바스크립트의 SIMD API에 SIMD 본질이나 GCC 스타일의 벡터 코드를 사용하는 C+++ 프로그램을 컴파일러하여 스칼라 코드에 비해 동등한 속도 상승을 가져올 수 있다.[23]또한 WebAssembly 128비트 SIMD 제안을 지원한다.[24]
상업적 응용 프로그램
일반적으로 SIMD 전용 프로세서의 지속 가능한 상용 애플리케이션을 찾는 것이 어렵다는 것이 입증되었지만, 어느 정도 성공적 척도가 있었던 것은 록히드마틴이 개발하여 그들의 스핀오프 테라넥스에 의해 상업 부문으로 가져간 GAPP이다.GAPP의 최근 형성은 다양한 비디오 표준과 프레임률(PAL, NTSC에서 HDTV 포맷으로/로 변환), 디인터레이싱, 이미지 노이즈 감소, 적응형 비디오 압축, 이미지 향상 등 실시간 비디오 처리 애플리케이션에서 강력한 도구가 되었다.
SIMD를 위한 보다 보편적인 애플리케이션은 비디오 게임에서 발견된다: 1998년 이후 거의 모든 현대 비디오 게임 콘솔은 SIMD 프로세서를 아키텍처 어딘가에 통합했다.PlayStation 2는 벡터 플로트 장치 중 하나가 자체 명령 스트림을 실행하는 자율 DSP 또는 일반적인 CPU 명령에 의해 구동되는 코프로세서로서 기능할 수 있다는 점에서 특이했다. 3D 그래픽 애플리케이션은 4차원 벡터를 사용하는 작동에 크게 의존하기 때문에 SIMD 처리에 자신들을 잘 빌려주는 경향이 있다.마이크로소프트의 Direct3D 9.0은 이제 SIMD 지원 명령의 사용을 포함하여 자체 수학 연산의 런타임 프로세서별 구현을 선택한다.
벡터 프로세싱을 사용하는 최근 프로세서 중 하나는 IBM이 도시바, 소니와 협력하여 개발한 셀프로세서다.다수의 SIMD 프로세서(NUMA 아키텍처, 각각 독립 로컬 저장소를 갖추고 범용 CPU에 의해 제어됨)를 사용하며, 3D 및 비디오 처리 애플리케이션에 필요한 대규모 데이터셋에 적합하다.별도의 스칼라 레지스터가 없는 처음부터 SIMD라는 점에서 기존 ISA와는 다르다.
지일랍스는 미디어 플레이어, 휴대전화 등 모바일 기기에서 사용할 수 있는 SIMD 타입 프로세서를 생산했다.[25]
대규모 상용 SIMD 프로세서는 ClearSpeed Technology, Ltd, Stream Processors, Inc.에서 구입할 수 있다.ClearSpeed의 CSX600(2004)은 96개의 코어에 각각 2개의 이중정밀 부동 소수점 단위를 가지고 있으며, CSX700(2008)은 192개를 가지고 있다.스트림 프로세서는 컴퓨터 건축가 빌 달리가 이끌고 있다.그들의 Storm-1 프로세서(2007)는 MIPS CPU에 의해 제어되는 80개의 SIMD 코어를 포함하고 있다.
참고 항목
- 스트리밍 SIMD 확장, MMX, SSE2, SSE3, 고급 벡터 확장, AVX-512
- 명령 집합 아키텍처
- 플린의 분류법
- 레지스터 내 SIMD(SWAR)
- 단일 프로그램, 다중 데이터(SPMD)
- 오픈CL
참조
- ^ Flynn, Michael J. (September 1972). "Some Computer Organizations and Their Effectiveness" (PDF). IEEE Transactions on Computers. C-21 (9): 948–960. doi:10.1109/TC.1972.5009071.
- ^ "MIMD1 - XP/S, CM-5" (PDF).
- ^ Conte, G.; Tommesani, S.; Zanichelli, F. (2000). "The long and winding road to high-performance image processing with MMX/SSE". Proc. Fifth IEEE Int'l Workshop on Computer Architectures for Machine Perception. doi:10.1109/CAMP.2000.875989. hdl:11381/2297671. S2CID 13180531.
- ^ Lee, R.B. (1995). "Realtime MPEG video via software decompression on a PA-RISC processor". digest of papers Compcon '95. Technologies for the Information Superhighway. pp. 186–192. doi:10.1109/CMPCON.1995.512384. ISBN 0-8186-7029-0. S2CID 2262046.
- ^ Patterson, David; Waterman, Andrew (18 September 2017). "SIMD Instructions Considered Harmful". SIGARCH.
- ^ RE: SSE2 속도, SHA 해시 알고리즘 구현에 SSE2가 어떻게 사용되는지 표시
- ^ Salsa20 속도; SSE2를 사용하여 구현된 스트림 암호를 보여주는 Salsa20 소프트웨어
- ^ 제목: 비 SIMD SSE2 정수 곱하기 명령을 사용하여 구현된 RSA를 보여주는 SSE2를 사용하는 RSA 처리량 최대 1.4배.
- ^ "SIMD library math functions". Stack Overflow. Retrieved 16 January 2020.
- ^ "Vector Extensions". Using the GNU Compiler Collection (GCC). Retrieved 16 January 2020.
- ^ "Clang Language Extensions". Clang 11 documentation. Retrieved 16 January 2020.
- ^ "VcDevel/std-simd". VcDevel. 6 August 2020.
- ^ "RyuJIT: The next-generation JIT compiler for .NET".
- ^ "The JIT finally proposed. JIT and SIMD are getting married".
- ^ "JEP 338: Vector API".
- ^ "SIMD Directives". www.openmp.org.
- ^ "Tutorial pragma simd". CilkPlus. 18 July 2012.
- ^ "Transparent use of library packages optimized for Intel® architecture". Clear Linux* Project. Retrieved 8 September 2019.
- ^ "2045-target-feature". The Rust RFC Book.
- ^ John McCutchan. "Bringing SIMD to the web via Dart" (PDF). Archived from the original (PDF) on 2013-12-03.
- ^ "SIMD in JavaScript". 01.org. 8 May 2014.
- ^ "tc39/ecmascript_simd: SIMD numeric type for EcmaScript". GitHub. Ecma TC39. 22 August 2019. Retrieved 8 September 2019.
- ^ Jensen, Peter; Jibaja, Ivan; Hu, Ningxin; Gohman, Dan; McCutchan, John (2015). "SIMD in JavaScript via C++ and Emscripten" (PDF).
{{cite journal}}
:Cite 저널은 필요로 한다.journal=
(도움말) - ^ "Porting SIMD code targeting WebAssembly". Emscripten 1.40.1 documentation.
- ^ "ZiiLABS ZMS-05 ARM 9 Media Processor". ZiiLabs. Archived from the original on 2011-07-18. Retrieved 2010-05-24.
외부 링크
- SIMD 아키텍처(2000)
- 크래킹 오픈 펜티엄 3(1999)
- 상용 마이크로프로세서의 짧은 벡터 확장
- Intel 스트리밍 SIMD 확장을 사용한 애니메이션 모델의 렌더링 파이프라인 최적화에 대한 기사
- "Yeppp!": 교차 플랫폼, 조지아 테크사의 오픈 소스 SIMD 라이브러리
- LLNL Lawrence Livermore 국립 연구소의 병렬 컴퓨팅 소개
- GitHub에서 simde on GitHub: C/C++ 헤더를 사용하여 다른 플랫폼(예: ARM NEON의 SSE 본질)을 위한 휴대용 구현