아이디어!2017. 12. 14. 10:16

얼마전 읽은 비트코인 관련 분석글 링크는 없는데..

요약만 하자면

CPU -> GPU -> FPGA -> ASIC 의 순서로 채굴이 변화되며

앞 세대는 뒷세대가 나오면 처참하게 버려진다.

하지만 뒷 세대가 나오지 않으면 블럭체인 기반의 가상 통화들은 활력을 얻지 못한다. 


인데. 직설적으로 표현하면

결국 돈 놓고 돈 먹기라는 의미이다. ASIC을 찍어내기 위해서는 자본이 무지막지하게 들고

GPU도 결코 싼건 아니라 초기 투자비 + 유지비를 무시 못하는 편이고

아무튼 차세대 블럭체인들은 하드웨어 로직을 막으려는 경향이 있다고 하는데

그게 수명을 늘려줄지, 오히려 단축시킬지는 고민해 봐야할 문제라고 보여진다.

다만 그러한 보호 수단이 얼마나 갈지 미지수고

(SW로 작성 가능한 로직이라면 효율의 문제지

결국에는 VHDL로 하드웨어 작성이 가능하고 그럼 ASIC은 결국 나올수 밖에 없다)

그러한 폐쇄성이 표준화나 보급에 독이된 VHS와 BETA 방식의 싸움으로 나아가게 되지 않을까 생각된다.




머 근데 정말 하고 싶은 이야기는 비트코인이 아니고

이런 발전사를 보건데..

저~~~얼대 내가 관심이 가서 하는 말은 아니지만

이제 GP-GPU의 시대는 끝났다! FPGA의 시대가 왔다! 아닐까 한다.


여전히 SW 개발자들은 Java가 좋니 C/C++/C# 등이 좋니 싸우는데

파이썬도 좋아요 하면 너 이단이다! (응?) 라던가 API는 언어가 아니에요~ 라던가 하지만

결국 시대의 흐름을 보건대, SW개발자는 언넝 짐싸들고 VHDL/Verilog를 배워야 하지 않을까 생각 된다.


CPU의 역사는, 매번 배선을 바꾸어야만 작업을 할 수 있는 hard wired progam의 불편함에서

데이터만 바꿔 씀으로서 다른 작동을 할 수 있는

일종의 "데이터 엔진(혹은 게임엔진)" 으로서의 범용 프로세서로 발전 되었고

이러한 범용성은 역설적으로 개발자의 역량에 결과가 달리고

보이지 않는 로직과 디버깅 되지 않는 문제로 인한 유지보수비용이라는 짐을 만들어 냈다.


물론 VHDL도 하드웨어 로직도 intel cpu 버그 처럼 사람이 만드는 것이라 버그가 없을 순 없지만

머리속에서 떠다니는 로직보다는 눈으로 보이는 로직으로서 훨신 수월한 디버깅 수단들이 있으니

상대적으로 소규모의 성능 집약적인 방향으로 나아갈 수 있지 않을까 한다.


극단적이지만

OS와 업데이트와 같이 CPU 아키텍쳐를 바꾸어 버리면

범용 컴퓨터가 아닌 임베디드 시스템으로서 소프트웨어 업데이트를 통해

OS와 같이 더욱 효율적인 SW 알고리즘과 HW 아키텍쳐를 발전시키고

더 나아가서 AI와 접목하여 중앙 서버에서 AI의 학습을 통해 

자기 스스로 SW 알고리즘과 HW 아키텍쳐를 발전시켜 나가는 시대가 오지 않을까 한다.


물론 아직까진 허황된 생각이고

그정도 규모를 구현할 FPGA라면 가격도 어마어마 할테지만

규모의 경제 관점과(일단 intel이 altera를 먹었으니), 공정 미세화, 그리고 AI의 발전속도를 고려해보건대

그리 멀지 않은 시점에 프로그래밍 언어는 HDL과 MCU를 위한 C와 비슷한 등급의 상위 언어 정도로

