2017의 게시물 표시

요즘 하고 있는 것들

얼마전에 힘들었던 학기가 끝나고 성적이 하나 둘 씩 나오고 있을 즈음이네... 올 A+ 받고 싶었는데 몇과목이 기대만큼 나오지 않아서 아쉽다. 관정 장학금은 받기 힘들듯 싶다... 가고 싶던 랩에 컨텍이 되서 1월 4일부터 연구실에 출근하기로 했다. (HPCS lab) 그 사이에 나는 코인 초단타 거래 프로그램을 만들고 있다. Node.js로 프로그램을 만들고 있는데, 1년동안 와플스튜디오에서 Node.js를 쓰면서 배웠던 것들보다 3일간 혼자 코딩을 하면서 배운것들이 훨씬 많은 것 같다. 무엇보다도 Node.js의 asynchronous하다는 점을 온몸으로 깨닫고 있다. javascript의 폭넓은 함수들을 쓸 수 있다는 장점이 있지만 (특히 JSON.parse함수는 아주 놀랍다), 당연히 sync하게 돌아갈거라고 생각했던 코드들이 async하게 돌면서 콜백 함수를 사용할 수 밖에 없고 코드를 짜면 돌긴 돌지만 콜백헬을 맛볼 수 있었다.(코드가 아름답지가 않아!!) 그래서 최근엔 'async'라는 모듈을 다운받아 굉장히 유용하게 쓰고 있다. 앞으로 생활에 바라는 점이 있다면, 1) 내가 지금 만드는 코인 초단타 거래 프로그램이 내게 많은 돈을 벌어다 주는 것과, 2) 연구실 사람들과 잘 지냈으면 하는 것, 3) 앞으로 5년동안 연구실에서 좋은 성과를 내는 것, ... 이정도가 아닐까 싶다.

삼성전자 DS 견학을 다녀오고

이미지
어제 (2017.08.23) 삼성전자에서 대학생들에게 오픈캠퍼스를 열어줘서 삼성전자 화성사업장에 다녀왔다. 우리과에선 기승전삼성 (뭘 하든 결국은 삼성으로 간다) 이라는 말이 있을 정도로 대부분의 졸업생들이 삼성전자로 취직을 하고, 나 또한 '대학원이나 스타트업에 가지 않는다면 삼성전자에 취직하겠지' 라고 마냥 생각하고 있던 지라 이번 오픈캠퍼스는 굉장히 좋은 기회라는 생각이 들어서 방문하게 되었다. 9:30 ~ 10:30까지는 IoT사업부의 상무가 삼성전자 DS가 뭘하는 사업부인지, 그리고 왜 소프트웨어 개발 인력이 필요한지 발표했고, 10:30 ~ 12:30까지는 실제 각 부서 실무진과 만나 부서에 대한 간단한 설명을 듣고 Q&A 시간을 가졌으며, 12:30 ~ 1:30까지는 삼성전자 엔지니어들과 밥을 먹고, 1:30 ~ 4:00까지는 'AI 육목대회'를 구경하는 시간을 가졌다. 나는 이번 행사를 통해 크게 3가지 생각을 한 것 같다. 1. 지금 이 시점에 있어서 컴테크는 최고의 선택이다. 우리과에는 다양한 세부전공이 있고 이를 각각 ~테크라고 한다. 예전부터 핫했고 지금까지도 가장 핫한 테크는 회로테크(회로설계), 반도체테크(소자)이고, 컴테크(컴퓨터)는 그동안 많이 저평가 받았고, 옛날의 인식 때문인지 요즘도 많이 꺼려하는 테크트리다. (이 외에도 전력테크, 제어테크, 신호테크, 통신테크, 바이오테크 등이 있다) 회로테크와 반도체테크는 졸업후 삼성전자나 하이닉스, 혹은 (아주 잘되면) 인텔에서 하드웨어 엔지니어로 일하면서 굉장히 안정적으로 돈을 많이 번다. 주로 PSPICE를 쓴다고 하는데, 오늘 가서 느낀 점은, 컴테크를 밟은 전기과 학생들이 삼성전자나 하이닉스에 가면 C/C++, Verilog를 쓴다는 점 말고는 회로, 소자를 공부한 하드웨어 엔지니어와 전혀 다를게 없다는 점이었다. C/C++, Verilog를 쓸 뿐, 하드웨어에 대한 깊은 이해가 필요하다는...

왜 사람들은 다들 자기 얘기만 하고싶어 할까?

