블로그 이미지
kalstein

여러가지 프로그래밍 관련이나...신변잡기적인 글들을 남기는 블로그입니다. 지식은 나누는만큼 강력해집니다 ^^

Rss feed Tistory
Programming 2008. 9. 26. 10:20

Platform dependent 개발이...점점 싫어지는듯 ㅋㅋ

물론...뭐 codec 같은 특수 계산만 죽어라 하는 경우에야...해당 플랫폼에 최적화를 해야되기 때문에, 어쩔수 없는 경우긴 하지만...

여튼 종속적인 개발은 별루다!

흠흠;;; 자료구조의 기본기만 잘 다뤄도...일단 80%는 먹고 들어간다. 나머지 20%를 최적화 하는건 해당 플랫폼전용 기술. (20%라고는 해놨지만 저부분에서 성능향상이 200% 정도 될수도 있긴하다 ^^;;) Performance Critical한 작업이라면 80%은 기본이요, 20%도 기본으로 해야겠지만...글쎄? 저 20%라는 영역을 위해선 해당 플랫폼에 대한 깊은 이해가 필요하다. 대충해봐야 오히려 컴파일러만 못할 수 있다는 것. 그럼 들인 노력만큼 뽑아낼 수 있느냐가 문젠데... 약간 회의적이다. ㅎㅎㅎ 그냥 inline asm 정도 쓰는것만 따진다면 20%중에서 아주 극소수랄까?

예를 들어 직면한 문제로써, CEVA dsp 에서 개발을 진행해야된다. 근데...이넘은 VLIW인거다 -_-;; 정말 best effort를 내려면, core 내에 어떤 유닛이 최대한 동시에 진행될 수 있는지 꿰고 있어야되고, 그에 맞춰서 구현이 가능한 수준에 이르러야한다. 뭐...상사들은 그걸 다 알아야된다고 말은 하지만 글쎄??

간략히 저 위에 올라갈 어플을 설명하자면, WCDMA 기지국 SW다. R99 + HSDPA + HSUPA 요렇게 크게 3가지로 나뉜다. R99는 솔직히 데이터량이 크지도 않다. 그리고 HSDPA,UPA는 대부분의 계산이 ASIC쪽에서 이루어진다. 즉, 최적화를 행할만한 부분이 R99라는 소린데...계산량이 밀려오지도 않을껀데 그걸 최적화 해봐야. -_-a;;

뭐...해당 플랫폼에 대한 이해가 필요없다는건 아니고...일단 기본기부터 제대로 짜는게 더 중요하단 소리. 여기서 기본기란? 일단 Computer자체에 대한 이해(register + L1 + L2 뭐 이런 구조라던가...메모리 관련한 내용들이 많겠지), OS에 대한 이해, 기본적인 자료구조 및 해당 알고리즘들. 그런거는 무시하고 해당 플랫폼에 대해서만 최적화하는건 본말전도라는것.

아 오랜만에 블로그 포스팅 막하고 있네 ^^;; (무플의 안습은 계속된다 쭈욱~~~ -ㅁ-;;)

,
Programming 2008. 9. 26. 09:56

DSL 사용을 해보자고 했으나...역시나 ㅎㅎ

CPU와 DSP간의 Interface를 위한 문서가 있다. 근데 이게...워낙 변수들도 다양하고 해서, DSL(Domain Specific Language)를 이용하면 간단한 룰의 Text 로 부터 Interface Word document뿐만아니라, C에서 사용되는 header 파일도 뽑을수 있단말이지. 즉 One source, Multi use가 된다.

간단한 Tech Demo를 보여줬으나...뭐 좀 신기해 하고(워드를 직접 치는게 아니라 자동생성이 가능하다는 거에 신기해 했을듯...)...다만 거기까지. 제대로 된 걸 만드려면 최소 한달 길게는 두달 정도는 잡아야되지않겠느냐는 말에 그럴꺼면 딴거 스터디하는게 더 낫다. 는 결론 ㅎㅎㅎ

