레이블이 ARM인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ARM인 게시물을 표시합니다. 모든 게시물 표시

8/27/2016

TI -OPENCL Manual (관련자료 수집중)

OpenCL(Open Computing Language)의 약자로 Parrarel Programing을 하기 위해서 만들 Language이다,
여기서 말하는 Parrarel은 Concurrent Programing과는 다르다. 이종 CPU와 함께 병렬을 의미한다.

  • 기본개념 
  https://ko.wikipedia.org/wiki/OpenCL
  https://en.wikipedia.org/wiki/OpenCL


  • TI OpenCL
  http://downloads.ti.com/mctools/esd/docs/opencl/index.html

추후 직접사용할 경우 나중에 다시 정리가 필요 

8/04/2016

ARM Performance Libraries 및 Parallel Programming

ARM이 Version 이 변경이 되면서 부터 Multi Core가 지원이 되며, Core의 갯수가 증가되고, 도 GPU가 제공하면서,
성능이 많이 Upgrade되었지만, CPU의 Core의 갯수가 증가가 되었다고 많은 성능 향상이 되지 않는다고 생각한다.
어차피 Core를 연결하는 내부 Bus Clock은 CPU와 동일 할 것이며, 개별 Core 마다 L1 Cache를 가지고
있다고 하여, Main Core와 Sub Core와 통신 및 스케쥴링을 어떻게 해야 하는지 본인도 아직 잘 모르겠지만,
분명한 것은 코어가 증가한다고 해서 무조건 그 만큼의 성능은 나오지 않는다는 것이다.
한계는 이미 거의 정해져 있다고 보지만 어떻게 좀 더 성능향상을 할지가 궁금할 뿐이다.

앞으로 이부분에 대해서 좀 더 학습을 해보고, 각 개별 부분에 대해 자세히 알아본 후 추후 지속적으로 수정하겠다.

1. ARM Performance Libraries

ARM에서 제공하는 HPC(High Performance Computing)라는 Library와 Open Source를 제공하고 있다.
ARM에서 제공하는 것은 유료인것 같아, Open source만 알아 보자.

   https://developer.arm.com/hpc


2. ARM HPC Open source 

ARM에서 제공하는 성능 HPC Open Source Packages들이다.
  1. Compilers    
  2. MPI (Message Passing Interface)
  3. Maths libraries: 
  4. Utility programs
  5. Profiling tools
  6. Python packages

자세한 내용은 아래의 사이트에서 확인하자.
   https://developer.arm.com/hpc/hpc-software/hpc-software-subscription/hpc-open-source-packages

흥미로운것은 MPI 이며 이 부분을 어떻게 Programing할지도 관심이다.


2.1 Compilers 

MPI를 Compiler를 이용하여 Programing가능하며 일단 간단하게 각각의 Compiler를 알아보자.

  • Complier의 기본구조 
GCC or LLVM의 경우도 아래와 같은 구성으로 되어 있으며, Back End에 따라 Cross Compile로 되는지 설정이 된다.




  1.   Frontend: ( lexical analysis, Preprocessing, Syntax analysis 등 일을 한다고 한다) 
  2.   Middle end: IR 중간 Code를 생성
  3.   Back end: code generator  실제 실행 코드 및 optimization을 한다고 한다. 

Compiler 상위기본구조 
상위구조를 쉽게 이해하고자 하면 직접 GCC 크로스 컴파일러를 만들어 보면 된다. 
  https://en.wikipedia.org/wiki/Compiler
  http://blog.seulgi.kim/2014/11/compiler-structure-front-end-back-end.html


  • GCC 
ARM의 Version 변경이 되면서, FPU 지원 및  THUMB32를 지원하기 위해서, GCC에서도 이를 지원을 해주며, 
가장 보편적으로 많이 사용하는 Open Source Compiler이다.
GCC의 경우 오래전에는 직접 오픈소스를 받아 빌드하여 직접 크로스컴파일러를 구성해야했지만, 이제는 칩벤더 혹은 회사에서 
기본제공되어 쉽게 사용하기에도 사용하기도 편하고 메뉴얼은 GCC Manual을 보면 쉽게 자세히 알수 있다. 
물론 자세히 나와 있어 세부설정을 비롯하여 내부 Prefix된 명령어도 쉽게 익힐 수 있다.

  https://gcc.gnu.org/onlinedocs/
  https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Options.html#ARM-Options


  • LLVM(Low-Level virtual machine)
