FPGA out이 멀티 코어 PC를 수행 할 수 있습니까?


20

FPGA를 사용하여 알고리즘을 가속화하는 방법을 이해하지 못합니다. 현재 쿼드 코어 랩톱에서 시간이 많이 걸리는 실시간 알고리즘을 실행 중이므로 4 개의 계산을 병렬로 수행 할 수 있습니다.

최근 FPGA가 더 나은 성능을 제공 할 수 있다는 경고를 받았습니다. 나는 그것이 어떻게 작동하는지 이해하지 못한다. 누군가 FPGA가 알고리즘을 가속화하는 방법과 Xilinx 또는 Altera FPGA 솔루션으로 전환하거나 쿼드 코어 랩톱에서 계산을 계속 수행해야하는지 설명 할 수 있습니까?

추가 세부 사항 :이 알고리즘은 웨이블릿 패킷 변환을 통해 입력 된 입력을 사용하여 20 개의 인공 신경망을 실행합니다.

큰 답변을 주셔서 감사합니다.


1
데스크탑 (또는 서버) CPU에서 알고리즘을 실행하는 것을 고려 했습니까? 일반적으로 랩톱 CPU보다 빠릅니다. (일관된 요소로, 여전히 더 빠름)
— ntoskrnl

1
신경망 처리에 GPU를 사용하는 것을 고려하십시오. GPU에는 부동 소수점 숫자를 병렬로 곱할 수있는 많은 단위가 있습니다.
— Kamil

@ntoskrnl 나는 i5 이상의 CPU (4 코어)를 가지고 있다고 가정하므로 데스크톱 또는 서버의 성능은 클럭 속도에 비례합니다. 어쩌면 제온에서는 거대한 캐시와 더 나은 메모리 대역폭 덕분에 성능이 거의 (20 %?) 떨어질 수 있지만 그다지 많지는 않습니다.
— Kamil

어떤 CPU가 있습니까?
— Kamil

흥미로운 질문 타이밍, 우리는 networkengineering에 대해 비슷한 질문 을 받았습니다
— Mike Pennington

답변:


23

내 동료가 이것을 벤치마킹 했으며 FPGA에 적합한 약 100 개의 독립적 인 정수 작업을 수행 하면 FPGA가 PC보다 성능이 우수하다는 결론에 도달했습니다 . 부동 소수점 작업의 경우 GPGPU가 FPGA를 능가합니다. 좁은 멀티 스레딩 또는 SIMD 작업의 경우 CPU가 일반적으로 달성하는 것보다 훨씬 높은 클럭 속도로 CPU가 최적화되어 실행됩니다.

다른 경고 : 작업은 독립적이어야합니다. 작업간에 데이터 종속성이있는 경우 중요한 계산 경로가 제한됩니다. FPGA는 부울 평가 및 정수 수학, 하드웨어 대기 시간이 짧은 인터페이스에는 적합하지만 메모리 종속 워크로 드나 부동 소수점에는 적합하지 않습니다.

워크로드를 DRAM으로 유지해야하는 경우 프로세서가 아닌 병목 현상이 발생합니다.


3
DRAM이 한계인지 여부를 결정하려면 FPGA에 동일한 클록 사이클 동안 모두 읽고 쓸 수있는 많은 소형 분산 RAM (예 : 500 개의 독립적 인 9kbit RAM 블록)이 있어야합니다.
— 맥시

19

FPGA는 프로세서와 완전히 다르게 작동합니다.

프로세서의 경우 하드웨어에 수행 할 작업을 알려주는 소프트웨어를 작성합니다. FPGA에서는 내부적으로 "하드웨어 모양"을 설명합니다. 마치 알고리즘을 위해 특별히 만든 칩을 만드는 것과 같습니다.

이것은 많은 것들의 속도를 높이고 전력 소비를 줄일 수 있습니다. 그러나 단점이 있습니다. 개발 시간이 훨씬 오래 걸리고 훨씬 더 복잡합니다. 완전히 다른 방식으로 생각해야하며 소프트웨어에서 일관된 방식으로 작동하는 알고리즘을 사용할 수 없습니다.

인공 신경 네트워크의 경우 FPGA가 훌륭한 선택입니다. 이 분야에 대한 많은 연구가 진행되고 있습니다.


