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

CPU가 일반적으로 (클럭 속도 측면에서) 적어도 10 배 더 빠르게 실행되는 경우 FPGA가 성능면에서 CPU와 어떻게 경쟁 할 수 있습니까?

댓글

  • FPGA는 모든 것을 한 번에 처리합니다.

답변

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

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

위를 염두에두면 FPGA는 특정 작업을 수행하는 CPU를 능가 할 수 있습니다. 전체 클럭 속도는 더 낮지 만 더 적은 클럭 틱으로 동일한 작업을 수행합니다. 달성 할 수있는 이득은 알고리즘에 따라 크게 달라 지지만 FFT와 같은 경우 적어도 10 배 이상은 비정형이 아닙니다.

더욱이 여러 병렬 실행 장치를 FPGA에 구축 할 수 있기 때문에 동일한 알고리즘을 통해 전달하려는 대용량 데이터가있는 경우 데이터를 병렬 실행 단위에 분산하고 멀티 코어 CPU로 달성 할 수있는 것보다 훨씬 더 많은 처리량을 얻을 수 있습니다.

장점에 대한 비용은 전력 소비와 $$$ “입니다.

댓글

  • +1, 그러나 FPGA는 CPU만큼 동적이 아니기 때문에 CPU가 일반적으로 PC에 더 적합합니다.
  • ” 장점에 대해 지불하는 가격은 전력 소비와 $$$입니다. ‘ s. “-이것은 종종 사실이지만, 1000 달러짜리 하이 엔드 Intel Xeon 시스템을 저가형 $ 50 Xilinx Spartan-6 많은 알고리즘. 그러나 일반적으로 엔지니어링 시간이 많이 걸리고 하나의 응용 프로그램에서만 작동하고 변경하기 어려운 매우 맞춤형 설계로 끝날 수 있습니다. 따라서 트레이드 오프는 전력과 비용뿐만 아니라 알고리즘 개발 시간, 재사용 성 및 유연성입니다. (시간 == 돈에 대해 논할 수는 있지만)
  • 마지막 문장에 대해 markt는 FPGA가 CPU보다 훨씬 낮은 전력을 ‘ 아닙니까? CPU와 FPGA를위한 다양한 장치가 있지만 비트 코인 채굴에 사용되는 장치를 살펴보면 ‘이 장치에 사용되는 CPU가 아닙니다. 사용되는 FPGA보다 훨씬 더 많은 전력을 필요로하는 작업입니까?
  • @David : 비트 코인 채굴에 대해 이야기 할 때 관련 메트릭은 와트 당 해시 수입니다. Markt는 전체 전력 소비에 대해 이야기하고 있습니다. 즉, 특정 FPGA는 일반적인 CPU의 3 배 전력을 소비 할 수 있지만 비트 코인 채굴에서는 3 배 이상 빠릅니다. 비트 코인의 경우 ‘ 승리입니다.
  • @Billy : 와트 당 해시 수 · 초 와트 당.

답변

Markt는이 부분이 거의 맞습니다. 여기에 cents :

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을보다 전력 효율적으로 만드는 이점이 있습니다!

평행 성은 다른 부분입니다. 이 역시 중요하지만, 가장 중요한 것은 FPGA가 연산을 수행하는 데 필요한 사이클 측면에서 CPU에서 이미 비싼 것을 병렬화 할 때입니다. “10 FPGA 사이클에서 수행 할 수 있습니다. CPU 100,000주기를 소요하는 작업이며 한 번에 4 개 항목을 병렬로 수행 할 수 있습니다. “라고하면 FPGA가 CPU보다 훨씬 빠른 이유를 쉽게 알 수 있습니다.

