FPGA는 어떻게 CPU보다 성능이 뛰어 납니까?


55

비트 코인 채굴, 전자 거래 및 단백질 폴딩과 같은 작업을 수행하는 시스템의 성능을 향상시키기 위해 FPGA를 사용하는 사람들에 대해 들었습니다.

CPU가 일반적으로 클럭 속도 측면에서 최소 10 배 이상 빠르게 실행될 때 FPGA가 성능면에서 어떻게 CPU와 경쟁 할 수 있습니까?


13
FPGA는 한 번에 모든 것을 수행합니다.
Ignacio Vazquez-Abrams

답변:


48

CPU는 순차적 처리 장치입니다. 알고리즘을 일련의 작업으로 나누고 한 번에 하나씩 실행합니다.

FPGA는 병렬 처리 장치이거나 구성 될 수 있습니다. 전체 알고리즘은 클럭의 단일 틱 또는 최악의 경우 순차적 프로세서보다 훨씬 적은 클럭 틱에서 실행될 수 있습니다. 증가 된 논리 복잡성에 대한 비용 중 하나는 일반적으로 장치를 클럭킹 할 수있는 하한입니다.

위의 사항을 염두에두고 FPGA는 전체 클럭 속도는 낮지 만 적은 클럭 틱으로 동일한 작업을 수행 할 수 있기 때문에 CPU가 특정 작업을 수행하는 것보다 성능이 뛰어납니다. 달성 할 수있는 이득은 알고리즘에 따라 크게 달라 지지만 최소한 FFT와 같은 경우에는 비대칭 적이 지 않습니다.

또한 여러 병렬 실행 유닛을 FPGA에 구축 할 수 있기 때문에 동일한 알고리즘을 통과하려는 대량의 데이터가있는 경우 병렬 실행 유닛에 데이터를 분산하고 처리량을 크게 높일 수 있습니다. 심지어 멀티 코어 CPU로도 달성 할 수 있습니다.

장점에 대한 대가는 전력 소비와 $$$입니다.


2
+1; 그러나 FPGA는 CPU만큼 역동적이지 않기 때문에 CPU가 일반적으로 PC에 더 적합합니다.
Nick Williams

17
"장점에 대해 지불하는 가격은 전력 소비와 $$$입니다." -이것은 종종 사실이지만, 많은 알고리즘에 대해 저가 $ 50 Xilinx Spartan-6을 사용하여 최고급 멀티 달러 Intel Xeon 시스템을 제곱 할 수 있습니다. 그러나 일반적으로 많은 엔지니어링 시간이 걸리므로 하나의 응용 프로그램에서만 작동하고 변경하기 어려운 매우 맞춤화 된 디자인이 될 수 있습니다. 따라서 절충은 힘과 돈뿐만 아니라 알고리즘 개발 시간, 재사용 성 및 유연성입니다. (시간 == 돈을 주장 할 수는 있지만)
wjl

마지막 문장에 대한 markt는 FPGA가 CPU보다 훨씬 낮은 전력을 사용하지 않습니까? CPU와 FPGA 모두를위한 광범위한 장치가 있지만 비트 코인 채굴과 같은 것에 사용되는 장치를 보면 CPU가 FPGA보다 훨씬 전력 소비가 많은 작업에 사용되지는 않습니다. 익숙한?
David Gardner

4
@David : 비트 코인 채굴에 대해 이야기 할 때 관련 메트릭은 와트 당 해시 수입니다. Markt는 전반적인 전력 소비에 대해 이야기하고 있습니다. 즉, 주어진 FPGA는 일반적인 CPU보다 3 배 많은 전력을 소비 할 수 있지만 비트 코인 채굴에서는 3 배 이상 빠릅니다. Bitcoin의 경우 승리입니다.
Billy ONeal

2
@Billy : 와트 당이 아닌 와트 당 해시 수.
Paŭlo Ebermann

34

Markt는 이것이 대부분 옳았지만 여기에 2 센트를 넣을 것입니다.

