강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Junghwan Goh님의 프로필 이미지
Junghwan Goh

작성한 질문수

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

[FPGA 22장] 프로젝트 Fully Connected Layer 설계 - 실습편

node, weight 값 관련

작성

·

256

1

안녕하세요 맛비님.

강의를 보고 다른 방법으로 응용해 보려 하니 궁금한 점이 있어 질문드립니다.

현재 node의 값과 weight의 값들을 모두 c언어의 랜덤값을 사용하여 지정해 주었는데요,

이렇게 생긴 node의 값과 weight의 값은 어디에 저장이 되나요?(DDR 아님 Cache, On-Chip메모리 중 하나인 것 같긴 한데...)

그리고 랜덤한 값이 아닌 제가 원하는 값을 가져와서 계산하고 싶은데 그럼 C 코드에 다 적어넣어야 하나요? 

아님 외부 파일(예를 들면 txt파일 등)을 읽어 오게 되면 외부 파일을 어디에 저장해서 어떠한 방법으로 읽어와야 하나요?

사실 일반 데스크탑에서 위와 같은 질문들은 쉽게 해결이 되지만, FPGA이기에 고려해야 할 사항들이 있나 궁금해서 여쭤봅니다.

답변 1

0

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 :)

이렇게 생긴 node의 값과 weight의 값은 어디에 저장이 되나요?(DDR 아님 Cache, On-Chip메모리 중 하나인 것 같긴 한데...)

상황에 따라 다르겠지만, 적어주신 곳으로 저장합니다 :)  (설계자의 마음대로라는 뜻입니다.)

그리고 랜덤한 값이 아닌 제가 원하는 값을 가져와서 계산하고 싶은데 그럼 C 코드에 다 적어넣어야 하나요? 

C code 에 값을 전부 적는다면, 메모리의 Text 영역이 너무 커져서 큰 네트워크라면 문제가 될 수 있구요. (작은 시스템은 가능하겠죠)

아님 외부 파일(예를 들면 txt파일 등)을 읽어 오게 되면 외부 파일을 어디에 저장해서 어떠한 방법으로 읽어와야 하나요?

네, 외부파일을 읽어오는 방법으로 하셔야 합니다. Zybo board 를 예로 들면 sd card slot 이 존재하구요. sd card 에 파일을 미리 Write 해 놓으시고 Code 에서 읽는 것이 옳아 보입니다. 이렇게 하면 DDR 에 우선 올라가 있겠네요. 이더넷도 존재하니까, 끌어오셔도 되고, 방법은 정말 많습니다.

이전에 Test 해봤는데, 지금은 될지 모르겠... 참고삼아보세요. Test 할 시간이 잘 안나네요 ㅠ

https://m.blog.naver.com/chacagea/221445540591

사실 일반 데스크탑에서 위와 같은 질문들은 쉽게 해결이 되지만, FPGA이기에 고려해야 할 사항들이 있나 궁금해서 여쭤봅니다.

HW 가 불편하죠..? 손이 많이 갑니다 ㅠ 고려사항은 많구요. 방법도 많습니다. 적어드린건 일 예일 뿐이에요. 설계자의 역량이 이래서 중요합니다 :)

즐공하세요 :)

덧붙여서 질문이 있습니다.

만약 sd card에서 ddr로 옮긴 데이터 크기가 1GB 정도라 하였을 때 (zybo 보드는 이정도 크기의 DDR3L 이 있다고 하네요...),  이 데이터를 zybo 보드의 PL 영역에 쓰고자 할 때는 zybo board의 bram에 옮겨 저장하게 될텐데 zybo의 bram 크기는 630KB 밖에 되지 않습니다.

 

이럴 때는 support되는 bram이 큰 다른 보드로 갈아타는 방법 외에는 해결방법이 따로는 없을까요?

딱 630KB의 크기의 데이터만 bram으로 옮기고 사용한 후 지우고 다시 630KB의 옮기는 방법을 생각 할 수 있겠지만, 만약 1GB의 데이터가 동시에 필요하다고 한다면 방금 언급한 방법도 사용할 수 없기 때문에.... 

 

생각보다 zybo bram이 정말 작네요 ㅠ

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 :)

DDR 은 External Memory 로 Giga 단위이구요. (off chip memory)

BRAM 은 컴구조에서 배우시는 cache 입니다. (on chip memory)

이 두개를 파악하셔서 설계하셔야 합니다.

즉, DDR 에 있는 Data 를 Cache 에 로딩하고, 연산하고 DDR 에 옮기는 작업이 필요하다 입니다. (CPU, GPU 전부 이 원리로 동작합니다.)

 

다음은 구글의 TPU Architecture 입니다.

Unified Buffer (on chip) 의 크기를 보시면, 24 MiB 입니다. (Giga 가 아닙니다.)

그리고 외부 (off chip) DDR 에 Access 하고 있구요.

Google TPU High Level Architecture - ServeTheHome

Architecture (설계자의 역량) 가 이래서... 굉장히 중요합니다.

630 KB 가 부족하다 하시면 High-end 로 가셔야겠죠?

고민해보세요. 즐공입니다 :)

Junghwan Goh님의 프로필 이미지
Junghwan Goh

작성한 질문수

질문하기