embeded/ARM2015. 10. 1. 16:41

그나저나..ARM11의 SIMD 명령어 셋 목록 구하기 어렵네..

무슨 차이가 있나 보려고 했더니..


ARMv6 SIMD Features:

 75% performance increase for audio and video processing

 Simultaneous computation of 2x16-bit or 4x8-bit operands

 Fractional arithmetic

 User definable saturation modes (arbitrary word-width)

 Dual 16x16 multiply-add/subtract 32x32 fractional MAC

 Simultaneous 8/16-bit select operations

 Performance up to 3.2 GOPS at 800MHz

 Performance is achieved with a "near zero" increase in power consumption on a typical implementation

[링크 : http://www.arm.com/products/processors/technologies/dsp-simd.php]




[링크 : http://elinux.org/images/4/40/Elc2011_anderson_arm.pdf]




[링크 : https://web.eecs.umich.edu/~prabal/teaching/eecs373-f10/readings/ARM_Architecture_Overview.pdf]


오예 찾았다

__qadd16 intrinsic

__qadd8 intrinsic

__qasx intrinsic

__qsax intrinsic

__qsub16 intrinsic

__qsub8 intrinsic

__sadd16 intrinsic

__sadd8 intrinsic

__sasx intrinsic

__sel intrinsic

__shadd16 intrinsic

__shadd8 intrinsic

__shasx intrinsic

__shsax intrinsic

__shsub16 intrinsic

__shsub8 intrinsic

__smlad intrinsic

__smladx intrinsic

__smlald intrinsic

__smlaldx intrinsic

__smlsd intrinsic

__smlsdx intrinsic

__smlsld intrinsic

__smlsldx intrinsic

__smuad intrinsic

__smuadx intrinsic

__smusd intrinsic

__smusdx intrinsic

__ssat16 intrinsic

__ssax intrinsic

__ssub16 intrinsic

__ssub8 intrinsic

__sxtab16 intrinsic

__sxtb16 intrinsic

__uadd16 intrinsic

__uadd8 intrinsic

__uasx intrinsic

__uhadd16 intrinsic

__uhadd8 intrinsic

__uhasx intrinsic

__uhsax intrinsic

__uhsub16 intrinsic

__uhsub8 intrinsic

__uqadd16 intrinsic

__uqadd8 intrinsic

__uqasx intrinsic

__uqsax intrinsic

__uqsub16 intrinsic

__uqsub8 intrinsic

__usad8 intrinsic

__usada8 intrinsic

__usax intrinsic

__usat16 intrinsic

__usub16 intrinsic

__usub8 intrinsic

__uxtab16 intrinsic

__uxtb16 intrinsic.

[링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491i/CJADHCJE.html]

'embeded > ARM' 카테고리의 다른 글

비글본 github 저장소  (0) 2015.10.30
arm9 dsp / arm11 simd instuction 비교?  (0) 2015.10.01
cortex-A5/A7  (0) 2015.09.21
cortex-m 시리즈와 포화연산  (0) 2015.08.26
ARM926EJ / ARMv5TE  (0) 2015.07.28
Posted by 구차니
embeded/ARM2015. 9. 21. 09:38

결론만 적자면..

A5는 저전력

A7은 A5의 저전력에 A8의 고성능 추구


A5 - ARM11 대체용, 전력은 ARM9급 성능은 ARM11, ARMv7 명령어 셋

A7 -                  전력은 Cortex-A5급 성능은 Cortex-A8, ARMv7 명령어 셋


[링크 : http://avenuel.tistory.com/1298] cortex-a5

[링크 : http://avenuel.tistory.com/1314] cortex-a7


[링크 : https://namu.wiki/w/ARM%20Cortex-A%20시리즈#s-1.1.1]

'embeded > ARM' 카테고리의 다른 글

arm9 dsp / arm11 simd instuction 비교?  (0) 2015.10.01
arm11 simd instruction  (0) 2015.10.01
cortex-m 시리즈와 포화연산  (0) 2015.08.26
ARM926EJ / ARMv5TE  (0) 2015.07.28
Jazelle 관련 검색  (0) 2015.04.28
Posted by 구차니
embeded/ARM2015. 8. 26. 09:28

cortex-m3만 사용했는데 문득 M0 라던가 다른 모델군이 있는게 생각이 나서 검색..

일단은.. cortex-m3 는 그래도 나름! 풀 스펙에 가까운 표준형 cortex-m 시리즈라고 보면

M0는 숫자가 적은 만큼 마이너 버전이다.

그리고 M0/M1은 M3와 다르게 ARMv6 계열.. ㄷㄷㄷ

또한 Thumb 호환성도 조금 더 낮고(그래서 저전력/gate 수가 적다고)

결정적으로.. Hardware divider가 제외되어있다. 그나마 Hardware multiplier가 있는게 다행인가..


조금.. 의아한건..

M3/4/7이 Harvard 아키텍쳐인데 반해

M0/1은 폰 노이만으로의 회귀...


[링크 : https://en.wikipedia.org/wiki/Von_Neumann_architecture]

[링크 : https://en.wikipedia.org/wiki/Harvard_architecture]


[링크 : https://en.wikipedia.org/wiki/ARM_Cortex-M]


그런데 보다 보니 Saturated math라는게 보여서 링크를 따라가니.. 오홍.. 좋아 보이는데?!?!?!

간단하게 설명하면 더 큰 변수로 캐스팅, 계산 값 범위 비교, 클 경우 최대값 넣기

이 세가지를 한방에 끝내주는 연산이다. overflow로 인한 예측하지 못한 값에 의한 오류도 막아주고(물론 오차는 존재하지만)

if문에 의한 branch를 줄여주는 부분에서 상당한 장점이 있을 것으로 보인다.

[링크 : https://en.wikipedia.org/wiki/Saturation_arithmetic]

[링크 : http://www.arm.com/products/processors/cortex-m/]

'embeded > ARM' 카테고리의 다른 글

arm11 simd instruction  (0) 2015.10.01
cortex-A5/A7  (0) 2015.09.21
ARM926EJ / ARMv5TE  (0) 2015.07.28
Jazelle 관련 검색  (0) 2015.04.28
ltib 패키지 요구사항  (0) 2015.04.13
Posted by 구차니
embeded/ARM2015. 7. 28. 17:53

CPU 패밀리(?)는 EJ

아키텍쳐는 TE


ARM926EJ-S

Architecture ARMv5TE

The ARM926EJ-S processor implements the ARMv5TEJ instruction set 

[링크 : http://www.arm.com/products/processors/classic/arm9/arm926.php]

[링크 : https://en.wikipedia.org/wiki/ARM9]


근데 ARM 홈페이지에서도 페이지 별로 ARMv5TE와 ARMv5TEJ 를 섞어 쓰는건 함정.. ㄷㄷㄷ



TEJ라는 녀석도 구글에서 검색은 되는데 레퍼런스로 쓸만한건 안보이는 듯..


Integrated Modem + Applications

OMAP710 ‐ ARM925 + GSM/GPRS

OMAP730 ‐ ARM926TEJ + GSM/GPRS

OMAP733 ‐ ARM926TEJ + GSM/GPRS

OMAP750 ‐ ARM926TEJ + GSM/GPRS

OMAP850 ‐ ARM926TEJ + EDGE

OMAPV1030 ‐ ARM926TEJ + GSM/GPRS/EDGE

OMAPV1035 ‐ ARM926EJ + GSM/GPRS/EDGE

[링크 : http://www.wdic.org/w/WDIC/OMAP]

'embeded > ARM' 카테고리의 다른 글

cortex-A5/A7  (0) 2015.09.21
cortex-m 시리즈와 포화연산  (0) 2015.08.26
Jazelle 관련 검색  (0) 2015.04.28
ltib 패키지 요구사항  (0) 2015.04.13
jffs2 on sd card  (0) 2015.04.09
Posted by 구차니
embeded/ARM2015. 4. 28. 10:00

jazelle 가속이 ARMv7 부터 사라진거 봐서는 의미가 없는거 같긴한데

Yes Dalvik makes Jazelle useless. The only question is was Jazelle useful to begin with or is it 90% marketing hype? A good JIT or AOT(ahead of Time) compiler tends to give much better performance than trying to use specialized instructions. The register based approach of Dalvik might be faster than a traditional java bytecode interpreter but if the difference in minor between that of an interpreter and that of a JIT. Hopefully one of the next versions of Android has a JIT.


It takes ~5-10 years to write a good virtual machine with state of the art garbage collectors and optimizers. Sun (and Microsoft) have spent those years. Google hasn't. Hopefully they will keep investing in it so that one day Android Java code isn't a 90% slower than it should be.

[링크 : http://stackoverflow.com/questions/1153076/does-android-castrate-the-arms-jazelle-technology] 


결론은.. 실제적으로 실패한 기술이려나?

There are (at least) 4 different ways of executing Java:


1. interpretation

2. direct hardware execution

3. JIT compilation

4. AOT compilation


In order to answer your question of whether an ARM core with Jazelle

would improve performance you first need to state what you are

currently using, which core and what speed. If you use an interpreter,

anything will give a good speedup.


Note there are 2 versions of Jazelle: DBX which executes byte codes

directly (various ARM9's and all ARM11's support this). This gives

around 4x speedup over interpretation and has no memory or startup

overheads. There is also an optimizer which can improve performance

at runtime. However rather than generating native instructions like a

JIT, it optimizes the bytecode itself.


Jazelle-RCT supports either JIT or AOT compilation into the Thumb-2EE

instruction set (Cortex-A8/Cortex-A9). This gives near native performance

but when using a JIT you get the usual startup and memory overheads

(although far less than when using x86 due to ARM's better code density).


[링크 : http://www.embeddedrelated.com/showthread/comp.arch.embedded/109371-1.php] 


[링크 : http://en.wikipedia.org/wiki/Jazelle]

[링크 : http://en.wikipedia.org/wiki/Ahead-of-time_compilation]

[링크 : http://en.wikipedia.org/wiki/Just-in-time_compilation]

'embeded > ARM' 카테고리의 다른 글

cortex-m 시리즈와 포화연산  (0) 2015.08.26
ARM926EJ / ARMv5TE  (0) 2015.07.28
ltib 패키지 요구사항  (0) 2015.04.13
jffs2 on sd card  (0) 2015.04.09
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
Posted by 구차니
embeded/ARM2015. 4. 13. 23:20

음.. rpm이 요구사항이라.. 우분투에서는 조금 빡센건가..

그나저나.. 저런거 깔아도 경로 문제는 해결이 안되는거 같던데.. 끄응...



[링크 : http://ltib.org/documentation-LtibFaq#ref_10]


sudo apt-get install gettext libgtk2.0-dev rpm bison m4 libfreetype6-dev

sudo apt-get install libdbus-glib-1-dev liborbit2-dev intltool

sudo apt-get install ccache ncurses-dev zlib1g zlib1g-dev gcc g++ libtool

sudo apt-get install uuid-dev liblzo2-dev

sudo apt-get install tcl dpkg

sudo apt-get install texinfo

sudo apt-get install texlive


[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=785246&mid=lecture_tip]

[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=785398&mid=lecture_tip]

'embeded > ARM' 카테고리의 다른 글

ARM926EJ / ARMv5TE  (0) 2015.07.28
Jazelle 관련 검색  (0) 2015.04.28
jffs2 on sd card  (0) 2015.04.09
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
mkfs.jffs2 압축없이 사용하기  (0) 2015.04.08
Posted by 구차니
embeded/ARM2015. 4. 9. 10:00

전반적으로...

SD card에 JFFS를 쓰는건 듣도 보도 못한 이야기다! 라는 느낌 -_-

아.. 앙대 ㅠㅠ


일부 SD 메모리에는 자체적으로 wear leveling을 지원한다고 하니..

그런걸 쓰고 noatime 정도가 한계이려나?


[링크 : http://lists.rocketboards.org/pipermail/rfi/2014-October/002413.html]

[링크 : http://superuser.com/questions/248078/choice-of-filesystem-for-gnu-linux-on-an-sd-card]

[링크 : http://wiki.openmoko.org/wiki/FileSystem_microSD_cards]

'embeded > ARM' 카테고리의 다른 글

Jazelle 관련 검색  (0) 2015.04.28
ltib 패키지 요구사항  (0) 2015.04.13
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
mkfs.jffs2 압축없이 사용하기  (0) 2015.04.08
bogoMIPS가 너무 낮게 나오네  (0) 2015.03.03
Posted by 구차니
embeded/ARM2015. 4. 9. 09:16


sd 메모리를 jffs2용으로 포맷하려다 보니

eraseblock 이라는 옵션에 넣을 블럭 사이즈를 검색..

일단 샌디스크에서는 512 바이트 인 것 같은데..


예제로 나온게 128KB(0x2000) 인 것 봐서는 Flash에서만 가능한듯 하다.



[링크 : http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/General/SDSpec.pdf]

'embeded > ARM' 카테고리의 다른 글

ltib 패키지 요구사항  (0) 2015.04.13
jffs2 on sd card  (0) 2015.04.09
mkfs.jffs2 압축없이 사용하기  (0) 2015.04.08
bogoMIPS가 너무 낮게 나오네  (0) 2015.03.03
arm7l softfp hardfp fmac  (0) 2015.02.28
Posted by 구차니
embeded/ARM2015. 4. 8. 17:06

mkfs.jffs2 옵션에 -x를 주면 압축을 안하는 듯?

jffs2를 압축하면 실시간으로 계속 압축 / 해제 하니까 저사양 cpu에서는 무리가 올테니..

나중에 한번 부팅속도 라던가 벤치마크 해보거나

벤치마크 결과를 찾아봐야겠다.


       -m, --compression-mode=MODE

              Set  the  default compression mode. The default mode is priority

              which tries the compressors in a predefinied order  and  chooses

              the  first successful one. The alternatives are: none (mkfs will

              not compress) and size (mkfs will try all compressor and chooses

              the one which have the smallest result).


       -x, --disable-compressor=NAME

              Disable  a  compressor.  Use  -L to see the list of the avaiable

              compressors and their default states.


       -X, --enable-compressor=NAME

              Enable a compressor. Use -L to see  the  list  of  the  avaiable

              compressors and their default states.


       -y, --compressor-priority=PRIORITY:NAME

              Set  the priority of a compressor. Use -L to see the list of the

              avaiable compressors and their default priority.  Priorities are

              used by priority compression mode.


       -L, --list-compressors

              Show the list of the avaiable compressors and their states.


       -t, --test-compression

              Call  decompress  after  every compress - and compare the result

              with the original data -, and some other check.

[링크 : http://manpages.ubuntu.com/manpages/saucy/man1/mkfs.jffs2.1.html] 


[링크 : http://en.wikipedia.org/wiki/JFFS2]


[링크 : http://elinux.org/images/9/9a/CELFJamboree29-FlashFS-Toshiba.pdf] jffs2 / yaffs / ubifs 벤치마크

[링크 : http://www.denx.de/wiki/view/DULG/RootFileSystemOnAJFFS2FileSystem] 만드는 법

'embeded > ARM' 카테고리의 다른 글

jffs2 on sd card  (0) 2015.04.09
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
bogoMIPS가 너무 낮게 나오네  (0) 2015.03.03
arm7l softfp hardfp fmac  (0) 2015.02.28
밑바닥에서 rootfs 생성하기  (0) 2015.02.26
Posted by 구차니
embeded/ARM2015. 3. 3. 23:36

그래도. 라즈베리 파이 2 이녀석

Cortex-A7 700Mhz~900MHz 작동하는 녀석인데

700MHz 치고는 너무 낮은 36MHz 정도의 bogoMIPS를 출력한다.

이상해서 찾아보다 보니


"무한루프(busy-wait loop)가 아닌 타이머 기반의 딜레이를 이용하여 udealy() 함수를 사용함으로서

cpu의 부하를 줄이고 프로세서의 클럭 변경시에 강인하도록 변경되었고 부팅시에 calibration이 필요없어 졌지만

역효과로 bogoMIPS를 측정할때 CPU 클럭이 측정이 되는게 아닌 타이머 클럭이 측정되게 되는 문제가 발생했다."

정도?

Timer-based delays

In 2012, ARM contributed a new udelay implementation allowing the system timer built into many ARMv7 CPUs to be used instead of a busy-wait loop.[8] Timer based delays are more robust on systems that use frequency scaling to dynamically adjust the processor's speed at runtime, as loops_per_jiffies values may not necessarily scale linearly. Also, since the timer frequency is known in advance, no calibration is needed at boot time.


One side effect of this change is that the BogoMIPS value will reflect the timer frequency, not the CPU's core frequency. Typically the timer frequency is much lower than the processor's maximum frequency, and some users may be surprised to see an unusually low BogoMIPS value when comparing against systems that use traditional busy-wait loops.


[링크 : http://en.wikipedia.org/wiki/BogoMips] 


ARM: 7452/1: delay: allow timer-based delay implementation to be selected

This patch allows a timer-based delay implementation to be selected by

switching the delay routines over to use get_cycles, which is

implemented in terms of read_current_timer. This further allows us to

skip the loop calibration and have a consistent delay function in the

face of core frequency scaling.


To avoid the pain of dealing with memory-mapped counters, this

implementation uses the co-processor interface to the architected timers

when they are available. The previous loop-based implementation is

kept around for CPUs without the architected timers and we retain both

the maximum delay (2ms) and the corresponding conversion factors for

determining the number of loops required for a given interval. Since the

indirection of the timer routines will only work when called from C,

the sa1100 sleep routines are modified to branch to the loop-based delay

functions directly.

[링크 : https://git.kernel.org/.../linux.git/commit/?id=d0a533b18235d36206b9b422efadb7cee444dfdb] 


아무튼.. 뜬금없는 결론은...

ARMv7 부터는 bogoMIPS가 그리 신뢰할 만한(?) CPU 클럭 예측 방법이 아니게 되었다 정도이려나?

Posted by 구차니