통일되지 않을까?



+

발상의 시작은 microblaze 와 nios 2

SW CPU의 존재와 intel의 FPGA 업체 인수. 

그리고 cyclone V(altera/intel)과 zynq(xilinx)와 같은 하드웨어 ARM 코어를 내장한 FPGA 로직의 출현.

그에 따른 빅데이터/기계학습.

자기 성장형 로직에 따른 AI 발전.


+

아직까진 FPGA가 로직을 바꾸려면 느린속도로 외부 SPI FLASH에 쓰고

(왜 느린지 이해가 안됨, SPI FLASH 원래 write 속도에 비하면 백만광년쯤 느린 느낌, JTAG 문제였나?) 

리부팅을 해야 하지만, 나중에 되면 FPGA 내부에 쿼드코어 식으로 구획을 나누어서

순환식으로 데이터 바꿔쓰고 부분 리셋걸어 재시작 없이 구현이 가능해진다면

서버제품군이나 사업현장에서도 충분해지지 않을까 한다.

물론 아키텍쳐 변경시에는 SW와 같이 변경이 되어야 하지만, 

하위호환성을 포기 하지 않고 약간의 오버헤드를 감수하면

몇번의 과정을 거쳐 순환적으로 재시작하면서 아키텍쳐와 SW 알고리즘을 갈아 엎어버리는 식으로

더 높은 성능을 꾀할수 있지 않을까?

또한, FPGA 구획을 나누어서 현재 어플리케이션이 필요한 대로 SPI FLASH가 아닌 DDR4 메모리 등으로 연결되서

현재 CPU 처럼 메모리에 프로그램이 아닌 하드웨어 로직은 탑재 후 부분 리셋을 통해

멀티태스킹에도 대응하여, 제한된 로직을 실시간 변경으로 대응하는 방법도 가능할 것으로 보인다.


+

FLASH 대신 DRAM의 이용은 궁극적으로 C와 VHDL의 경계를 허물고

어떤 의미로는 안드로이드에서 ios의 변환처럼

중간 언어를 통해 번역되던 오버헤드를 없애고

native 하게 돌리는 수준으로 하드웨어 자체를 SW화 시키면서

더욱 더 고성능의 저전력 시스템으로 나아갈수 있을 것으로 생각된다.

(여기서 DRAM의 이용은 configuration memory으로서의 사용임)


+적다 보니 궁극적으로는.. VHDL을 빌드할 수 있는 하드웨어가 존재해야 하거나,

내장된 ARM 코어나 x86 코어가 아주 빠르게 소규모의 fpga를 빌드할 수 있어야 할 것으로 보인다.

그러고 보니.. 굳이 FPGA에 ARM 코어 내장할 이유가 없네.. x86이면 머 어때 빌드할만큼의 성능만 나오면 되지?

그게 아니라면 fpga에 멀티코어를 구현해서 하나는 반드시 특정 아키텍쳐로 고정후 이녀석도 나중에

업데이트를 통해 발전시켜 나가면 어떨까 싶기도 하지만..


+

순환 리셋을 고려하다 보니. 필수적으로

CPU hot plug가 선결 조건인듯. 런타임에 cpu를 끊고 연결하고 스케쥴러에 연동해서 실시간으로 작동시키는..

(물론 리눅스나 윈도우 서버군에서는 제공은 될텐데.. runtime hot plug가 될진 찾아 봐야겠네)

생각해보니.. IDC에서도 cpu는 쿨러 문제로 핫 플러그 지원한다고 한들 슬롯 타입으로 된 CPU가 존재하지 않으니

(예전의 slot 1같은거 말고) 새로운 하드웨어와 그에 따른 운영방법이 생겨나야 할 것으로 보인다.

아무튼 기술 자체는 새로울것도 없는 현재 존재하는 기술이나 중요도가 달라질 뿐?

Posted by 구차니