얼마 전에 학교 기숙사에서 아는 형을 만났다. 별로 친한 사이는 아니고, 그냥 같은 과여서 가끔 인사나 하는? 원래 밥을 먹기로 했어서 이왕 본 김에 밥을 먹기로 했다. 나이는 30 정도 되는데 자기 말이 참 많은 사람이었다. 내가 말하면 중간에 끼어들어 자기 말을 하고, 그렇다고 말이 재미있는건 아니고 되게 듣는 시간이 아까운 시간이 되게 만드는 그런 말을 하는 사람이다. 말을 굉장히 장황하게 하는데 알맹이가 없다랄까? 그러면서도 자긴 말을 굉장히 잘한다고 착각하고 있었고, 그 사람은 내가 말을 굉장히 못한다고 말하고 있었다. 내가 말을 하면 그 사람은 내 말이 이해가 안간다며 "그렇게 간단한 말을 그렇게 제대로 말 못하기가 쉽지 않은데"라고 얘기하는데 굉장히 기분이 나빴다. 9시 쯤에 만나서 2시간 쯤 얘길 듣는데 머리가 아파오기 시작했다. 내 생각엔 2시간 동안 나는 5분정도 얘기했던 것 같다. 내가 호구인건지 뭔진 모르겠지만 굉장히 아까운 시간이었다. 문득 이런 생각이 들었다. "저 사람은 왜 저렇게 쓸대 없는 말을 많이 할까?" 그냥 25살의 민동문의 생각이지만, 내 생각은 이렇다. 저 사람은 남에게 대단한 사람처럼 보이기를 바란다. 하지만 실제로는 가진게 없는 앙상한 사람이다. 그렇지만 다른 사람들이 자기를 멋진 사람으로 봐주길 바란다. 그래서 쓸대없는 말을 계속하고, 있어보이는 척 하고, 다른 사람을 비하한다. 저런 사람을 만나면 나는 어떻게 행동해야할까? 저 사람을 위해 저 얘길 들어줘야할까? 아니면 내 정신건강을 위해 저 사람과 대화를 끊고 내 갈 길을 가야할까? 나를 가장 사랑하는 사람은 이 세상에 나 하나 뿐이다. 가족들도, 친구들도, 여자친구도 날 사랑하지만 이 세상에 날 가장 사랑하는 사람은 나 자신이다. 아무리 나와 다른 의견을 갖고 있는 사람이어도 그가 나를 존중하고 예의를 갖춘다면 나는 그의 말을 귀담아 들을 것이다. ...

논문요약: TrueNorth: Design and Tool Flow of a 65mW 1Million Neuron Programmable Neurosynaptic Chip

이미지
Summary TrueNorth Architecture 는 뇌의 구조를 따서 만든 아키텍처로 칩 하나에 64*64 개의 코어가 들어가고 코어 하나에 256 개의 뉴런이 256 개의 axon 과 64K 개의 시냅스를 형성하는 구조로 이루어져 있다 . 하나의 코어는 외부에서 들어온 spike 를 받고 코어에서 만든 spike 를 내보내는 router 와 , 외부에서 온 spike 를 저장해두고 정해진 타이밍에 발현시키는 scheduler, 뉴런의 상태 (potential, synaptic connectivity, weight value, leak value, threshold value 등 ) 를 저장하는 core SRAM, input spike 에 따른 potential 을 계산하는 Neuron block, 그리고 모든 block 을 제어하는 token controller 로 구성되어 있다 . Router 를 통해 외부 , 혹은 같은 코어에서 spike 가 들어오게 되면 spike 를 scheduler 가 저장해둔다 . 모든 코어에는 synchronization 을 위해 1KHz 의 low frequency clock 이 들어가는데 , tick 이 코어에 들어오면 Token Controller 는 해당 tick 에 활성화할 spike 를 scheduler 로부터 받아온다 . Token Controller 는 뉴런 하나하나의 synaptic connectivity 정보를 가져와서 connection 이 있는 axon 으로부터 spike 가 전달되었나 확인한다 . 뉴런과 connection 이 있는 axon 으로부터 spike 가 전달되었다면 그 뉴런의 potential 은 spike 로 인해 변해야 하므로 Token Controller 는 Neuron block 에게 high frequency clock signal 을 줘서 potential 을 계산한다 . 계산된 potential 은 Core SRAM 에 저장하는 한편 ,...

논문요약: The Microarchitecture of Superscalar Processors