GCC와 동일하게 컴파일 기능을 제공하며, Java의 JIT 처럼도 중간언어 기능인 비트코드를 지원가능 가능하며,성능 및 소스의 크기는 GCC보다 좋다고 한다.
현재 CLANG이라고, GCC 기반의 LLVM Compiler로 사용하려고 하고 있으며, 주로 iOS or OSX의 App에서 사용한다고 한다.

  https://ko.wikipedia.org/wiki/LLVM
  http://llvm.org/
  https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9E%AD
  http://ji007.tistory.com/entry/LLVM-Low-Level-Virtual-Machine

  • IOS or OSX Apps Compiler 
  http://kyejusung.com/2015/11/llvm%EC%9D%B4%EB%9E%80-clang-%EB%B9%84%ED%8A%B8%EC%BD%94%EB%93%9C-%ED%8F%AC%ED%95%A8/

이외에도 ARM 전용 Compiler를 비롯하여 TI DSP 전용 Compiler가 존재하므로 각각의 Manual을 반드시 참조하자
특히 Linker Script 와 컴파일러 내부명령어는 컴파일러 마다 다르므로 반드시 Manual을 확인하자 


2.2 Interpreter 


  • Interpreter 기본설명 
가장 대표적인 Interpreter는 아마 Basic일 것이지만, 최근부터 많이 사용되어지는 Python은 사용하기도 쉽고 이해하기도 쉬어서 많이 사용되어진다.

세부설명아래참조
  https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0
  https://en.wikipedia.org/wiki/Interpreter_(computing)

Python의 경우는 실행시간에 기본적인 Python Interpreter 동작하여 이미 Compile된 Library의 Symbolic Function을 연결하여 동작하는 방식과
내부 별도의 동작방식이 존재하는 것 같다 ( 이부분 별도로 좀 더 알아봐야겠다)

주의해야할 것은 예상하지 못한 Run Time 에러의 문제일 것이며, Script 언어로만 사용되어지기보다
많이 확장이되어 사용되어지므로 많이 알아봐가면서 공부를 해야 할 것 같다. 

  • Python ( MPI 사용)
  http://materials.jeremybejarano.com/MPIwithPython/


3. Parallel Programming 

  • Multicore 관련자료 링크  
  https://en.wikipedia.org/wiki/Multi-core_processor
  http://elinux.org/images/4/43/Understanding_And_Using_SMP_Multicore_Processors_Anderson.pdf
  http://www.springer.com/cda/content/document/cda_downloaddocument/9781441997388-c2.pdf?SGWID=0-0-45-1154842-p174106775


  • ARM의 Multi Core 이해 
현재 ARM은 효과적인 저전력모드를 제공하기 위해서 Multi Core들을 Big Group 과 Little Group으로 성능차이에 따라 두개의 Multi Core 그룹으로 운영하고 있다.
그리고 칩벤더에 따라 구성은 다 달라지는 것 같으며, 운영방식은 각 SoC or AP를 봐야 할 것 같다.

  • Homogeneous vs. heterogeneous multicore
  1. Homogeneous multicore systems: 동일의 architecture 를 공유하며 사용하며 1개 이상의 Core가 구성   
  2. Heterogeneous multicore systems: 다종의 architecture 를 1개 이상의 Core가 구성    

HMP(Heterogeneous Multi-Processing) 관련내용
  https://en.wikipedia.org/wiki/Heterogeneous_computing


  • Symmetric vs. asymmetric multiprocessing
  1. SMP(symmetric multiprocessing): one kernel, multiple cores
  2. AMP(asymmetric multiprocessing): multiple kernel, multiple cores (아직 사용된것을 못봄)
흔히 대칭형과 비대칭형 이라고 하며, SMP 방식의 경우 Linux에서 많이 채용되어 사용되어진다. 
  https://www.nxp.com/company/blog/three-reasons-why-embedded-heterogeneous-systems-are-more-efficient:BL-3-REASONS-EMBEDDED-SYSTEMS-EFFICIENT

