[ARM] 성능 최적화
·
CPU
컴파일러 자체 최적화, 산술연산, 루프, if/switch,  함수 관련 최적화를 순서대로 보겠다.최적화는 보통 프로파일러와 함께쓰이며 여러 최적화 기법을 사용하며 그 결과를 비교해볼 필요가 있다.컴파일러 성능 최적화O1,O2,O3 최적화gcc 컴파일러의 최적화 옵션이다.-O1, -O2, -O3의 옵션을 통해 선택할 수 있다.O1 (최적화 레벨 1):기본 최적화: 가장 기본적인 최적화 레벨로, 실행 속도를 크게 저해하지 않으면서 코드 크기를 줄이고 성능을 약간 개선하는 데 중점을 둔다.O2 (최적화 레벨 2):중간 수준 최적화: 더 공격적인 최적화를 통해 코드 실행 속도를 현저하게 향상시킨다. 디버깅 가능성을 약간 희생하고도 성능 최적화를 더 깊이 적용한다.O3 (최적화 레벨 3):고급 최적화: 가장 높..
[임베디드 딥러닝] gprof 프로파일러를 이용해 딥러닝 최적화하기 - 3
·
임베디드 딥러닝
나는 총 3가지의 최적화 기법을 사용하였는데, 하나 하나 살펴보자 다시 공부하니 최적화 기법이 엄청 길고 많아서 따로 정리하는 거도 좋겠다. 일단 여기서는 사용한것만 쓰겠다.  1. Loop 에서 0과 비교하기위 루프의 경우 i 가 10 보다 작은지 비교하고 있고, 아래 루프에서는 i 가 0 과 다른지 비교하고 있는데일반적으로 0 과 비교하는 명령어는 CPU 에서 따로 만들어져 있기 때문에 더 빠르게 작동한다.  2. Loop Unrolling 루프문을 굳이 쓰지 않고 쓸 수 있는 문장들은 되도록 직접 쓰는 것이 좋다.for 문 자체에서 돌때마다 종류 조건 비교 및 변수 증가도 있으므로 시간이 든다. 3. Pointer Chaining포인터 체이닝은 구조체 내에서 정보를 액세스하기 위해 자주 사용된다.코..
[임베디드 딥러닝] gprof 프로파일러를 이용해 딥러닝 최적화하기 - 2
·
임베디드 딥러닝
저번 포스트에서 gcc 컴파일 옵션에서 -pg옵션을 붙였다. 이게 뭔지 알아보자   프로파일?차근차근 보자. 프로그램을 프로파일링한다는 의미는 무엇일까?아래와 같은 주요 측정 지표를 확인하며, 코드의 특정 부분이 얼마나 많은 리소스를 사용하는지 분석하는 과정을 포함합니다. 이를 통해 코드 최적화가 필요한 부분을 식별할 수 있다. CPU 사용 시간: 특정 함수나 코드 블록이 실행되는데 걸리는 시간. 프로파일링을 통해 어느 함수가 CPU 시간을 가장 많이 소비하는지 파악할 수 있습니다.메모리 사용량: 프로그램 실행 중에 사용된 메모리의 양을 측정합니다. 메모리 누수 문제를 파악하거나, 메모리 사용량을 최적화하는 데 유용합니다.함수 호출 횟수: 각 함수가 얼마나 자주 호출되는지를 추적합니다. 높은 호출 빈도를..
[임베디드 딥러닝] gprof 프로파일러를 이용해 딥러닝 최적화하기 - 1
·
임베디드 딥러닝
https://github.com/matteodonati/MNIST_classification_in_C GitHub - matteodonati/MNIST_classification_in_C: Simple tool, written entirely in C, which allows MNIST digits classification usSimple tool, written entirely in C, which allows MNIST digits classification using multilayer perceptrons. - matteodonati/MNIST_classification_in_Cgithub.com 먼저 사용한 소스파일은 위의 오픈 소스를 사용하였다. 정말 쉽게 설명이 되어있는데, testing..
[임베디드 딥러닝] 아두이노Nano에서 손글씨 인식모델 만들기 - 2
·
임베디드 딥러닝
#include #include "main_functions.h"#include "mnist_model_data.h"#include "tensorflow/lite/micro/micro_interpreter.h"#include "tensorflow/lite/micro/micro_log.h"#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"#include "tensorflow/lite/micro/system_setup.h"#include "tensorflow/lite/schema/schema_generated.h"const int kInputTensorSize = 1 * 784;const int kNumClass = 10;// Globals, used..
[CPU] ARM 프로세서
·
CPU
요즘 공부하다접하는게 모두 ARM 관련이다. STM32에서도 정리를 잠깐 했지만 따로 정리해보려한다.쓸 카테고리가 없길래 CPU도 만들었다....하나하나 천천히 알아보자 개요ARM은 Advanced RISC Machine의 약자이다. 직역하면 향상된 RISC 머신 이라고 할 수 있다. ARM프로세서란 RISC 기반의 CPU를 말한다.  그렇다면 RISC란 무엇일까?  RISC는 Reduced Instruction Set Computer 아키텍처의 약자이다. CISC(Complex Instruction Set Computing) 와 달리명령어 세트를 단순화하여 프로세서가 더 효율적으로 작동하도록 하는 것이 목적이다.아래와 같은 특징을 갖게된다.  속도: 단순화된 명령어 세트 덕분에 프로세서가 명령어를 빠르..
[메모리] 컴퓨터 내장저장장치 : HDD
·
메모리
먼저 정리하게 된 계기는... 내가 게임(발로란트)를 D드라이브에 깔았는데 너무 느려서 확인해보니 D드라이브가 HDD여서 로딩 시간이 오래걸린 거였다. 분명히 배웠던건데 잘 기억이 안나서 다시 정리해보려한다.  HDD란?Hard Disk Drive의 약자로, HDD는 자기 디스크(플래터)와 기계적 부품(스핀들, 헤드 등)을 이용해 데이터를 저장하고 읽는다. 데이터를 읽고 쓰기 위해 플래터가 회전하고 헤드가 움직이므로, 물리적인 동작이 포함된다.여기서 말하는 물리적인 동작이 가장 중요한데, 이 점때문에 전기적으로 데이터를 저장하는 SSD보다 접근시간이 느려지게 된다.  다음과같은 구조로 이루어져있고, Spindle을 통해 원판이 회전하고, Disk Head를 통해 Platter위의 정보를 읽는다. Disk..
[임베디드 딥러닝] 아두이노Nano에서 손글씨 인식모델 만들기 - 1
·
임베디드 딥러닝
최종적으로 위와같은 모델을 만들어야된다. 먼저 ML 모델에 대해 알아보자 ML모델CNN 모델과 같은 경우는 Python을 통해 만들었으며, 구글드라이브의 Colab을 활용하여 만들었다.model CNN에 필요한 층 구성 후 , train 데이터를 이용해 학습시킨다. 간단히말해 이 모델은 28x28 픽셀의 흑백 이미지를 입력으로 받아, 이미지 분류 작업을 수행하도록 설계된 간단한 CNN이다. 모델은 여러 합성곱 및 풀링 레이어를 통해 이미지에서 특징을 추출하고, Flatten 및 Dense 레이어를 통해 최종 클래스를 예측한다.여기서 각 층을 수정, 추가, 삭제하며 모델의 추론 시간 및 정확도를 최적화하는 활동이 가능하다.  좀더 자세히 설명하자면Conv2D:  컨볼루션 레이어가 많아질수록 모델의 학습 능..
[임베디드 딥러닝] Tensorflow Lite
·
임베디드 딥러닝
이름을 정하기가 어려웠는데 아두이노 같은  MCU에서 머신러닝하는 것이 주요기능이기에 임베디드 딥러닝으로 정했다. 이 과정을 위해 Tensorflow Lite라는 프레임 워크를 사용했는데  텐서플로우 라이트는 무엇일까? 텐서플로우 라이트(TensorFlow Lite)는 모바일, 임베디드 디바이스, IoT 기기와 같은 자원 제한적인 환경에서 머신러닝 모델을 실행할 수 있도록 구글이 개발한 경량화된 딥러닝 프레임워크이다. 일반적인 텐서플로우 모델을 작은 사이즈로 변환하고 최적화하여 성능을 높이고 메모리 사용량을 줄이는 데 초점을 맞추고 있다.주요 기능:모델 변환: 텐서플로우 모델을 텐서플로우 라이트 모델로 변환하는 도구를 제공합니다. 이 과정에서 양자화(Quantization)나 프루닝(Pruning) 같은..
[xv6] 실습3: thread
·
운영체제/xv6 실습
실습목표: xv6에는 스레드 관련 시스템콜과 함수들이 없다. 직접 구현하여 thread를 support하도록 한다.  thread란?스레드는 프로세스의 일부로, 하나의 프로세스를 여러개로 나누어 여러 작업을 한다고 생각하면된다.하나의 프로세스 내에서 사용되기때문에 힙, 데이터, 코드 영역은 공유하고, 스택영역 메모리만 따로 사용한다. 멀티 프로세스를 사용하는것보다 스레드간 자원공유에 유리하고, context switching에 유리하다. 실습과정: 1. thread_create함수 스레드를 생성하는 함수로, stack 주소를 할당받아서, clone함수를 통해 생성한다. 다른 영역은 공유하므로 stack영역만 할당받으면 된다.  2. lock 관련 함수 lock을 선언하고, 얻고 해제 하는 함수를 선언한다..
다락공방
'분류 전체보기' 카테고리의 글 목록 (3 Page)