이미지
마이크로 아키텍처 설계에서 고려해야할 점 binary compatibility: 같은 아키텍처를 사용해서 이전 제품과 호환이 되야 한다 sequential execution: 프로그램이 순서대로(in-order) 실행되야 한다 슈퍼스칼라 아키텍처 파이프라인을 여러개 두어서 성능을 높임. 하지만 in-order로 실행할 경우 hazard가 있는 instruction 때문에 파이프라인이 많이 비게 되고, 그래서 순서를 어기더라도 hazard가 없는 instruction을 먼저 수행하는 out-of-order 방식을 적용하게 됨 그 과정에서 sequential execution을 어기게 된다. 하지만 precise interrupt나 branch execution을 수행하려면 sequential execution을 반드시 지켜야 하므로, 슈퍼스칼라는 마이크로아키텍처에서는 sequential execution model을 포기하지만, 아키텍처 관점에서는 sequential execution을 지키는 것 같아 보이게 만듦 슈퍼스칼라 아키텍처의 구조 1. instruction fetch 캐쉬에서 instruction을 fetch한다. 이때 branch instruction은 branch predictor가 관여해서 다음 PC값을 예측하고 fetch한다. MIPS R10000에서는 resume cache를 둬서 prediction한 instruction 뿐만 아니라 prediction이 fail할 경우의 instruction도 fetch해서 resume cache에 저장한다. 이는 prediction이 틀릴 경우 오버헤드를 줄이기 위한 전략이다. 슈퍼스칼라는 파이프라인이 여러 개이므로 동시에 여러 개의 instruction이 execute된다. 그러므로 instruction의 처리 속도가 굉장히 빠른데 이를 캐쉬가 완전히 소화하기 힘들어서(miss, throughput 등에 의해) instruction b...

칩 설계에 관한 전반적인 내용들

출처: http://blogspot.designonchip.com/2009/10/rtl-engineer.html Fabless 반도체 회사에서 일하는 RTL Engineer로 살펴본 반도체 칩 개발 과정을 정리해 봅니다. Specification and Planning 모든 Design이 그렇듯이 가장 중요한 과정으로 무엇을 어떻게 만들지 결정하는 과정입니다. 처음에는 추상적인 개념, 또는 chip이 사용될 system의 검토에서부터 출발합니다. 예를 들어 좀 철지난 이야기입니다만 Progressive Scan을 지원하는 DVD Player용 one-chip solution을 만든다는 정도로 시작합니다. 먼저 결정해야 하는 것은 chip이 담당해야 하는 기능과, chip 외부에 붙어서 동작하는 device는 무엇인지 입니다. chip 외부에 어떤 다른 device를 연결하느냐에 따라서 chip 내부에 들어가야 하는 interface가 달라지기 때문입니다. 그런 다음 chip 내부에서 해야 하는 기능을 나누어 block diagram 같은 것으로 형상화합니다. 각 block의 기능은 어떻게 되어야 하고 데이터는 어떻게 주고 받으며 등을 정합니다. 이 때, 실제로 design을 할 block과 회사 외부에서 IP(Intelectual Property : 지적 재산 정도로 번역) 형태로 사와야 하는 block을 결정합니다. 당연히 사오느냐 직접 개발하느냐는 개발기간이나 개발비 등을 고려하여 유리한 쪽으로 결정하게 됩니다.  이때 같이 고려해야 하는 것은 chip의 성능입니다. 당연히 specification을 만족해야 하므로, 전체 chip의 동작 clock 속도나 memory bandwidth 등을 고려해야 합니다. 소프트웨어로 동작하는 기능이 있다면 해당 software가 필요로 하는 CPU performance 등을 고려해야 합니다. 또한 chip의 power consumption 등의 다른 요소도 고려되어야 합니다. Clock speed나 ...

시스템프로그래밍: gprof (gnu 프로파일러) 소개 및 사용법

