회원 및 비회원 모두 열람이 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

iMx51에서 wince로 개발을 진행하고 있는데 역시나 극악의 성능을 보여 줍니다.


간단하게 테스트 겸해서 우분투와 비교 테스트를 했더니 6배에서 2배 까지 속도를 보여 줍니다.


코드는 귀찮아서 간단하게

Linux


#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>

int main(int argc, char *argv[])
{
        volatile unsigned int i;
        double a;
//      unsigned int start_time = 0, end_time = 0;
        struct timeval start_time, end_time;

        gettimeofday(&start_time, NULL);

        for(i = 0 ; i < 1000000; ++i)
        {
                a = cos(i) * 0.7254 * tan(i);
        }

        gettimeofday(&end_time, NULL);

        printf("start time [%ld,%06ld], end time [%ld,%06ld], elapsed time [%ld]n",
                start_time.tv_sec, start_time.tv_usec, end_time.tv_sec, end_time.tv_usec,
                (end_time.tv_sec * 1000 + end_time.tv_usec / 1000) -
                (start_time.tv_sec * 1000 + start_time.tv_usec / 1000) );
        printf("result : %fn", a);

        return 0;
}


wince

#include "stdafx.h"
#include <windows.h>
#include <commctrl.h>

int _tmain(int argc, _TCHAR* argv[])
{
    volatile unsigned int i;
    double a;
    unsigned int start_time = 0, end_time = 0;


    start_time = GetTickCount();

    for(i = 0 ; i < 1000000; ++i)
    {
        a = cos(i) * 0.7254 * tan(i);
    }
   
    end_time = GetTickCount();

    printf("start time [%u], end time [%u], elapsed time [%u]n",
        start_time, end_time, end_time - start_time);
    printf("result : %fn", a);


    return 0;
}


위의 코드로 돌려 봤습니다. 어차피 여러번 돌리나 한번 돌리나 결과 값은 10% 내외에서 변동 하니 평균은 구하지 않았습니다.

arm-linux-gcc -mthumb -mthumb-interwork  -march=armv4t -lm -o vfp_test_thumb vfp_test.c
arm-linux-gcc -mfloat-abi=softfp -mfpu=neon  -mcpu=cortex-a8 -lm -ftree-vectorize -o vfp_test_vector vfp_test.c
arm-linux-gcc -mfloat-abi=softfp -mfpu=neon  -mcpu=cortex-a8 -lm -o vfp_test_neon vfp_test.c
arm-linux-gcc -mfloat-abi=softfp -mfpu=vfp3  -mcpu=cortex-a8 -lm -o vfp_test_vfp3 vfp_test.c


ubuntu@ubuntu-desktop:~/test$ ./vfp_test_thumb
start time [353769,566308], end time [353775,113272], elapsed time [5547]
result : -0.708971
ubuntu@ubuntu-desktop:~/test$ ./vfp_test_vfp3
start time [353786,328435], end time [353789,114197], elapsed time [2786]
result : -0.708971
ubuntu@ubuntu-desktop:~/test$ ./vfp_test_neon
start time [353805,918641], end time [353808,616771], elapsed time [2698]
result : -0.708971
ubuntu@ubuntu-desktop:~/test$ ./vfp_test_vector
start time [353815,188671], end time [353817,886207], elapsed time [2698]
result : -0.708971


wince 결과 값

==========================================================================
=========               wince             ================================
==========================================================================
start time [95348], end time [111216], elapsed time [15868]
result : -0.708971

==========================================================================
=========               wince  (VFP)      ================================
==========================================================================
start time [138636], end time [144177], elapsed time [5541]
result : -0.708971


wince 로 하자는 걸 강력 하게 만류 하지 못 한걸 후회 중입니다. ㅠ.ㅠ


스티브잡스

2010.08.24 19:14:43
*.98.178.2

잘은 모르겠지만 thumb 로 컴파일되는 부분들이 있서서 그런걸까요?

김봉태

2010.08.24 19:38:53
*.74.231.153

네. thumb 빌드 때문에 퍼포먼스가 떨어 진다고 생각해서 PB의 옵션들을 살펴 봤습니다. 전체 프로젝트에서 참조하는 make 파일을 열어 봤더니 arm계열은 전부 thumb으로 빌드 하도록 되어 있더군요.지금 하드웨어는 32 비트 데이터 라인을 사용 하는데 thumb 빌드 때문에 리눅스와 이런 차이가 벌어 지는게 아닌가 생각 하고 있습니다.

이제현

2010.08.24 19:53:41
*.90.137.102

WinCE의 컴파일러/라이브러리가 ARM v6나 v7 코드를 제대로 만들지 못하는것 같습니다.

실제 실행속도는 Thumb2가 ARM 코드보다 빠릅니다. Cache등등의 여러가지 이유로 인해서..

김봉태

2010.08.24 20:40:36
*.74.231.153

제가 지금 까지 해본 삽질의 결과는 MS의 컴파일러는 armv4t 이후의 바이너리를 제대로 만들어 내지 못한다. 입니다.