SMP(symmetric multiprocessing)
  https://en.wikipedia.org/wiki/Symmetric_multiprocessing


  • ARM의 Big Little 의 다양한구조 
  https://en.wikipedia.org/wiki/ARM_big.LITTLE
  https://ko.wikipedia.org/wiki/Big.LITTLE

더불어 최근 Exynos를 보면 HMP(Heterogeneous Multi-core Processing) 기능을 제공하고 있다.
HMP는 기능을 살펴보면 ARM의 Little Group 과 Big Group은 동시에 사용을 하는 기능으로 보인다.



3.1 MPI(Message Passing Interface) or OpenMPI 

분산화 시스템에서 Parallel Programming 할 경우 MPI(Message Passing Interface) 사용하는 시스템이다.
대체적으로  여러 CPU과 RAM들과 통신하는 Interface이기에 분산화 시스템에서 많이 사용되어지는 것으로 보인다.
기본적으로 단위를 프로세스 단위로 구성하여 동작을 한다고 하며, 현재 Linux에서 지원을 하고 있다.
이와 관련된 프로그래밍은 별도로 Interface를 학습하고 해야할 것 같다.

  • 기본사용법
위 MPI or MP Library를 설치 후 원하는 App에 이에 맞게  Parallel Programming 하여 사용하는 것 같으며
기본적으로 개별 Parallel Programming 하는 Example과 동작원리를 세부적으로 봐야 알겠다.

솔직히 Parallel Programming을 직접 구성하여 사용해 본적이 없는 이에게 사용하기기 힘들것 같으며,
나도 역시 이를 가지고 아직 최적화하기에는 역부족인것 같다.



  • OpenMPI 설치 
  http://datamining.dongguk.ac.kr/wiki/index.php/Openmpi
  https://askubuntu.com/questions/25664/which-mpi-package-should-i-install

  • MPI Programing  (Open MPI API 사용)
  https://www.dartmouth.edu/~rc/classes/intro_mpi/hello_world_ex.html
  http://hamilton.nuigalway.ie/teaching/AOS/NINE/mpi-first-examples.html

  • How to Use Open MPI or MPICH
  http://www.linux-mag.com/id/5759/#install-openmpi
  http://ympahk.blogspot.kr/2014/05/openmpi.html
  https://sourcedexter.com/category/raspberry-pi-2/


  • OpenMPI Compiler
  http://manpages.ubuntu.com/manpages/trusty/man1/mpicc.openmpi.1.html

현재 Python과도 같이 연동이 되며, 이를 Parallel Programming 즉 분산화를 하기위해서는 OpenMPI API 를 별도로 알아야 하며 동작방식을 익혀야한다.

  • MPI 기본개념 관련부분 링크 
  https://en.wikipedia.org/wiki/Message_Passing_Interface
  https://computing.llnl.gov/tutorials/mpi/
  http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiintro/ppframe.htm
  http://www.mcs.anl.gov/research/projects/mpi/


3.2 OpenMP(Multi Processing)

동일하게 Parallel Programming에서 사용되어지는 방법으로 OpenMPI or MPI와 다르게 OpenMP는 여러 CPU와 보통 1개 RAM이 공유하여
Parallel Programming을 하는 Interface이다.
개인적으로 봐도 실제 Parallel Programming은 Open MP가 더 가까울 것 같으며, 이것으로도 최적화를 할 수 있을 것 같다.

  • OpenMP
위에서 설명했듯이 , Multi Core와 RAM이 공유하는 Parallel Programming으로 최신 ARM Version의 Multicore를 지원하는 System에서 
필요한 Parallel Programming인 것 같으며,ARM을 위한 부분은 별도로 찾아봐야 할 것 같다.
최신 ARM은  Heterogeneous Multi-core Processing (HMP) 지원되는 부분은 이것을 사용하는지는 알아봐야 할 것 같다.

  https://ko.wikipedia.org/wiki/OpenMP
  https://developer.arm.com/open-source

  • OpenMP 설치 
  https://askubuntu.com/questions/144352/how-can-i-install-openmp-in-ubuntu


  • OpenMP의 예제 
  https://minimonk.net/3534

  • OpenMP 와 MPI와 차이점 