이미지
참고자료: http://korea.gnu.org/manual/release/gprof/gprof_1.html#SEC1  GNU 코리아 메뉴얼 프로파일링을 통해 얻을 수 있는 점 프로그램에서 어느 부분을 수행하는데 가장 많은 시간을 소비하고 있는지 확인 가능 함수들의 호출 관계 확인 가능 지나칠지도 모를 버그를 발견하는데 도움을 주기도 함 프로파일링 과정 프로파일링이 가능하도록 컴파일 프로파일 데이터를 생성하도록 프로그램 실행 프로파일 데이터를 분석하기 위해 gprof 실행 1. 컴파일 컴파일시 '-pg' 옵션을 추가해야 함 2. 프로그램 실행 프로파일링 옵션으로 컴파일된 실행 프로그램은 "gmon.out" 파일을 만듦 이 파일에 프로파일링 정보를 저장 gmon.out 파일에는 "flat profile"과 call graph가 저장되어 있음 flat profile = 각 함수에서 소비된 시간과 함수의 호출 횟수 저장 call graph = 함수들 간의 호출 관계와 호출 횟수가 저장 3. gprof 실행 간단하게 정리하면, gprof [실행파일] [프로파일링 파일] > [결과를 저장할 파일] 으로 요약할 수 있음. (gprof 다음에 option을 줄 수 있는데 조금 익숙해지면 이것저것 써볼 것) 리눅스 터미널에 gprof mdriver gmon.out > result.txt 를 친 후 vim result.txt 를 쳤을 때 결과 생각보다 간단하네??? 프로그램 최적화 하는 단계에서 유용하게 사용할 수 있음!!

나는 왜 너를 사랑하는가

모르고 쓰면 마술,  알고 쓰면 기술 지금까지 컴퓨터는 내게 마술이었다. 내가 지금 다니고 있는 학교에서 전자공학을 전공하면서도 수업에서 C, Java, Python을 배우면서도 나는 C 프로그램이 어떻게 돌아갈 수 있는지 몰랐고, 그냥 컴퓨터가 { }나 if, for, while 등을 직접 인식해서 수행하겠거니 생각했고, 만일 컴퓨터가 직접 문법을 인식한다면, if, for, while, { } 같은 문법을 인식하는 프로그램도 컴퓨터에 있긴 할텐데 이건 어떻게 돌아갈까 하는, 그런 질문에 대답하지 못했었다. 그러다가 4학년 1학기, 학교에서 아키텍처를 제대로 배우면서 시스템에 대해 처음으로 배우게 되었다. (사실 군대가기 전, 그러니까 2014년 1학기에 아키텍처 수업을 듣긴 했는데, 수업을 존나 대충 들었고 학점도 B0를 받았었다. 그러니까, 사실상 처음으로 들은 수업이나 다름 없다.) 재수강도 아니었고 (애초에 재수강 학점이 아니었으니) 청강생 신분으로 수업을 들었지만, 아키텍처 수업을 들으면서 너무 황홀했다. 아키텍처 수업을 들으면서 마술 같았던 컴퓨터는 내게 다가와 기술이 되었다. 그 기분은 지금도 잊을 수 없다. 바로 저번 학기에 들은 수업이기도 했지만, 지금까지 서울대학교에 다니면서 들었던 수업 중 거의 유일하게 내안에 있는 꽁꽁 얼어버린 바다를 깨뜨려버리는 도끼와 같은 수업이었다. 아키텍처에 대해 조금이나마 알게 되면서 컴퓨터를 아주 조금이지만 제대로 이해하기 시작했고, 그러면서 비로소 내 전공이 어떤 역할을 하는 학문인지 알게 되었고 내 전공을 진심으로 사랑하게 되었다. 아직 컴퓨터 시스템에 대해서 배워야 할 것이 너무 많다. 컴퓨터는 엄청난 분야다. 컴퓨터를 이용하려면 프로그래밍을 할 줄 알아야 하는데, 프로그래밍를 제대로 하려면 컴파일러와 OS에 대해 알아야 하고, OS를 제대로 이해하려면 아키텍처를 알아야 하고, 아키텍처를 제대로 이해하려면 디지...

나는 반드시 구글에 들어간다!

이미지
앞으로 딱 6년 후, 31살, 2023년 여름... 나는 반드시 구글 본사에 입사할 것이다. 1년 후 대학원에 입학해서, 아키텍처와 운영체제를 5년 간 매우 깊게 공부하고 연구할 것이다. 석박사 기간동안 ACM에 논문 2편을 낼 것이다. 하나는 석사 때 박사형들을 도와 3저자로, 다른 하나는 박사 때 내 졸업논문으로써 1저자로! 하루 하루 열심히 살아갈 것이고, 그 하루 하루의 흔적들을 이 블로그에 새길 것이다. 그렇게 글을 써나가다 보면 이 블로그는 내가 열심히 살아온 역사가 될 것이고, 누군가에겐 망망대해 한가운데에서 목표를 향해 나아갈 수 있는 등대가 되겠지. TO DO LIST 1. 장기목표를 적고 이를 이루기 위한 단기목표를 적는다. 2. 내가 정한 목표를 달성하기위해 노력한 하루의 흔적들을 매일 매일 남긴다. 오늘부터 시작이다!