QT 메일링 리스트에서도 wince에서는 armv4 이후에는 지원을 안한다고 하네요.

실제로 Thumb2가 arm 보다 빠르다고 해도 적용 해 볼 길이 없네요. rvct라도 쓸 수 있으면 써보겠지만 써 볼수도 없고, compact7에 들어 있는 컴파일러를 써봐도 별반 차이가 없습니다.

정낙주

2010.08.24 20:29:43
*.203.239.64

삼성의 S5PC100 같은 경우에는 WinCE Document에 아래처럼 변경하라고 되어 있네요..

 

ARM_ARCH_C_CMD_LINE=-QRarch4T
ARM_ARCH_ASSEMBLER_CMD_LINE=-arch 4t

==>

ARM_ARCH_C_CMD_LINE=-QRarch5T
ARM_ARCH_ASSEMBLER_CMD_LINE=-arch 6

김봉태

2010.08.24 20:41:31
*.74.231.153

아무런 변화가 없습니다.

전성진

2010.08.25 02:25:15
*.130.232.162

제가 아는바로도 WINCE 6.0의 경우 ARMv7(Cortex A8)을 지원하지 않고 ARMv6(ARM11) 정도 지원하는 걸로 알고있습니다. VFP도 지원은 하나 성능이 그닥 별로이고, ARMv7을 지원하지 않으니 NEON도 사용할 수 없어서 위와 같은 결과가 나오는 것 같네요. Windows Embedded Compact(WINCE 7.0)을 기다리는 방법외에는...

 

김봉태

2010.08.25 19:30:12
*.74.231.153

compact7 ctp에 있는 컴파일러로 테스트 해봤을때, vs2005에 있는 컴파일러로 빌드 했을 때나 바이너리 사이즈는 차이가 없습니다. 실행시간도 비슷 하게 나오구요. 물론 -QRarch7을 넣고 해봤습니다. compact7에서 armv7을 지원 한다는 말도 슬슬 의심이 갑니다.

출시가 되봐야 알겠지만 현재 까지는 compact7도 그닥 기대 할만한 물건인지 의심이 가기 시작 합니다.

김지원

2010.08.25 10:39:56
*.49.201.33

죄송하지만 위의 double선언을 float으로 하고, 결과 좀 공유해 주시겠어요? ^^ 궁금해서요.

김봉태

2010.08.25 19:19:43
*.74.231.153

리눅스는 아직 안해 봤고, wince 방금전에 해봤습니다. truncate warning만 뜨고 실행 시간의 변화는 없습니다.

이제현

2010.08.25 20:53:40
*.90.137.102

커다란 반전이 있을수도 있는 흥미있는 이야기 입니다.


혹시 WinCE 커널의 캐시 사이즈 설정이나 운영방법 의한 문제가 아닐까요?

아니면 외부 메모리 버스 속도 설정에 차이가 있을수도...

DVFS나 코어 클럭 설정이 다를수도 있고요.


gcc로 static 컴파일한 결과를 WinCE console에서 실행시킬수 있다면 OS/Platform설정 문제인지, 아니면 컴파일러나 라이브러리 성능 문제인지 금방 확인이 가능할것 같은데요...

김봉태

2010.08.26 23:17:39
*.74.231.153

cegcc 버전은 4.40 이고, 리눅스의 gcc는 kandroid에서 인베인님이 빌드 하신 툴을 가지고 테스트 했습니다.

리눅스에서는 Freescale에서 제공 해준 우분투 이미지를 그대로 올렸습니다. L2 캐쉬를 off 시킬 정도로 부지런 하지 못해서 그것 까진 안해 봤습니다. ㅋㅋㅋ

이제현

2010.08.26 20:40:38
*.90.137.102

cegcc 버전은 리눅스에서 테스트한 gcc랑 버전이 같겠지요?

컴파일/링크 옵셔도 같다면 툴체인 차이에 의한 문제는 아닐것 같습니다.

플랫폼 자체의 성능 문제이거나, 묵직한 드라이버나 스레드가 돌고 있거나... 둘중의 하나가 아닐까요?


L2캐시도 성능에 엄청난 영향을 줄것 같은데, 꺼져 있다면 성능 차이를 보이겠죠.

혹시 리눅스에서도 L2 캐시를 끄고 비교해 보셨나요?

김봉태

2010.08.26 23:26:03
*.74.231.153

map 파일을 만들어 확인 해 보면, CE6에서 사칙 연산과 수학 함수는 fpcrt.dll에 있는 함수들을 import 해서 씁니다. fpcrt.dll은 arm에서 제공해주는 건제 vfpv2 까지 지원이 되는 것으로 알고 있습니다. fpcrt.dll을 썼을때 리눅스의 1/2 속도로 근접 했습니다. CE7 컴파일러로 neon 을 사용할 수 있다고는 하는데 vectorize function을 어떻게 만들어야 하는 건지 당췌 알 수 없으니 일단 제껴 놓구 있습니다.