둘다  Parallel Programming 용 Open Source를 제공하고  OpenMPI는 CPU와 RAM이 독자적으로  있는 시스템으로 분산시스템 (클러스터링)에  
주로  사용이 되는 Parallel Programming 인 것 같으며, 기본단위는 프로세스로 진행을 한다고 한다. 
더불어 OpenMP와 같이 메모리공유는 하지 않고 직접 Message 방식으로 통신을 하며 처리를 한다.
예를들면 슈퍼컴퓨터 같은것이 될 것 같다 ( 다중의 CPU와 다중의 Memory 기반 통신)

OpenMP인 경우는 Multi Core에 RAM은 공유를 한다고 하며, 기본적으로 Thread기반으로 사용을 하는것 같다

   http://askubuntu.com/questions/145119/what-is-the-difference-mpi-vs-openmp
   https://www.quora.com/What-is-the-difference-between-OpenMP-and-Open-MPI


3.3 OpenCL(Open Computing Language)

Parallel Programming의 한 종류로 주로 CPU 와 GPU와 함께 Parallel Programming 하기 위하여 만든 Interface 이다.
그래서 지원되는 것을 살펴보면 Graphic 회사들이 지원을 하고 있다.
상위의 OpenMP와 유사하지만 다만 Core가 GPU를 사용한다는 것이며, Programming하는 방식 역시 다르다.

일반적인 PC Based 구성
  http://johnwang3.blogspot.com/2015/02/zz-system-address-map-initialization-in_12.html

만약 PC Base라고 한다면 Embedded의 AP와 SoC와 다르게 GPU와 CPU는 PCIe로 연결되어 Bus기반으로 통신을 할 것이며, 
I/O Mapped IO 방식으로 구성이 되어 있어 GPU와 CPU의 메모리공유는 거의 힘들다고 본다.
PC에서 ARM으로 변경하면 ARM 내부버스는 AMBA의 AHB/APB Bus를 사용하겠으며 PC와 다르게 GPU와 CPU의 Memory 공유되며,
Memory Mapped IO 방식으로 쉽게 다른 주변기기도 공유가능 

대부분 Graphic Interface( Intel or NVIDIA)에서 SDK를 제공하고 있으며, 관련부분은 제조 Graphic Card사의 SDK를 세부적으로 봐야 알 것 같다. 
다만 NVIDIA는 기존에 CUDA가 존재하기 때문에 이 부분은 별도로 봐야 할 것 같다.


  • 기타 관련 참고 링크 및 관련자료 수집
추후에 시간이 되며 아래링크들을 좀 더 보고 알아보도록 하자

OpenCL
   https://developer.arm.com/products/software-development-tools/graphics-development-tools/mali-graphics-debugger

Computer Vision
  https://community.arm.com/graphics/b/blog/posts/arm-compute-library-for-computer-vision-and-machine-learning-now-publicly-available

Mali OpenCL SDK
   https://developer.arm.com/products/software/mali-sdks/mali-opencl-sdk

OpenCL 과 OpenGL ES
   https://developer.arm.com/docs/dto0038/b/1-introduction/13-software-development
   https://developer.arm.com/products/software-development-tools/graphics-development-tools

Mali GPU Driver
   https://developer.arm.com/products/software/mali-gpu-drivers

OpenCL
   https://ko.wikipedia.org/wiki/OpenCL
   https://en.wikipedia.org/wiki/OpenCL
   http://www.cc.gatech.edu/~vetter/keeneland/tutorial-2011-04-14/06-intro_to_opencl.pdf
   http://www.cmsoft.com.br/opencl-tutorial/advanced-aspects-c99-opencl-language/
   https://wiki.tiker.net/OpenCLHowTo

Cuda vs OpenCL
   https://wiki.tiker.net/CudaVsOpenCL

8/03/2016

ARM Power Managment (추후 사용후 예제 추가 , 적용전후 비교 사항 추가 )