32 비트 정수 내에서 비트 순서를 반대로하는 프로그램을 작성하고 싶다고 말했다고 상상해보십시오. 이 같은:

int reverseBits(int input) {
    output = 0;
    for(int i = 0;i < 32;i++) {
        // Check if the lowest bit is set
        if(input & 1 != 0) {
            output = output | 1; // set the lowest bit to match in the output!
        }

        input = input >> 1;
        output = output << 1;
    }
    return output;
}

이제 내 구현은 우아하지 않지만이 작업을 수행하는 데 몇 가지 작업과 아마도 일종의 루프가있을 것이라는 데 동의합니다. 이는 CPU에서이 작업을 구현하는 데 1주기 이상을 소비했음을 의미합니다.

FPGA에서는 이것을 간단히 한 쌍의 래치로 연결할 수 있습니다. 데이터를 일부 레지스터로 가져온 다음 역순으로 다른 레지스터에 연결합니다. 이는 FPGA에서 단일 클록 주기로 동작이 완료됨을 의미합니다. 따라서 FPGS는 한 번의 주기로 범용 CPU에서 수천 번의주기를 완료하는 작업을 완료했습니다! 또한 수백 개의 레지스터를 병렬로 연결할 수도 있습니다. 따라서 단일 사이클에서 수백 개의 숫자를 FPGA로 옮길 수 있다면 1 FPGA 클록 사이클에서 수천 번의 작업을 수백 번 이상 완료 할 수 있습니다.

범용 CPU가 할 수있는 일이 많이 있지만, 제한적으로, 일부 작업을 완료하기 위해 간단한 명령 목록으로 확장해야하는 일반화되고 간단한 명령을 설정합니다. 그래서 범용 CPU에 "32 비트 레지스터에 대한 역 비트 순서"와 같은 명령을 만들고 방금 구축 한 FPGA와 동일한 기능을 CPU에 제공 할 수 있지만, 가능한 많은 유용한 명령이 있습니다. 인기있는 CPU의 비용을 보증하는 것만 넣으십시오.

FPGA, CPLD 및 ASIC은 모두 원시 하드웨어에 대한 액세스를 제공하므로 "키를 사용하여 AES256 암호화 된 바이트 해독"또는 "h.264 비디오의 디코딩 프레임"과 같은 미친 작업을 정의 할 수 있습니다. 이것들은 FPGA에서 하나 이상의 클럭 사이클의 지연 시간을 갖지만, 수백만 라인의 범용 어셈블리 코드로 연산을 작성하는 것보다 훨씬 더 효율적인 방식으로 구현 될 수 있습니다. 또한 많은 외부 작업을 위해 고정 목적 FPGA / ASIC을보다 효율적으로 만들 수 있다는 이점이 있습니다.

병렬 처리는 markt가 지적한 또 다른 부분이며, 중요하지만 중요한 것은 FPGA가 연산을 수행하는 데 필요한 사이클 측면에서 CPU에서 이미 비싼 것을 병렬화하는 경우입니다. "10 개의 FPGA 사이클에서 CPU 100,000 사이클을 수행하는 작업을 수행 할 수 있고이 작업을 한 번에 4 개의 병렬로 수행 할 수 있습니다"라고 말하면 FPGA가 왜 그렇게 많은지 알 수 있습니다. CPU보다 빠릅니다!

그렇다면 왜 FPGA, CPLD 및 ASIC을 모든 것에 사용하지 않습니까? 일반적으로 하나의 작업 만 수행하는 전체 칩이기 때문입니다. 즉, FPGA / ASIC에서 더 빠른 속도로 프로세스를 처리 할 수 ​​있지만 나중에 해당 작업이 더 이상 유용하지 않은 경우에는 변경할 수 없습니다. 일단 회로에 일단 FPGA를 (일반적으로) 변경할 수없는 이유는 인터페이스의 배선이 고정되어 있고 일반적으로 회로에 FPGA를보다 유용한 구성으로 다시 기록 할 수있는 구성 요소를 포함하지 않기 때문입니다. 하이브리드 FPGA-CPU 모듈을 구축하려는 일부 연구자들이 있는데, 여기에는 FPGA와 같이 다시 배선 / 재 프로그래밍 할 수있는 CPU 섹션이 있으며 CPU의 효과적인 섹션을 "로드"할 수 있습니다.