실제로 FPGA 개발은 종종 구현보다는 동작을 설명하는 Verilog 또는 VHDL과 같은 언어를 사용하여 수행됩니다. 실제로 유용하지만 때로는 비동기 순차 로직의 설계를 크게 복잡하게 만들 수 있습니다. 구현을 지정하는 경우 전파 지연은 다소 일관되지만 동작 언어에서는 긍정적 이라고 보장되지 않습니다 . FPGA 디자인의 핵심은 언어로 인해 칩의 여러 부분 (수백 또는 수천)이 간단한 동작을 동시에 수행하는 것이 매우 쉽다는 것입니다.
— supercat

13

알고리즘에 많이 의존하지만 원리는 아주 간단하게 설명 할 수 있습니다.

알고리즘이 많은 8 비트 숫자를 합산해야한다고 가정하십시오. CPU는 여전히 각 명령어를 가져오고, RAM 또는 캐시 메모리에서 피연산자를 가져오고, 합계를 실행하고, 결과를 캐시에 저장하고 다음 작업을 계속해야합니다. 파이프 라인이 도움이되지만 코어만큼 많은 동시 작업 만 실행할 수 있습니다.

FPGA를 사용하는 경우 병렬로 작동하는 수많은 단순 가산기를 구현하여 수천 개의 병렬 병렬 처리가 가능합니다. 한 번의 작업으로 시간이 더 걸릴 수 있지만 병렬 처리 수준이 매우 높습니다.

GPGPU를 사용하여 유사한 작업을 수행 할 수도 있습니다. 또한 여러 간단한 코어로 구성되어 있기 때문입니다.


GPGPU는 다음을 사용하는 신경망에 훌륭한 입력입니다!
— Botnic

신경망 ASIC도 있습니다. 인텔은 80 년대에 16 개의 뉴런을 구현 한 것을 만들었습니다.
— Lior Bilia

@ LiorBilia 잘 나는 그들에 대해 아무것도 모른다 :). 나는 신경망과 함께 일한 적이 없으며 FPGA
— 로는

@clabacchio 소프트웨어 신경망은 대부분 부동 소수점 수에 대한 연산을 곱하고 비교하는 프로그램입니다. 대체로 나는 95 % 이상을 의미합니다.
— Kamil

기존의 CPU는 많은 8 비트 숫자를 합산하는 데 아주 효과적입니다. 빠른 컴퓨터에서 실행 시간은 메모리에서 데이터를 가져 오는 비용에 의해 좌우됩니다 (코드 가져 오기의 99 %가 catch에서 발생 함). 보다 흥미로운 예는 다소 "정상적인"배열 또는 비트의 순열을 요구하는 방식을 사용하여 인코딩 된 데이터를 다루는 것입니다. 예를 들어, 비디오 샘플링 데이터가 빨강, 녹색 및 파랑에 대한 인터리브 비트를 반환하면 FPGA가 비트를 쉽게 재 배열 할 수 있습니다. 기존 CPU는 훨씬 더 많은 문제가 있습니다.
— supercat

6

컴퓨팅 장비 전문화에는 대략 3 가지 수준이 있습니다.

랩톱에서와 같이 CPU가 가장 일반적입니다. 모든 것을 할 수 있지만이 다재다능 함은 느린 속도와 높은 전력 소비의 가격으로 제공됩니다. CPU는 이동 중에 프로그래밍되며 명령은 RAM에서 나옵니다. CPU 용 프로그램은 빠르고 저렴하며 작성하기 쉽고 변경하기가 매우 쉽습니다.

FPGA (Field Programmable Gate Array)는 중간 계층입니다. 이름에서 알 수 있듯이 "현장에서"공장 외부에 프로그래밍 할 수 있습니다. FPGA는 일반적으로 한 번 프로그래밍되며,이 프로세스는 내부 구조를 설정하는 것으로 설명 할 수 있습니다. 이 프로세스가 끝나면 선택한 한 작업에 특화된 작은 컴퓨터처럼 작동합니다. 이것이 일반 CPU보다 우월한 이유입니다. FPGA 프로그래밍은 매우 어렵고 비용이 많이 들고 디버깅은 매우 어렵습니다.

ASIC (Application Specific Integrated Circuit)은 최고의 전문가입니다. 단 하나의 작업을 위해 설계되고 생산 된 칩으로, 매우 빠르고 효율적인 작업입니다. ASIC을 다시 프로그래밍 할 가능성은 없으며, 공장을 완전히 정의한 상태로두고 더 이상 필요하지 않은 경우 쓸모가 없습니다. ASIC을 설계하는 것은 대기업 만이 감당할 수있는 일이며 디버깅은 거의 불가능합니다.