IPA (Intelligent-Power-Allocation)

1. 기본사항 

  • Linux Kernel 4.2 or 이 후 version 
  • Temp Sensor 
  • Open source 소스 제공되며, Kernel에서 추가만 하면 되는 것 같다.

Kernel Config에서 IPA 부분을 적용을 하면된다고 한다.


2. IPA의 장단점

동작원리는 Power 소비와 온도를 감지하여, CPU와 GPU를 적절히 조절해주는 시스템이다.
어떻게 보면 좋은 장점을 가지고 있겠지만, 이로 인하여, 성능저하는 불가피해 보인다.
본인도 아직은 사용해보지 못해 뭐라고 못하겠다.

    https://developer.arm.com/open-source/intelligent-power-allocation
    http://www.armtechforum.com.cn/2014/sz/C-1_ARMIntelligentPowerAllocation.pdf
    https://ko.wikipedia.org/wiki/PID_%EC%A0%9C%EC%96%B4%EA%B8%B0

8/02/2016

ARM DS-5 Development Studio

ARM DS-5 Development Studio

ARM사에서 제공하는 이클립스 기반의 개발툴이며, 30일간 만 무료이니, 유료 프로그램 같다.
나도 아직 사용을 하지 못해봐서, 추후 많이 사용한다면, 그때 다시 한번 고려 해보겠다.
설치방식도 기존 이클립스 설치와 유사한 것 같다.

  • Download
   http://www.arm.com/products/tools/software-tools/ds-5/index.php


  • DS-5 Tools에 대한 설명
   http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.ds5/index.html

8/01/2016

ARM 관련 자료 (추후 수정 및 관련자료 정리)

ARM 관련자료 수집 

ARM 관련자료 수집으로, 각 Architecutre 정보 부터, Bus 와 ABI 문서정보 수집 

  • ARM Processor Architecture
ARM Architecture 정보 
  http://www.arm.com/products/processors/instruction-set-architectures/index.php

  • ARM의 CORTEX Series
  https://developer.arm.com/products/processors


  • ARM의 JEDEC 관련정보 (JEDEC)
JEDEC의 이해하고자 하면, 우선 DRAM부터 이해 

ARM의 JEDEC 관련부분 자료 
너무 좋은글에 감사하며,아래글을 이해하려면 먼저 RAM부터 보시길 

7/31/2016

ARM을 사용하는 대표적인 CPU

ARM을 사용하는 대표적인 SOC 

  • EXYNOS Series
ODRIOD 와 삼성에서 사용되는 핸드폰 및 기타 에서 주로 사용되며, 나도 이 SOC는 직접 사용해본 것은 ODROID로 구입하여  나의 장난감으로만 사용했다.  
오랜전에 삼성 TI BSP 기술지원할때, 잠시 보기만 했으며, 그때 당시에는 너무 신기할 따름이였다. 


  • OMAP 과 Davinci Series (DMx)
국내 TI 3rd party 및 외국 TI 3rd party를 비롯하여 TI 관련회사에서 근무하면서 많이 가장 많이 접해본  SoC 혹은 AP이며, 역사 또한 너무나 잘안다.
TI 3rd party 회사부터 시작하여 TI가 처음 Linux Driver 제공하지 않았을 때부터 개발했기에, 관련사항을 많이 접해봤으며, 익숙하게 잘 알고 있다.
OMAP도 모바일 사업을 오래전으로 접었다.
  https://ko.wikipedia.org/wiki/OMAP


  • Snapdragon
나의 경우는 접해보지 못한 CPU이며, 모바일에서 가장 많이 사용하기에 간략하게 소개하며, 아래의 링크를 참조하자.
LG는 핸드폰 개발에서 어쩔수 없이 사용하며, 삼성은 2개 AP 기반으로 가져가고 있다.
  https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%83%85%EB%93%9C%EB%9E%98%EA%B3%A4


  • Tegra
최근 EVM (Jetson TK-1) 을 가지고 논 SoC or AP이며 NVIDIA에서 제공하는 이름은 Tegra이다.
참고로, NVIDIA는 Tegra로 모바일 AP 사업을 진행했지만, TI보다 일찍 사업접었다. 
이때 인수한 회사가 영국의 아이세라 Baseband Chip회사이며, 인수 후 국내에서 모바일사업을 잠시 진행했는데, 잘되지 않았다.