뭐 틀린말은 아닐수도 있다. 회사라는게 시간과의 싸움이 있는것도 있으니까...그래도 뭐랄까. 너무 근시안적인것만 보는건 아닐까. 이번에 해놓고나면 다른 프로젝트에도 얼마든지 적용이 가능할 것이고, 업그레이드된 무언가가 나올 수도 있다. (활용 가능한 분야를 두어개 더 설명도 충분히 했었다 -_-;; 그 이상도 나올수 있다는것)

다른 팀원들이...뭔가 좀 느꼈으려나? 귀찮은 일을 자동화 한다는 개념에...뭔가를 느꼈으면 참 좋으련만 -_-;;;;
,
Programming 2008. 9. 17. 09:34

구현이 low-level, 알고리즘은 high-level...일까?

저번주에 있었던 일인데...

알고리즘 파트쪽에서 패킷 스케쥴링 구현을 했고 그걸 dsp에 포팅하는 작업을 같은 팀원이 하고있길래, 그냥 이것저것 얘기를 좀 해봤었다. (간섭? ㅋㅋㅋ 왜 근데...그런게 재밌다능...;; 내 일 아니니까 더욱 재밌는듯? 냐하하) 얘기하다보니...구현이 거참. 한숨만 푹푹. ㅎㅎㅎ

Data 형식은 (id, value) 요렇게 pair형식. 요거를 100여개? 정도 value-order로 소팅을 해야되는데...알고리즘쪽에서 가져온 구현은? 짜잔~~~
id 용 구조체 따로, value용 구조체 따로 구현한 후에, value 퀵소팅 실행. value swap 시마다 id쪽도 같이 swap.... 뭐 그렇게 해도 구현은 되지...되고말고;;;;

그.러.나.
id, value가 같이 있는 구조체 하나 선언한 뒤에, compare function 하나 만들고, Standard C Library에 있는 sort 함수 한번 호출해주면 만사 오케이 인거다...-_-;;;
즉, 알고리즘쪽 분은...구조체의 경우 어떻게 sort를 해야되는지 몰랐던것.

저분을 콕 집어서 비난하는것이 아니지만...자료구조쯤은 알아야하지않을까? 흠냐;;
문제는 대다수가 스킬개발은 뒷전 ㅎㅎㅎ 에효~~~
,
Programming 2008. 8. 6. 14:15

Code 깔끔하기 정리하는 툴.

Visual Studio  같은 경우는...자체 에디터에서 (vi, emacs도 있지만 그 둘은 내가 안쓰니까...) indent를 정리해주는 기능이 있다.

그런게...기존에 indent가 뒤죽박죽인 c파일을 정리하기 위해서 VS를 까는건...왠지 비합리적이잖아? 그래서 indent를 찾아보고 테스트해봤는데....(GNU indent).... 이거 뭐 쓰기도 불편하고 왜 제대로 안되는지 알수가 없었다 -_- 내가 원하는대로 잘 안움직인다고 해야되나...

그래서 좀 더 뒤적거려보니 'AStyle' 이라는게 있었다. 오...매우 좋음. 옵션도 구질구질 많지도 않고, 적용도 깔끔하게 되고.

링크는 http://astyle.sourceforge.net/ 이것.
리눅스,윈도버젼 죄다 있으니 (MAC OS X 까지도) 좋고...
subversion이랑 연동시키기에도 좋을 것 같다.
,
Programming 2008. 7. 30. 10:54

Readers/Writer mutex 를 직접 구현한다면?

POSIX 스레드 동기화쪽에 보면...Readers/Writer mutex 객체가 따로 존재한다. 그런데...이게 자체 제공되지않는 시스템도 존재한단 말이지. (현재 몸담고있는...DSP쪽이라던가.)