"코어"로 생각하면 다음과 같이보십시오. CPU는 4, 6, 8 개의 큰 코어로 모든 것을 수행 할 수 있습니다. ASICS는 종종 수천 개의 코어를 가지고 있지만 매우 작은 코어를 가지고 있으며 한 가지만 가능합니다.

비트 코인 채굴 커뮤니티를 볼 수 있습니다. 그들은 SHA256 해시를 수행합니다.

  • CPU 코어 i7 : 0.8-1.5M 해시 / 초
  • FPGA : 5-300M 해시 / 초
  • ASIC : 소형 칩 1 개당 12000M 해시 / 초, 160- 칩 장치 1 개당 2000000M (예, 2T) 해시 / 초

물론, ASIC 아기는 대량 생산시 거의 2000 달러가 들지만, 모든 거래가 전문가에게 어떻게 대처할 수 있는지에 대한 아이디어를 제공합니다.

유일한 질문은 FPGA가 비용보다 더 많은 비용을 절감 할 수 있는가하는 것입니다. 물론 하나의 랩톱에서 실행하는 대신 20 PC에서 실행할 수 있습니다.


해싱은 매우 특별한 경우입니다. 암호화 기반 코인은 특수 하드웨어에 의해 (고의적으로) 매우 가속화 할 수 없습니다.
— pjc50

1
& ASIC 디버깅은 일반적으로 제조에 선적하기 전에 시뮬레이션에서 처리됩니다. 따라서 일반적으로 사양에서 제조까지 6 개월 이상이 소요됩니다. 제조 후 버그 진단은 비싸지 만 불가능하지는 않습니다.
— pjc50

그리고 어렵지만 실제로는 매우 어려울 수 있지만 경계 스캔, JTAG 테스트 및 FIB 등을 사용한 직접 기술과 같은 것들이 있습니다. 따라서 디버깅이 불가능하지는 않습니다. . 이제 ASIC은 대부분의 장치가 ARM 프로세서와 같은 것을 포함하여 ASIC이므로 실제 장치를 나타내는 설계 흐름 (HDL, Synthesis, P & R)을 의미합니다.
— 플레이스 홀더

@ pjc50 그래, 그건 내 요점 이었어. 특별한 경우에는 속도 차이가 엄청나 다. 그러나 암호화 asics는 여전히 CPU와 GPU를 설치합니다. sha의 경우와 같이 백만
— 배가

@placeholder 네,하지만 버그를 발견하더라도 이미 제조 된 모든 칩에는 그다지 유용하지 않습니다. 나는 단지 "여기있는 것"이 ​​아니라 "버그 제거"에서와 같이 "파괴"를 의미했다.
— Agent_L

5

예. 특정 작업에서 FPGA가 Intel i7과 같은 최신 CPU보다 성능이 우수하지만 신경망 성능을 향상시키는보다 쉽고 저렴한 방법이 있습니다.

저렴하게-FPGA IC 비용이 아니라 FPGA (신경망에 필요함) 및 전체 개발 프로세스를위한 매우 빠른 메모리를위한 총 노력을 의미합니다.

  1. SSE 사용 -2-3 배 더 나은 성능으로 아주 간단한 신경망 구현을 보았습니다. 랩톱에 전용 GPU가없는 경우 좋은 아이디어입니다.

    Vincent Vanhoucke와 Andrew Senior가 CPU에서 신경망의 속도 향상

  2. 사용 GPGPU (처리 장치 그래픽에 범용 컴퓨팅) - 당신이 지포스 730M과 같은 중간 수준의 노트북 GPU에 100-200x 성능 향상을 archieve 수 있다고 생각합니다.

    다음은 신경망 구현 (및 무료 코드)입니다. Nvidia CUDA를 사용합니다.

    GPGPU 접근 방식은 어느 시점에서 더 많은 컴퓨팅 성능이 필요하다는 것을 알고 있다면 확장 성이 뛰어납니다. 더 강력한 GPU가 장착 된 데스크탑 컴퓨터 나 4992 코어가 장착 된 Nvidia Tesla K80 (비싸다) 만 사용하면됩니다.


1
여기서 문제는 성능을 정의하는 것입니다. 우리가 더 빠른 것을 의미한다면, fpga는 일반적인 CPU보다 빠를 수 있습니다. 그러나 fpga는 CPU만큼 유연하지 않으며 미리 정의 된 작업 만 효율적으로 실행하도록 설계되었습니다. 다른 작업을 실행하면 내부 배선이 실제로 다른 FPGA를 구현 변경 의미
— 지안루카 Ghettini
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.