TI를 비롯하여 많은 Chip 제조사가 GPU로 사용 
이매지네이션 테크놀로지의 PowerVR Series.

7/24/2016

ARM의 ABI 관련 자료 및 VFP/ NEON Program 자료

1. ARM의 ABI 

ABI는 Application Binary Interface 이며, 주로 Compiler에서 이를 준수하여 구현을 하며, ABI의 핵심은 ARM의 Registers들과 관련기능을 어떻게 연결하는 것이 ABI의 기능이다.


  • ARM ABI  관련구조 문서 
아래문서의 2 SCHEMATIC MAP OF THE ABI FOR THE ARM ARCHITECTURE 을 자세히 보자

   http://infocenter.arm.com/help/topic/com.arm.doc.ihi0036b/IHI0036B_bsabi.pdf
  1. AAPCS :  일반적으로 Function Call을 사용할 때, Register들의 용도를 정의 
  2. EHABI : Exception Handling ABI 
  3. AAELF : ARM을 위하여 ELF를 어떻게 사용하여 연결할 것인지 용도 정의
  4. 기타사항 


  • ARM ABI 관련 문서 
관련문서 링크
   http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html



  • ARM Compiler C Library Start up과 Init 
관련문서 링크
  http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0241b/index.html


  • ARM의 Dynamic Linking 관련문서 (ELF)
ELF의 동적 Library인 .so 관련내용
  http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0242a/index.html


2. ARM의 NEON 모드 


ARM의 Neon 모드를 점점 DSP대신 사용하는 것으로 보여지며, 특정 SoC/AP에서는 Neon전용모드로 사용 (DSP대신)

관련내용링크
  http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/index.html
  http://infocenter.arm.com/help/topic/com.arm.doc.den0018a/index.html
  http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073b/IHI0073B_arm_neon_intrinsics_ref.pdf

  • ARM NEON Programing (ARM DS-5 Compiler 5.06)
아래 내용은 참고사항으로 보며, GCC와 비슷하겠지만, Compiler가 다르기 때문에 관련부분은 정확하게 확인해야 한다.
  http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473m/dom1359731184627.html


  • ARM VFP Programing

7/19/2015

ARM Cortex 관련정보

1. ARM에 관한 기본숙지 사항

ARM은 Embedded CPU시장에서 거의 모든 제조사들이 사용하는 CPU이며, 이전에 많이 사용이 하였던 PowerPC 제조사였던 Freescale(Motorola) 마저도 ARM을 사용하고 있다.

기존의 ARM9에서 Version up이 되면서 Cortex라는 것으로 변경이되어 그 특성과 기존특성을 알아보자.

  https://developer.arm.com/products/software-development-tools/compilers/arm-compiler-5/docs/dui0471/k/key-features-of-arm-architecture-versions/about-the-arm-architectures


1.1 ARM Core 기본설명

ARM에서 예전부터 가장많이 사용되어지는 ARM9 부터 최근에 많이 사용되어지는  Cortex Series로
변경이 되면서 FPU,Thum32 및 기타기능이 추가되어 ARM 내부에서도 많이 변경이 되었으며 이는 곳 컴파일러의 지원과 기존의 호환성과도 중요하다고 본다.

  • ARM의 Version 확인 
   아래의 사이트에서 ARM의 Version별로 변경된 사항들을 기본적으로 확인을 하자.
  https://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98


  • ARM Cortex-A,R,M Series
 ARMv7이 되면서 도입된 명칭으로 Cortex라는 새로운 ARM의 명칭이 생기고, 종류가 나누어진다.  
 현재 많이 사용되어지고 있는 ARM Series 이며, 사용되는 목적에 따라, A,R,M으로 나누어진다.
  1. A : 성능이 가장 좋은 Core로 현재 많이 사용이되고 있으며, V7, V8로 나누어진다.
  2. R : 성능이 좋지만, RTOS에 최적화하기 위해  Cache 더 사용하여 low Latency를 제공
  3. M: 성능은 많이 떨어지지만, 작고 Power 소비가 적어 MPU 즉 Micom에서 많이 사용된다. 
   A는 현재 거의 모바일이나, 성능이 좋은 CPU에서 주로 많이 이용이 되어진다. 
   R은 아직 저 역시 경험해보지 못했지만, 주로 의학이나, 군용으로 사용될 것 같다.
   M은 현재 거의 Micom이며, 지금 현재 STM에서도 주로 많이 볼수 있다. 