2
비트 반전 (및 다른 모든 비트 스왑 / 선택 작업)의 경우 실제로 1 클럭 사이클이 걸리지 않습니다. 0이 걸립니다.이 예에서는 래치에 데이터저장 하는 데 1 클럭 사이클이 걸립니다 . 동일한 작업. 비트 반전 여부에 관계없이 1 클록 사이클이 필요합니다. 비트를 반전시키는 동작은 0 클록 사이클이다; 오버 헤드가없고 라우팅 만 다릅니다. 차이점은 시맨틱뿐만 아니라 특히 추가를 시작할 때의 의미입니다. 예를 들어, 32 비트 워드를 3 비트 아래로 이동 한 다음 다른 모든 니블을 교체 한 다음 뒤집는 데 시간이 얼마나 걸립니까?
wjl

1
"하이브리드 FPGA-CPU 모듈"-오랫동안 시장에 출시되어 왔지만 ( 현대적으로 성공적인 제품 은 xilinx.com/products/silicon-devices/soc/zynq-7000/index.htm 참조 ) 소프트웨어와 HDL을 결합한 특수 지원은 일반적으로 패브릭의 FPGA 내부에 소프트 CPU를 구현하여 수행됩니다.
wjl

@wjl 기술적으로 작업 자체를 수행하는 데 사이클이 걸리지 않는 것이 맞습니다. 나는 세 가지 작업을 논리적으로 고정 비트 패턴으로 변환하기 때문에 (예를 들어 b1b2b3b4로 시작하고 b3b1b4b2로 끝나기 때문에) 예제가 의미 론적으로 만 다르다고 주장합니다. 이것은 전체 답변에서 일종의 요점이었습니다. 고정 된 명령어 세트 / 게이트 배열이있는 경우에만 일련의 단계로 작업을 설명하는 것이 종종 필요하다는 것을 지적하려고했습니다.
Kit Scuzz

@wjl : david-gardner가 질문 한 방식에 따르면 "CPU"는 인텔 또는 AMD x86 / x86_64 클럭이 높고 파이프 라인이 있고 최적화 된 CPU와 같다고합니다. 많은 소프트 "CPU"가 있지만 FPGA에 장착되도록 설계된 CPU 중 어느 것도 i7처럼 클럭킹 할 수 없으며 거의 ​​최적화되거나 성능이 우수하지도 않습니다. 하이브리드에 관해서는 다음과 같은 의미가 더 있습니다 : newsroom.intel.com/docs/DOC-1512
Kit Scuzz

1
Zynq는 실제로 프로세서 (ARM Cortex-A9-태블릿 컴퓨터를 실행하는 것과 같은 것)를 나쁘지 않지만 고속 x86_64의 통합 FPGA를 갖는 것이 더 좋을 것입니다. =)
wjl

25

여기에 나와있는 다른 모든 인기있는 답변은 FPGA와 CPU의 문자 적 ​​차이점에 대해 이야기합니다. 이들은 FPGA의 병렬 특성과 CPU의 순차적 특성을 지적하거나 특정 알고리즘이 FPGA에서 잘 작동하는 이유에 대한 예를 제공합니다. 이 모든 것이 좋고 사실이지만 CPU와 FPGA 사이에 근본적인 차이가 있음을 제안합니다.

FPGA와 CPU의 공통 분모는 무엇입니까? 그것들은 모두 실리콘 위에 지어졌습니다. 그리고 어떤 경우에는 문자 그대로 동일한 실리콘 프로세스입니다.