그래서 모든 것에 FPGA, CPLD 및 ASIC를 사용하지 않는 이유는 무엇입니까? 일반적으로 하나의 작업 만 수행하는 전체 칩이기 때문입니다. 즉, FPGA / ASIC에서 훨씬 더 빠르게 프로세스를 실행할 수 있지만 해당 작업이 더 이상 유용하지 않을 때 나중에 변경할 수 없습니다. FPGA를 한 번 변경할 수없는 이유 (일반적으로) 회로에는 인터페이스의 배선이 고정되어 있으며 일반적으로 회로에는 FPGA를보다 유용한 구성으로 다시 생성 할 수있는 구성 요소가 포함되어 있지 않습니다. FPGA처럼 재배 선 / 재 프로그래밍 할 수있는 CPU 섹션이있는 하이브리드 FPGA-CPU 모듈을 구축하려는 일부 연구원이 있습니다. CPU의 유효 섹션을 “로드”할 수 있지만 이들 중 어느 것도 (내가 아는 한) 시장에 출시 한 적이 있습니다.

설명

  • 비트 반전의 예 (및 기타 모든 비트 스왑 / 선택 작업) ‘ 실제로 1 클럭주기가 걸리지 않고 0이 걸립니다. 귀하의 예에서 래치에 데이터를 저장