SOC에서는 Cortex-A만 따라 하나만 사용하지 않고, 조합으로도 많이 사용한다.

  • ARM의 Cortex 관련문서 
   아래의 상단 검색 사이트에서 원하는 키워드로 찾을수 있으며,
   ARM의 Cortex-A , Cortex-R , Cortex-M 관련 정보 및 문서를 쉽게 얻을수 있다.




1.2 ARM 의 CACHE

ARM9인 경우  Harvard architecture로 I-Cache와 D-Cache를 분리하여 사용을 하고 있으며,
별도로 TCM(Tightly Coupled Memory) 이라고 사용하고 있는데, 일종의 SRAM or Cache라고 생각하면 되겠다. 사용용도는 SOC의 내부마다 조금씩 다른것 같다.



  • Cortex의 Cache system 

Cortex인 경우 Intel에서 사용되는 Cache처럼 Level1,2로 나뉘어지며, V8에서는 L3도 지원가능하다.
  1. L1 Cache: CORE마다 Harvard Arch I,D Cache로 존재하며, Core Speed와 동일.  
  2. L2 Cache: Multi일 경우, CORE들과 공유하며, 단일구성의 SRAM으로 이는 Speed는 정확히 잘 모르겠음.

  • TCM (Tightly Coupled Memory)
Cache의 기능인 것 같은데,  주로 Low Latency을 바라는 ISR을 이곳에 사용을 하는것이라는 목적인 것 같다.
time-critical routine이 시간 or 속도 관계없는 routine 인 것 같다.

나의 경우는 DM335 사용 했을 때, TCM을 DeepSleep 들어 갔을때, Wake up 용 ISR로 사용하였다.
RTOS를 사용한다면, TCM이 많이 사용할 필요가 경우, ISR의 Fast latency와 이를 DRAM 대신
  이용하여, 최적화가 가능할 것 같다.

  https://developer.arm.com/docs/dui0471/k/key-features-of-arm-architecture-versions/tightly-coupled-memory

  • ARM Cache에 대한 자세한 설명과 정책
  http://egloos.zum.com/recipes/v/5170809

  • ARMv7 Cortex-A의 Cache 구성 비교 및 확인가능 
   Cortex A를 사용하는 모바일이나, 그외 SOC에 대해 비교 및 Cache를 쉽게 볼수 있으며,
   이에 대해 비교 설명해주고 있다.

   L1 Cache는 I-Cache와 D-Cache로 분리된 Harvard architecture로 구성이 되어 있고,
   L2 Cache는 공유된 형식으로 일종의 buffer로 돌아가는 것 같다..

  https://namu.wiki/w/ARM%20Cortex-A%20%EC%8B%9C%EB%A6%AC%EC%A6%88
 

  • ARMv8 Cortex-A Cache 구성확인  

   기본구성은 역시 ARMv7과 동일하지만 L3까지도 사용이 가능한것 같다.
   이곳에서 보면 Cortex-A 가 L2 Cache를 보면 여러 Core를 공유하며 사용하는 것 같다.

  https://developer.arm.com/docs/den0024/latest/11-caches


  • Cortex-A8의  Architecture 및 Pipleline 구조 

  http://processors.wiki.ti.com/index.php/Cortex-A8

  http://processors.wiki.ti.com/index.php/Cortex-A8_Features
  http://processors.wiki.ti.com/index.php/Feature_Comparison:_ARM_926,_1136_and_Cortex-A8
  http://processors.wiki.ti.com/index.php/Cortex-A8_Architecture

  https://namu.wiki/w/ARM%20Cortex-A%20%EC%8B%9C%EB%A6%AC%EC%A6%88



  • Cortex-A8의 Neon 구조 

  http://processors.wiki.ti.com/index.php/Cortex-A8_Neon_Architecture