근본적인 차이점은 우리가 그 실리콘 위에 쌓아 올린 추상화입니다. 한 사람이 실리콘에서 패키지 IC에 이르는 단일 최신 CPU 설계의 전체 세부 사항을 이해하는 것은 불가능합니다. 엔지니어링 프로세스의 일환으로 우리는 복잡한 문제를 인간이 머리를 감쌀 수있는 더 작은 관리 가능한 문제로 나눕니다.

해당 실리콘을 작동하는 CPU로 전환하는 데 필요한 사항을 고려하십시오. 다음은 해당 목표에 필요한 추상화 계층을 약간 단순화 한 것입니다.

  1. 먼저 실리콘으로 트랜지스터를 만드는 방법을 아는 엔지니어가 있습니다. 그들은 전력을 모으고 10 또는 100 기가 헤르츠의 속도로 스위칭하는 초소형 트랜지스터를 설계하는 방법을 알고 있으며 IC 패키지와 PCB를 통해 신호를 보내기에 충분한 전력으로 신호를 구동 할 수있는 강력한 트랜지스터를 설계하는 방법을 알고 있습니다. 다른 칩에.

  2. 그런 다음 트랜지스터를 수백 개의 서로 다른 로직 셀이있는 라이브러리에 결합하는 방법을 알고있는 디지털 로직 디자이너가 있습니다. 논리 게이트, 플립 플롭, 멀티플렉서 및 가산기 등을 예로들 수 있습니다. 다양한 구성으로 제공됩니다.

  3. 다음으로 우리는 고속 트랜시버, 메모리 컨트롤러, 분기 예측기, ALU 등과 같은 더 높은 수준의 기능 블록을 형성하기 위해 이러한 디지털 (및 때로는 아날로그) 블록을 구성하는 방법을 알고있는 다양한 엔지니어 그룹을 보유하고 있습니다.

  4. 그런 다음 우리는 CPU 설계자가 이러한 기능 단위를 완전한 시스템으로 통합하여 고급 CPU 설계를 설계해야합니다.

그리고 거기서 멈추지 않습니다. 현재 어셈블리 코드를 실행하는 CPU가 작동하지만 대부분의 프로그래머가 요즘 쓰는 언어는 아닙니다.

  1. 어셈블리 코드로 컴파일하는 C 컴파일러가있을 수 있습니다 (아마 중간 표현을 통해)
  2. C 위에 또 다른 추상화를 추가하여 객체 지향 언어를 얻을 수 있습니다.
  3. Java 바이트 코드와 같은 것을 해석 할 수 있도록 C 또는 C ++ 위에 가상 머신을 작성할 수도 있습니다.

그리고 추상화 계층은 거기서부터 진행될 수 있습니다. 여기서 중요한 점은 이러한 추상화 계층이 결합되어 CPU 기반 시스템을 대량으로 확장하고 맞춤형 실리콘 디자인의 작은 부분을 차지한다는 것입니다.

그러나 여기서 중요한 점은 각 추상화에도 비용 자체가 있다는 것입니다. 트랜지스터 디자이너는 모든 사용 사례에 완벽한 트랜지스터를 구축하지는 않습니다. 그는 합리적인 라이브러리를 구축하기 때문에 때로는 실제 작업에 필요한 것보다 약간 더 많은 전력 또는 더 많은 실리콘을 소비하는 트랜지스터가 사용됩니다. 마찬가지로 논리 디자이너는 가능한 모든 논리 셀을 구축하지 않습니다. 그들은 4 개의 입력 NAND 게이트와 8 개의 입력 NAND 게이트를 만들 수 있지만 다른 엔지니어가 6 개의 입력 NAND가 필요할 때 어떻게됩니까? 그는 8 개의 입력 NAND 게이트를 사용하고 사용되지 않은 2 개의 입력을 연결하여 실리콘 자원과 전력 손실을 초래합니다. 그리고 그것은 추상화의 사슬로 올라갑니다. 각 계층은 복잡성을 처리 할 수있는 방법을 제공합니다.

