CrossCompile 7

Gaussian Blur (OpenCL 사용, GPU 에서)

Gaussian Blur (OpenCL 사용!) 지난 포스팅 (CPU Gaussian Blur) 이후로 Gaussian Blur 을 OpenCl 로 GPU 에서 수행되도록 하는 실습을 진행할 것이다. 지난 포스팅은 아래 링크에서 볼 수 있습니다. https://sh1mj1-log.tistory.com/21 또한 OpenCL 환경에 대해서도 알고 있어야 이번 실습이 가능하기 때문에 OpenCL 에 대해 모르신다면 아래 포스팅도 보고 오시면 도움이 될 겁니다! https://sh1mj1-log.tistory.com/20 바로 실습에 들어가 봅시다. 실습 GPU Gaussian Blur 동작 과정은 위와 같다. Blur.cl 이라는 kernel 파일을 읽고, bmp 파일을 읽은 후, OpenCL 을 구동하기 ..

CrossCompile 2022.11.12

Gaussian Blur (OpenCL 없이 CPU 에서 실습)

Gaussian Blur https://blog.naver.com/PostView.naver?blogId=sees111&logNo=222366804864&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView Gaussian Blur 는 Gaussian Filter 을 이용하여 이미지를 blurring 하는 것이다. blurring 은 마치 초점이 밎지 않은 사진처럼 부드럽게 만드는 필터링 기법이다. Gaussian Filter 란 Gaussian Distribution 함수를 근사하여 생성한 필터 마스크를 사용하는 필터링 기법이다. 가우시안 분포는 평균을 중심으로 대칭의 종 모양을 가지는 확률 분포이다. 아래는 x, ..

CrossCompile 2022.11.12

openCL에서 Vector Add 테스트하기

OpenCL OpenCL(Open Computing Language)는 개방형 범용 병렬 컴퓨팅 프레임워크이다. GPU, CPU, DSP 등의 프로세서로 이루어진 heterogenous 플랫폼에서 실행되는 프로그램을 작성할 수 있어 이식성이 높은 언어이다. 하나의 커널만 만들어도 각기 다른 플랫폼에서 사용하도록 변화하기 쉽다. OpenCL Platform Model Host 는 Master 프로세서이며, Host 프로그램이 동작하는 환경이다. Host 는 입출력 또는 사용자 상호작용 등을 할 수 있도록 인터페이스 역할을 수행한다. Device 는 Slave 프로세서 이며, OpenCL 계산 유닛이다. 즉, 커널 프로그램을 수행한다. Device 의 병렬 연산은 실제로 PE(Processing Elemen..

CrossCompile 2022.11.12

Android NDK& JNI 리눅스 디바이스 드라이버를 사용하여 개발하기

이번에는 리눅스 환경에서 ADB 타겟보드로 크로스 컴파일만 하는 것을 넘어서 안드로이드 (JAVA) 환경에서 C or C++ (Native source) 을 연동/연결하여 상호 호환하는 기술을 학습해봅시다. NDK NDK 는 네이티브 개발 키트 (Native Development Kit) 즉, 안드로이드에서 C 및 C++ 코드를 사 용할 수 있게 해주는 도구 모음. → 네이티브 소스 코드를 사용함으로써 효과는 속도, 연산, 호환성 등의 SDK 보다 빠른 작업 속도 가능. JNI JNI 는 자바 네이티브 인터페이스 (Java Native Interface) 즉, JAVA(JVM) 과 C 및 C++ 을 연결시켜주는 인터페이스. 자바 메서드 호출로 C 및 C++ 로 작성된 코드 및 함수를 실행할 수 있다. 기..

CrossCompile 2022.11.11

Linux Device Driver (LED)

Linux Device Driver Overview Device Hardware, I/O Driver 하드웨어를 구동시키는 Software Device driver privileged mode 에서 drive the device(hardware) OS의 한 부분이다. user application 이 아님! module: kernel object의 또 다른 이름. 런타임에서 추가되거나 삭제될 수 있다. 어떻게 드라이버가 디바이스를 컨트롤할까? 디바이스를 컨트롤한다는 것은 디바이스로 command 와 value을 작성하는 것, 혹은 디바이스로부터 상태나 값을 읽는 것을 의미한다! 메모리와 I/O 는 매핑되어 있는 매커니즘이다. 소프트웨어는 I/O 로부터 값을 읽을 수 있다. 혹은 I/O로 값을 write ..

CrossCompile 2022.11.11

Cross-compile & Linking & Make

사전 지식 Programming Language High-level language 고급 언어는 인간이 이해하기 쉽게 만들어진 언어로 컴퓨터에 대한 전문적인 지식이 없어도 저급 언어에 비해 배우기 쉽고, 기종에 관계없이 공통적으로 사용할 수 있으며, 그 의미를 쉽게 이해할 수 있는 사용자 중심의 언어다. Ex) C, C++, Java Low-level language 고급 언어에 비해 이해하기 어렵고 사용하기는 불편하지만 컴퓨터가 처리하기에 용이한 컴퓨터 중심의 언어이다. 저급 언어는 크게 두가지로 나뉜다. Assembly language 어셈블리어는 기계어와 고급 언어의 사이에 위치한 언어로, 인간이 이해하기 어렵다는 기계어의 단점을 보완하기 위해 나온 언어이다. 컴파일이 빠르지만 배우기 어렵고 유지보..

CrossCompile 2022.11.11

GCC 가 무엇일까요?

GCC 원래 C 언어용 컴파일러로 시작하여 GNU C Compiler의 약자였다. 2.9 버전에 이르러 C 언어뿐 아니라 Objective C, 파스칼, 에이다 같은 언어를 지원하게 되면서 GNU Compiler Collection 으로 변경되었다. Linux, 윈도우, 등 많은 OS를 지원하고 계승하여 호환성이 매우 높다. 자동 레지스터 할당 반복적인 코드 제거 상수 곱셈 최적화 등 의 많은 최적화를 수행하는 Compiler 이다. IDE 를 가지고 있지 않은 Command Line Compiler 이다. Installing GCC on Mac OS X 터미널에서 ❯ gcc --version 혹은 ❯ gcc --v 입력 시 아래처럼 나온다. 보통 설치되어 있다. 설치되어 있지 않다면 설치하라고 말해줄 ..

CrossCompile 2022.11.10