Linux COFF <-> PE Interworking이 가능 하다면 그냥 속편하게 RVCT 를 사서 쓸 용의도 있습니다만, 그건 일단 돌아 가는 걸 보고 판단 해야 겠네요.

김지원

2010.08.26 22:51:26
*.241.151.50

WinCE에서 sources에

WINCECOD=1

로 어셈 리스팅 파일을 추출한것과 리눅스에서 어셈 나온걸 비교해보면

적어도 프로그램 자체에 대해서는 비교해 볼 수 있을 것 같고요.

좀더 나아가서는 수학함수 라이브러리들을 디어셈 해서 비교해보면 바로 답나올 것 같습니다.

CE7컴파일러로 리스팅 추출해보니 적어도 VFP명령은 쓰고 있었고요.

아직 안써봤지만, NEON은 따로 intrinsic함수가 있을 것으로 보이고

 

WinCE5부터도 L2캐쉬는 BSP에서 지원하면 쓸 수 있는데(L2 Cache Management는 좀 그렇고요),

Freescale칩에서 BSP내에 지원코드를 넣어놓지 않은 것 같습니다.

 

Linux COFF <-> PE Interworking은 CE6에서는 EABI지원이 안되서 ARMv7용은 힘들 것 같고, CE7이라면, 가능성은 있어보입니다.

김봉태

2010.08.25 21:30:16
*.74.231.153

반전이 있었으면 저도 좋겠습니다.

우선 wince 에서는 cortex-a8의 L2 캐쉬가 지원이 되지 않는 것으로 알고 있습니다. freescale의 bsp에서는 L2 캐쉬가 있지만 mobile 툴로 살펴 보면 사용 하지 않음 으로 나옵니다.

wince에서 DVFS는 현재 로딩 되지 않고, CPU는 파이볼 수준으로 뜨겁습니다. cegcc로 빌드 해서 돌려 봤을 때에는 vs나 별반 차이가 없습니다. gcc로 static 빌드를 한다는 말씀은 리눅스에서 빌드 해보라는 말씀이신지? elf 포맷을 pe 포맷으로 변환이 가능 한가요?

의문이 가는건 SDRAM 데이터 버스가 32비트 라인으로 되어 있는 건데 thumb 머쉰에서 32비트 데이터 라인을  어떻게 access가 가능 한지 의문 입니다.

정철진

2014.04.24 01:09:24
*.143.200.4

CE6.0에서 최근 CPU들의 성능을 높일수 있는 방법을 찾다가 이 게시물을 보게 되었는데


재미있게 잘 보았습니다.   


List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 교육 홍보 및 광고는 "교육 및 세미나 홍보" 게시판을 이용해 ... 관리자 2010-07-15 107998
1830 Exynos4210(s5pv310) 관련 문의 [4] 딱지 2011-11-17 8206
1829 C110 라이브러리 공유 부탁 드립니다... [2] 공정표 2011-11-16 8169
1828 Samsung S5P6450 레퍼런스 보드 동작 영상 [16] 이제현 2011-12-03 8146
» iMx51 + wince 조합은 극악의 성능을 보여 줍니다. [17] 김봉태 2010-08-24 8110
1826 (동영상 추가) Exynos-4210 1.2Ghz 개발 보드 소개 file [8] 이제현 2011-12-09 8087
1825 이솝 S5PC100 : Core Clock - 834Mhz / Memory Clock - 2... [8] JhoonKim 2010-03-18 8074
1824 [Origen보드] Android 2G/3G modem 성공했습니다. file [1] 고도리 2011-10-15 8006
1823 (망고210 & S5PV210 ) 2010-07-19 보드 소개글을 퍼 왔읍니다... file [8] 장석원 2010-07-21 7988
1822 AE100 S5PC100 android [11] demonoR 2011-10-03 7984
1821 텔레칩스와 삼성 CPU 의 H.264 Codec 성능이 어떤가요 ? [1] 장석원 2010-02-12 7964
1820 ODROID-7에 올린 아이스크림샌드위치 ICS 4.0.3 [6] 이제현 2011-12-20 7954
1819 42인치 초대형 태블릿 만들기 [7] 이제현 2011-12-20 7924
1818 사이트 오픈 추카요 [1] 김대영 2006-04-07 7902
1817 Odroid-T - BoardConfig.mk - compliation Error [3] reuben2005 2010-06-12 7842
1816 사이트 오픈 축하드립니다.. [1] 장준영 2006-04-07 7803
1815 Tom cao (misoo.tw@gmail)에게 답장을 받았습니다. [1] 최종환 2010-04-04 7800
1814 ODROID-A 개발 보드 소개 file [23] 이제현 2011-02-15 7781
1813 Android 2.1 테스트 [3] 최종환 2010-02-23 7733
1812 WiFi module with SDIO [3] 라근수 2009-04-16 7700
1811 ODROID-S에서 PSX 에뮬레이터를 돌린 로그입니다. [2] Nabula 2010-07-27 7682

사용자 로그인