하려면 1 클럭주기가 필요합니다. i>는 동일한 작업이 아닙니다. 비트 반전 여부에 관계없이 1 클럭 사이클이 걸립니다. 비트 반전 작업은 0 클럭 사이클입니다. 오버 헤드가없고 라우팅 만 다릅니다. 차이점은 의미론뿐 아니라 특히 다음과 같은 경우 예를 들어, 32 비트 워드를 3 비트 아래로 이동 한 다음 다른 니블을 모두 교체 한 다음 되 돌리는 데 얼마나 걸립니까?

  • ” 하이브리드 FPGA-CP U 모듈 “-이들은 오랫동안 시장에 나와 있습니다 ( xilinx.com/products/silicon-devices/ 참조). soc / zynq-7000 / index.htm ), 특별한 지원 없이도 소프트웨어 & HDL은 일반적으로 내부에 소프트 CPU를 구현하여 수행됩니다. 패브릭의 FPGA.
  • @wjl ‘ 기술적으로 작업 자체를 수행하는 데주기가 필요하지 않다는 것이 맞습니다. 나는 당신의 예제가 의미 론적으로 만 다르다고 주장 할 것입니다. 대부분이 세 가지 작업을 논리적으로 고정 비트 패턴으로 변환하기 때문입니다 (즉, b1b2b3b4로 시작하고 b3b1b4b2로 끝남). 이것은 전체 답변에서 내 요점이었습니다. 작업을 일련의 단계로 설명하는 것은 고정 된 명령 세트 / 게이트 배열이있을 때만 필요한 경우가 많다는 점을 지적하려고했습니다.
  • @wjl : david-gardner가 질문을 한 방식입니다. ” CPU “는 Intel 또는 AMD x86 / x86_64 클럭킹, 파이프 라인 및 최적화 된 CPU와 동일하다고 말하는 것 같습니다. 많은 소프트 ” CPU “가 있지만 FPGA에 배치하도록 설계된 것은 i7처럼 클럭킹 할 수 없습니다. 거의 최적화되거나 능력이 있습니다. 하이브리드에 관해서는 다음과 같은 의미가 더 있습니다. newsroom.intel.com/docs/DOC-1512 분명히 존재하는 것
  • Zynq는 정말 ‘ 프로세서 (ARM Cortex-A9-태블릿 컴퓨터를 실행하는 것과 동일한 것 등)가 너무 나쁘지는 않지만 사용하는 것이 훨씬 더 멋질 것이라는 데 동의합니다. 고속 x86_64의 통합 FPGA =)
  • Answer

    여기에 제시된 다른 모든 인기있는 답변은 FPGA와 CPU 간의 문자 적 차이점에 대해 설명합니다. 그들은 FPGA의 병렬 특성과 CPU의 순차적 특성을 지적하거나 특정 알고리즘이 FPGA에서 잘 작동하는 이유에 대한 예를 제공합니다. 모두 훌륭하고 사실이지만, CPU와 FPGA 사이에 더 근본적인 차이가 있다고 제안합니다.

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

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

    실리콘을 작동하는 CPU로 바꾸려면 무엇이 필요한지 고려하십시오. 다음은 그 목표에 필요한 추상화 계층에 대한 다소 단순화 된보기입니다.

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

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

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

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

    그리고 여기서 멈추지 않습니다. 이 시점에서 우리는 어셈블리 코드를 실행하는 작동하는 CPU를 가지고 있지만 오늘날 대부분의 프로그래머가 작성하는 언어는 아닙니다.

    1. 어셈블리로 컴파일하는 C 컴파일러가있을 수 있습니다. 코드 (아마 중간 표현을 통해)
    2. 객체 지향 언어를 얻기 위해 C 위에 또 다른 추상화를 추가 할 수 있습니다.
    3. 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는 소총입니다.

    답변

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

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

    FPGA와 같은 구성 가능한 하드웨어에서는 단순히 2 % 만 구현하고 코드 실행에 대한 모든 것을 잊음으로써 추가로 최적화합니다. 각각이 결과를 다음 모든 클럭 사이클로 전달하고 128 번 반복되도록 파이프 라인을 연결하면 (그리고 각 SHA-256이 시작되고 끝나는 특별한 추가 논리를 사용하여) 결과를 얻을 수 있습니다. 클럭 사이클 (이보다 간단한 로직에서 300MHz를 지원하도록 광고 된 FPGA에서 초당 1 억 해시)에 대한 반면 최신 CPU에서는 코어 당 수천 클럭 사이클마다 하나의 결과를 기대할 수 있습니다 (예 : 초당 천만 해시) 다중 코어 다중 GHz CPU에서.

    이 특정 예가 관심이 있다면 관련 를 살펴 보시기 바랍니다. 많은 FPGA 채굴자가 맞춤형 하드웨어가 아닌 구성 가능한 하드웨어를 사용하여 동일한 방식으로 작동하기 때문에 bitcoin.stackexchange의 ASIC 채굴 기 내부에 대한 답변 . 완전성을 위해서 “를 위해서 : 여러 개의 독립적 인 SHA-256 해시를 사용하여보다 사소한 병렬화를 위해 내가 설명한 파이프 라이닝을 제한하거나 피하는 것과 같은 다른 가능성이 있습니다. FPGA의 내부 및 전체 크기에 의해 주어진 제약 조건에 따라 다릅니다. , FPGA 구성뿐만 아니라 전체 칩을 완벽하게 설계 할 수 있다면 게이트 수 및 라우팅 오버 헤드 측면에서 덜 효율적이지만 더 나은 성능을 제공 할 수 있습니다.

    댓글

    댓글

    • ‘ 실리콘 활용에 대한 매우 좋은 점입니다.
    • 하지만 (의도하지 않은!) 오해의 소지가있을 수 있습니다. FPGA가 많은 물리적 게이트가있는 다소 복잡한 셀로 구성되어 있다는 점을 고려하면 일반적인 응용 프로그램은 다시 분수 만 사용하므로 제조업체가 해당 게이트 수를 광고하여이 모든 것이 얼마나 가치가 있는지 알려줄 수 있습니다. div id = “8675ac3c8a”>

    일반 ” 애플리케이션 …

    답변

    위의 답변은 정확하지만 요점을 놓쳤습니다. FPGA (및 맞춤형 ASIC)가 비트 코인 계산에 특히 좋은 이유

    실제 이점은 SHA-256 계산의 상당 부분이 논리적 연산 (예 : 비트 시프트)이라는 점입니다. 배선. 이렇게하면 0 클럭 사이클이 필요합니다.

    또 다른 중요한 이점은 FPGA가 CPU보다 전력 효율이 훨씬 높기 때문에 (와트 당 MIPS) 계산에 필요한 에너지의 양이 훨씬 많다는 것입니다. 적게. 이는 비트 코인 채굴 비용이이를 만드는 데 사용하는 전기량에 따라 다르기 때문에 중요합니다.

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

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

    댓글

    • Monero 해싱 알고리즘 (일명 cryptonight)을 살펴보면 FPGA 구현이 많은 양으로 인해 거의 불가능에 가깝다는 것을 알 수 있습니다. 무작위로 액세스해야하는 메모리 (2MB) 이 경우 CPU가 장점이 있습니다.
    • @ lucas92 필요한 메모리 양을 수용하기 위해 RAM을 FPGA에 통합 할 수 없습니까?
    • 당신은 아마 이겼을 것입니다 ‘ FPGA에 논리 요소가 충분하지 않습니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다