그래서...혼자서 생각해봤는데, 와...이거 참 쉽지않다. writer끼리의 경쟁은 mutex로 정한다고 치더라도, readers와 writer의 경쟁은 어떻게 방지할 것인가?

그래서 결국은 구글신께 문의.

결과는 http://doc.trolltech.com/qq/qq11-mutex.html 여기.

아주 심플하다. ^^ semaphore랑 mutex 2가지만 시스템에서 제공하면 얼마든지 구현이 가능!!

,
Programming 2008. 4. 18. 10:05

'생활적 제제'와 '프로그래머 창의성'과의 관계는?

현재 회사에서는 모바일 플랫폼 SW 개발쪽 인력을 엄청나게 확장하고 있는것 같다.
아마..플랫폼을 개발한다고 하니...일단 OS는 리눅스를 사용하겠지? (설마 새로 만들진않을테니)

그런데...들려오는 소문에 의하면(어디까지나 소문이다~ 카더라~~ ㅎㅎ) 상사분이 상당히 FM이시라고한다. 옷은 이렇게 입어야되고...기타 생활은 이렇게 해야되고. 기타등등...

물론 그렇게 하면...획일적인 모습으로...좀 보기엔 그럴듯 하려나? 근데...SW를 개발하는 곳에서 너무 빡빡한것은...좀 더 안좋을것 같은데 말이다. 일단 개발자는 기계가 아니란말씀. 편안한 생활에서 집중에서 반짝! 하는게 정말 엄청난 효율을 가져다 주는것이다. 라는 믿음이 있긴한데...(일반적으로 그렇지?) 회사입장에서도 좋은 효율을 가져다 주는게 더 이익일거 같긴한데.

과연 저 2가지의 상관관계는 어떨까? 일반적인 SW기업들 문화를 살펴보면...생활적 제제가 없는쪽이 더 좋은거 같긴하다 ㅎㅎㅎ (엉성한 결론으로 종결!!!)
,
Programming 2008. 4. 16. 19:52

Java Style 동기화 사용하기 (매크로사용)

명시적이며 사용하기 편리한...아주 괜찮은 동기화 표현을 봤다.

It`s so Cool~~~~!!

내용은 여기 로...

,
Programming 2008. 4. 16. 17:20

아...TI DSP...정말 밉다 -_-

TI DSP에는 CCS(Code Composer Studio) 라는...Visual Studio 와 흡사한 모습의 개발IDE를 제공하고 있다. 그런데...이녀석이 참...골때린다.

일단...임베디드 환경이랍시고...C++의 STL도 지원이 없고, iostream의 지원도 없다.

;;;;-_-;;;;

STL은 STL port를 어떻게든...말그대로 porting해서리...그럭저럭 vector,list 정도는 쓸수있도록 했으나, set,map은 CCS 2.2에서는 잘 되지않는다. (컴파일 옵션을 좀 바꾸면 되지만...그다지 추천하고 싶지않다. 내 생각에는 inline 함수내의 static 객체처리를 못해서 생기는 문제 같다.) - 3.3에서는 잘 되는거 같더라.

iostream이 안되는 문제때문에, TDD(time duplex domain인가? 그거 아니다 ㅋㅋ Test Driven Development)를 도입하기도 상당히 껄끄럽다. 보통 C++용 TDD 들은 iostream을 사용한다. Log등을 위해서 출력단에 iostream을 사용하는데...이것이 없다보니 ㅡ,.ㅡ;;; 별수있나? 간단한 iostream을 만들던가...아니면 걍 GG 치던가.

뭐 하긴..생각해보면, 컴파일의 결과물인 .out 파일을 실행하기도 좀 껄끄럽긴하지만. (알아보면...시뮬레이션 DSP 위에서 돌리는 방법이 있긴하겠지만....TDD부터 좌절이니 원...)

가면갈수록...아주 부유한 개발환경(VS,gcc, etc)이 부러워진다 ㅎㅎ

,
TOTAL TODAY