우리가하는 방식을 프로그래밍하는 대신 “정렬”과 같은 일반적인 작업을 지정한 다음 환경을 컴파일하여 하드웨어를 최대한 활용하도록해야하는 이유는 무엇입니까? 이런 식으로 우리는 정렬 네트워크와 같은 새로운 특수 하드웨어를 컴퓨터에 제공 할 수 있으며 기존 코드와 자동으로 작동합니다.
답변
우선, 컴퓨터에는 특수 하드웨어가 제공 됩니다. 몇 년 동안 판매 된 모든 랩톱 및 데스크탑 컴퓨터에는 이제 비디오 및 게임 응용 프로그램에 필요한 시각적 처리 알고리즘을 처리하는 특수 보조 프로세서 인 그래픽 처리 장치가 있습니다. 초대형 컴퓨터 ( 예 : “슈퍼 컴퓨터”, IBM System Z 제품군)에는 숫자 처리 ( “벡터 처리”) 등 을 처리 할 수있는 다양한 특수 프로세서가 있습니다 .
둘째, 정렬은 컴퓨팅에서 가장 많이 연구 된 측면 중 하나이며, 가장 단순한 경우보다 하드웨어 에 구축하기에는 너무 복잡합니다 . 정렬은 속도와 정확성에 관한 것입니다. 속도는 알고리즘의 선택, 데이터의 유형 및 변형 및 데이터 볼륨에 따라 다릅니다. 정확성은 데이터의 유형과 컨텍스트에 따라 다릅니다. CPU의 기본 단어 크기에 맞는 중간 크기의 정수 배열을 정렬하는 것은 매우 간단합니다 ( 예 :, 31 또는 63 비트 더하기 부호). 단순한 ASCII 값 이상을 포함하는 문자열 정렬은 매우 복잡합니다. IBM은 20 년 전에 국가 경계 및 일반적인 사용의 맥락에서 문자 세트 문제를 논의하는 500 개 이상의 페이지를 발행했습니다. 그리고 연속되지 않은 데이터에 대한 문제가 있습니다. 연결된 목록을 정렬하려면 메모리 전체에서 포인터를 쫓는 것이 필요합니다.
답변
주요 문제는 정렬 알고리즘 (1) 많은 유연성이 필요하며 (2) 어쨌든 하드웨어를 사용하여 가속하는 것이 매우 어렵다는 것입니다.
한 가지 점은 정렬 알고리즘이 프로세서의 메모리 대역폭을 초과하기에 이미 충분히 빠르다는 것입니다. 프로세서는 이미 데이터가 메인 메모리로 앞뒤로 이동할 때까지 많은 시간을 소비합니다. 하드웨어 가속 정렬 보조 프로세서 또는 특수 정렬 명령도 같은 문제가 있습니다.
이 메모리 대역폭이 해결되는 방식은 더 나은 “로컬 리티”를 가진 더 나은 알고리즘과 데이터 구조를 사용하는 것이며,이 분야에서 여전히 중요한 작업이 있습니다. 특히 “캐시 모르는 알고리즘을 캐시합니다” 캐싱의 세부 사항에 관계없이 “캐시 인식”알고리즘은 특정 캐시 페이지 크기 등에 맞게 조정됩니다.
반대로 미디어 응용 프로그램 (오디오 및 그래픽, 특히 3D 그래픽)은 매우 반복적 인 구조를 사용합니다. 물론 유연성은 있지만, 크고 구조가 잘 잡힌 기초 위에 구축되었습니다. 이를 통해 Blitting (구성 가능하지만 여전히 구조화 된 블록 복사 작업) 및 선 / 다각형 그리기와 같은 그래픽 가속을 간단하게 시작할 수있었습니다. 그래픽과 사운드 처리가 더욱 정교 해짐에 따라 벡터 작업은 최적화의 목표가되었습니다. 먼저 MMX (정수 벡터)와 SSE (수레 벡터)입니다. 이는 기존의 고정 기능 3D 그래픽 파이프 라인을 3D 그래픽 하드웨어로 옮길 때 3D 그래픽 엔진이 작동하는 방식에 대해 잘 정의 된 구조가 있음을 의미했습니다.
그러나 3D 그래픽의 경우 하드웨어에서 한 번 수행 된 작업은 이제 유연성을 위해 소프트웨어에서 수행됩니다. 예를 들어 쉐이더는 소프트웨어입니다. 예를 들어, 다양한 재질의 모양을 제공하는 방대한 범위의 다양한 쉐이더를 얻는 방법입니다. 그러나 해당 소프트웨어는 여전히 일반 소프트웨어보다 훨씬 구조적으로 작동하므로 훨씬 더 전문화 된 하드웨어 플랫폼을 계속 사용할 수 있습니다. 그렇기 때문에 그래픽 카드가 물리학에서 암호 해독에 이르기까지 모든 것을 가속화 할 수 있습니다. 동일한 모델에도 적합하고 최신 그래픽 프로세서가 제공하는 명령 세트를 사용하여 효율적으로 구현할 수있는 응용 프로그램입니다.
그래픽 프로세서는 이제 디지털 신호 프로세서의 영적 또는 실제 자손이며, 디지털 신호 (예 : 오디오)를 처리하기위한 일종의 특수 프로세서 일 수도 있습니다.
마지막 포인트-정렬 알고리즘 은 하드웨어에 의해 가속화 될 수 있습니다. 데이터에 따라 프로세서의 MMX 또는 SSE (Single-Instruction-Multiple-Data) 명령어를 사용하여 정렬을 처리 할 수 있지만 메모리 대역폭 문제로 인해 별다른 의미가 없을 수 있습니다. 그래도 그래. 그러나 그래픽 하드웨어를 사용할 수도 있습니다. 이렇게하면 그래픽 카드에 대해 훨씬 더 나은 메모리 대역폭을 활용할 수 있습니다. 이런 식으로 모든 종류를 교체 할 수는 없지만, 가능하면 가능할 것입니다.
IOW는 다양한 경제 및 실제 문제로 인해 분류와 같이 비교적 좁은 작업을 가속화하도록 특별히 하드웨어를 설계 하는 것은 실제로 의미가 없습니다. 더 넓은 범위의 작업을 가속화하거나 더 넓은 범위의 작업에 기존 가속 하드웨어를 적용 할 수있는 기능이 훨씬 더 합리적입니다.
답변
그러나 그들은한다! 이를 명령어 세트 확장이라고합니다. (SSE 등의 스터프)
특정 작업은 소프트웨어에서 매우 훌륭하게 구현됩니다. 일반적으로 이러한 구현은 작업을 수행하기에 충분하므로 특수한 하드웨어가 필요하지 않습니다. 특정 종류의 특수 하드웨어를 만들려면 그 가치를 높이기 위해 매우 다양한 응용 프로그램이 필요합니다.
이 작업을 수행 할 수있는 하드웨어를 살펴보면 FPGA와 같은 것을보고있을 것입니다. FPGA에서 볼 수 있듯이 칩은 훨씬 비싸지 만 많은 응용 프로그램에는 적용되지 않습니다.