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.