Tossim 에서 Cpu Cycle 측정 방법

실제로 변환하는 메인 컴포넌트는 현재 x86 리눅스 바이너리(cilly.asm.exe)로 제공된다. 이것은 모든 기본 블록에 카운터를 추가한 모듈과 함께 컴파일된 버전의 CIL이다. 모듈 코드는 scripts/counter.ml 에 있다. 그래서 만약 x86리눅스가 동작하지 않는다면 CIL을 설치하고 counter.ml에 추가하고, 자신에게 맞는 cilly 프로그램을 생성해야한다. :)

만약 자신만의 CIL을 컴파일 했다면, 다음 내용을 참고하기 바란다. nesC 컴파일럭의 출력물을 만들어 내기 위한 CIL을 얻는 것은 식별자로서 유효한 '$'를 인식하게 하는 약간의 수정이 필요하다. 즉, src/fontc/clexer.ml 파일의 다음 두 라인에 '$'를 추가해야만 한다 :

let ident = (letter|'_')(letter|decdigit|'_'|'$')* 
let attribident = (letter|'_')(letter|decdigit|'_'|':'|'$')

일단 cilly가 동작하면, 거의 다 된것이다… (이미 기본 PowerrTOSSIM이 셋팅되어 있다면…)

makefile은 디버깅 옵션(-g)과 함께 Mica2로 컴파일하도록 셋팅되어있을 것이다. 매우 중요한 부분이다!!

OPTFLAGS := -g -O0

ifeq ($(PLATFORM), mica2)

섹션에 추가해야 한다.

CPU Cycle 을 카운탕히기 위해서는 다음과 같이 어플리케이션을 실행해야 한다.

$ cd $TOSROOT/apps/MyApp
$ $TOSROOT/tools/scripts/PowerTOSSIM/compile.pl
.... warning 이 많이 발생하지만.. 에러는 없어야 한다....
$ cd build/pc
$ ./a.out -cpuprof 1
...
0: POWER: Mote 0 CPU_CYCLES 5985780.5 at 38191327
0: POWER: Mote 0 CPU_CYCLES 6059924.0 at 38591427
0: POWER: Mote 0 CPU_CYCLES 6133961.0 at 38991527
0: POWER: Mote 0 CPU_CYCLES 6209839.5 at 39391627
...

실행이 완료될때 (-t=TIME 사용), bb_exec_cnt 파일은 각 기본 블록을 위한 실행 카운트를 기록하고 있을 것이다. 각 라인에 맵핑되는 기본블록은 bb_linenum_map 안에 있으며 기본 블록에 대한 cycle 카운트는 bb_cycle_map 에 있다. cpuprof.py 스크립트는 이들 파일에서 정렬된 기본 블록 또는 cycle 실행 카운트를 얻기 위한 프로세싱을 수행할 수 있다.

Cygwin에서 CPU cycle 카운팅 측정하기

cygwin에서 측정하기 위해서 cilly를 컴파일하고 자신에게 맞게 몇가지 수정을 해야 한다. Turkmen Canli가 이에 대한 방법을 작성하였다.

CIL 컴파일하기

  1. 여기에서 CIL 을 다운로드 받고, 위에서 설명했던 것처럼 src/frontc/clexer.mll 파일을 수정한다.
  2. 여기에 있는 과정들을 따라서 CIL에 counter.ml 모듈을 추가한다.
  3. Cygwin에서 동작하는 cilly.asm.exe 이 만들어지면 bb_line_temp의 내용을 확인하면 다음과 같다 :
1 C:/PROGRA~1/UCB/cygwin/opt/tinyos-1.x/tos/platform/pc/events.c:58
2 C:/PROGRA~1/UCB/cygwin/opt/tinyos-1.x/tos/interfaces/BareSendMsg.nc:67
.....
....

하지만 다음과 같은 에러가 발생한다.

Use of uninitialized value in pattern match (m//) at /usr/lib/perl5/5.8/cygwin/C
wd.pm line 544, <> line 1.
: No such file or directory at /opt/tinyos-1.x/tos/../tools/scripts/PowerTOSSIM/
fixnames.pl line 26
fixnames.pl error

fixnames.pl 에 있는 정규표현식

"/^(\d+)\t([^:]*):(\d+)$/"

에 문제가 있다.

정규표현식의 “*” 앞에 ”.” 을 추가하면.. 다음과 같은 정규표현식이 되고 문제를 해결할 수 있다.

"/^(\d+)\t([^:].*):(\d+)$/"

실행환경 만들기

Mica2 디렉토리에서 다음 명령을 실행한다.

avr-objdump -d -l make.exe

(PowerTOSSIM 스크립트 명령중 하나인 bb2asm.pl이 위 명령을 사용한다.) 만약 “C:” 로 시작하는 패스가 있으면, bb2asm.pl 파일을 수정해줘야 한다.

        elsif (/^C\:\/PROGRA~1\/UCB\/cygwin/){
$temp=$_;
$temp=~s!C\:/PROGRA~1/UCB/cygwin!!;
($cur_file, $cur_line) = split /:/, $temp;
}

“while(<OBJDUMP>) { ” 로 시작하는 부분에 위 코드를 추가하면 된다.

Source

Discussion

Enter your comment
YWXPC
 
ko/wsn/tossim_에서_cpu_cycle_측정_방법.txt · Last modified: 2010/05/21 02:03 (external edit)
CC Attribution-Noncommercial-No Derivative Works 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0