1.3 ARM의 MMU 

  http://egloos.zum.com/recipes/v/5232056

Block sizeMaximum
file size
Maximum
file system size
KiB16 GiBTiB
KiB256 GiBTiB
KiBTiB16 TiB
KiB[limits 1]TiB32 TiB

  https://ko.wikipedia.org/wiki/Ext3

  http://superuser.com/questions/521551/cat-proc-meminfo-what-do-all-those-numbers-mean
  http://absorbed.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%82%A8%EC%95%84-%EC%9E%88%EB%8A%94-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%A4%ED%95%B4%EC%99%80-%EC%A7%84%EC%8B%A4

1.4 AMBA (Advanced Microcontroller Bus Architecture)

ARM 내부에서 사용되어지는 BUS이며 AHB, ASB, APB 등으로 구성이 되며 ARM에서는 이를 AMBA라고한다.
Version에 따라 구성역시 달라지기 때문에 이는 AMBA의 Version을 확인하고 구성을 확인하는 것이 좋다.
예를 들면 ASB 같은 경우, 현재 사용 AMBA 3 이후 부터는 사용되지 않고 있다.
AMBA의 중요성은 System의 성능과도 가장 밀접하며, BUS의 Clock에 따라 전체 System의 성능이 좌우 되기 때문이다.
아무리 Core가 늘어난다고 하여도, 늘어날수 있는 성능의 한계는 이미 정해져 있다고 본다.

   https://www.arm.com/products/system-ip/amba-specifications.php
   https://en.wikipedia.org/wiki/Advanced_Microcontroller_Bus_Architecture

  • ARM Architecture 전체적인설명
   https://en.wikipedia.org/wiki/ARM_architecture
   http://www.arm.com/products/processors/instruction-set-architectures/index.php

ARM Version 별로 개별의 Core의구성이 있는 이에 관한 간단한 설명이 되어 있기에 쉽게 이해가능하다.

  • ARM CPU 비교
   이제 위에 익히 기본지식으로 아래의 ARM을 비교해보자.
   L3 Cache는 현재 Apple에서 사용하는 것 같다.

  https://en.wikipedia.org/wiki/List_of_ARM_microarchitectures

  • Cortex 관련 문서 (ARMv7)
  현재 Cotex는 V7과 V8을 사용하고 있다.

  https://web.eecs.umich.edu/~prabal/teaching/eecs373-f10/readings/ARMv7-M_ARM.pdf


2. ARM의 Cortex-Core 기본비교 

최근에 가장 많이 사용하고 있는 ARM Core Version은 V7이며, 이를 Cortex라고 부르면,
이를 A,M 나누고 세부적으로 더 나눈다.

이를 정확히 이해하기 위해서 세부기능의 사용용도와 정확한 용어를 메뉴얼에서 습득하자.

  • Cortex Version 의 각 기능별 성능 비교 
   https://en.wikipedia.org/wiki/Comparison_of_ARMv7-A_cores

현재 ARM Core Version을 사용한 CPU 제품들은 많으며, 이를 일부를 나타내고 있다.

  • ARM Core를 사용한 제품군들
   https://en.wikipedia.org/wiki/List_of_applications_of_ARM_cores


만약 아키텍쳐로 비교를 원한다면, PowerPC와 비교를 하면될꺼 같다.
13년전만 해도 가장 많이 사용을 했지만 현재는 거의 사용이 되고 있지 않는것 같다.

   https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9B%8CPC
   https://en.wikipedia.org/wiki/PowerQUICC


3. ARM의 기본 정보 및 문서 

  • ARM Core 일반적인 설명 및 성공요인
   https://namu.wiki/w/ARM(CPU)


  • ARM에 관련 문서
   ARM에 관련되어 한글이 지원되며, 쉽게 설명이 되어 이해하기가 쉽다.
   ARM 사이트에서 제공하는 Help이며, ARM 관련된 문서를 제공한다
   http://infocenter.arm.com/help/index.jsp