이제 이러한 추상화를 FPGA에 필요한 것과 비교하십시오. 본질적으로 FPGA 추상화는 위 목록에서 # 2에서 멈 춥니 다. FPGA를 통해 개발자는 디지털 로직 계층에서 작업 할 수 있습니다. CPU가이 계층에서 '하드 코딩'되어 있고 FPGA가 런타임에 구성되어야하기 때문에 (BTW, CPU가 일반적으로 훨씬 높은 주파수를 실행하는 이유 임), 그보다 훨씬 더 정교합니다. CPU에 비해 ​​FPGA에 대한 추상화가 거의 없습니다.

그렇다면 왜 FPGA가 CPU보다 빠를 수 있습니까? 본질적으로 FPGA는 CPU보다 훨씬 적은 추상화를 사용하기 때문에 설계자가 실리콘에 더 가까이 작업 할 수 있습니다. 그는 CPU에 필요한 많은 추상화 계층의 비용을 지불하지 않습니다. 그는 더 낮은 수준에서 코딩하고 주어진 기능을 달성하기 위해 더 열심히 노력해야하지만 더 높은 성능을 얻을 수 있습니다.

그러나 물론 더 적은 추상화도 단점이 있습니다. 이러한 모든 CPU 추상화는 정당한 이유가 있습니다. 그들은 우리에게 훨씬 더 간단한 코딩 패러다임을 제공하는데, 이는 더 많은 사람들이 쉽게 개발할 수 있음을 의미합니다. 이는 더 많은 CPU 설계가 존재한다는 것을 의미하며, 따라서 우리는 CPU의 가격 / 규모 / 시장 출시 시점에 막대한 이익을 얻습니다.

그래서 당신은 그것을 가지고 있습니다. FPGA는 추상화가 적으므로 더 빠르고 전력 효율적이지만 프로그래밍하기가 어려울 수 있습니다. CPU는 개발하기 쉽고 확장 가능하며 저렴하도록 많은 추상화 설계를 가지고 있습니다. 그러나 그들은 그 이익을 위해 속도와 힘을 포기합니다.


또한 FPGA는 간단한 논리적 작업을 수행하는 간단한 반복 블록을 사용하여 설계되었습니다. 특정 유형의 작업에 맞게 제작되었습니다. CPU (OTOH)는 서로 다른 일을하는 많은 복잡한 기능적 부분을 가지고 있습니다. CPU는 디바이스와 같은 다양한 FPGA로 구성된 그룹이라고 생각할 수 있습니다 (결국 실리콘, 전자 및 수학). 그것은 추상화에 관한 것이 아니라 복잡성에 관한 것입니다. CPU는 여러 유형의 전기 장치로 구성된 복잡한 장치이며 FPGA는 몇 가지로 구성됩니다. CPU는 샷건이지만 FPGA는 소총입니다.
AbstractDissonance

21

다른 답변은 모두 정확하지만 아직 아무도 귀하의 질문에서 비트 코인 채굴 예제를 다루지 않습니다. 실제로 괜찮은 예입니다. 비트 코인 채굴은 결과 해시가 특정 속성을 가질 때까지 단일 32 비트 정수만 변경되는 데이터의 암호화 해시 함수 SHA-256 또 다른 SHA-256 계산 결과의 SHA-256을 반복적으로 계산합니다. 각 SHA-256은 32 비트 추가, 비트 시프트 및 더 많은 비트 관리 작업을 포함하는 동일한 알고리즘의 64 회 반복으로 구성됩니다.

이 루프를 32 비트 (또는 그 이상) CPU에 프로그래밍하면 해당 명령 세트가 작업에 매우 적합하다는 것을 알 수 있습니다. SHA-256은 CPU에서 효율적으로 실행되도록 설계되었습니다. 여전히 캐싱, 곱셈, 나눗셈, 부동 소수점 연산, 분기 및 브 래치 예측 등과 같은 영역 집약적 기능을 갖춘 최신 CPU 실리콘 영역의 2 % 만 사용합니다. 이 특정 작업에 대한 성능 향상.

FPGA와 같은 구성 가능한 하드웨어에서는 단순히 2 % 만 구현하고 코드 실행에 대한 모든 것을 잊어 버려 더 자주 최적화하고 종종 반복되는 하위 기능 각각을 직접 계산하는 게이트를 설계합니다. 각각의 시계 사이클마다 다음에 결과를 전달하고 128 번 반복하고 (각 SHA-256이 시작하고 끝나는 특별한 추가 논리로) 파이프 라인을 만들면 매 클록 사이클마다 결과를 얻습니다. 현대의 CPU에서는 이보다 더 간단한 로직에서 300MHz를 지원하도록 광고 된 FPGA에서 초당 1 억 해시) 멀티 코어 멀티에서 초당 천만 해시와 같이 코어 당 수천 클럭 사이클마다 하나의 결과를 기대할 수 있습니다. -GHz CPU.

이 특정 예제가 당신에게 관심이 있다면 , 많은 FPGA 마이너가 맞춤형 하드웨어가 아닌 구성 가능한 것을 사용하여 동일한 방식으로 작동하기 때문에 bitcoin.stackexchange에서 ASIC 마이너의 내부에 대한 나의 관련 답변을 보고 싶을 것입니다. 완벽을 기하기 위해 : 여러 개의 독립적 인 SHA-256 해셔를 사용하여보다 간단한 병렬 처리를 선호하는 파이프 라인을 제한하거나 피하는 등의 다른 가능성이 있습니다. FPGA의 내부 및 전체 크기에 따른 제약 조건에 따라 FPGA의 구성뿐만 아니라 전체 칩을 자유롭게 디자인 할 수 있다면 게이트 수 및 라우팅 오버 헤드 측면에서는 효율성이 떨어지지 만 성능은 향상 될 수 있습니다. .


3
이는 실리콘 활용에있어 매우 좋은 점입니다.
markt

그러나 FPGA가 물리적 게이트가 많은 다소 복잡한 셀로 구성된다는 점을 고려하면 (의도하지 않게!) 오해의 소지가있을 수 있습니다. 일반적인 애플리케이션은 분수를 다시 사용하기 때문에 제조업체는 제조업체가 동일한 게이트 수를 광고 할 수 있습니다. 그것의 "일반적인"응용 프로그램에서 가치가있을 수 있습니다 ...
피라미드

3

위의 답변은 정확하지만 FPGA (및 사용자 정의 ASIC)가 비트 코인 계산에 특히 좋은 이유에 대한 요점을 놓치게됩니다.

실제 이점은 SHA-256 계산의 대부분이 배선에서 수행 할 수있는 논리 연산 (예 : 비트 시프트)이라는 것입니다. 이 방법을 수행하면 0 클럭 사이클이 필요합니다.

또 다른 중요한 장점은 FPGA가 CPU보다 전력 효율이 훨씬 뛰어나므로 (즉, 와트 당 MIPS) 계산에 필요한 에너지의 양이 훨씬 적다는 것입니다. 비트 코인 채굴 비용은 비트 코인을 만드는 데 얼마나 많은 전기를 사용 하느냐에 달려 있기 때문에 중요합니다.

ASIC 칩은 FPGA보다 에너지 효율적이므로 동일한 코드를 훨씬 저렴하게 실행할 수 있습니다. 더 많은 실행 장치를 보드에 넣을 수도 있습니다. 단점은 맞춤형 ASIC 제작 비용이 매우 높기 때문에 제조 비용을 충당하기 위해 상당히 많은 칩을 판매해야한다는 것입니다.

GPU는 비트 코인을 만드는 데에도 사용되지만 에너지 효율이 훨씬 낮기 때문에 FPGA 및 맞춤형 ASIC에 대한 기반을 잃어 가고 있습니다.


Monero 해싱 알고리즘 (일명 암호화)을 보면 랜덤하게 액세스하는 데 필요한 많은 양의 메모리 (2MB)로 인해 FPGA 구현이 거의 불가능하다는 것을 알 수 있습니다. 이 경우 CPU가 유리합니다.
lucas92
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.