분류 전체보기 154

자바 코딩 테스트 - 구간 합. 백준 11659 , 11660, 10986 문제

'Do it! 알고리즘 코딩테스트 자바 편' 교재로 공부한 내용을 정리했습니다 구간 합 구간 합은 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 것이다. 코딩 테스트에서 자주 사용되므로 잘 알아둡시다. 먼저 합 배열이 무엇인지 정의합시다. 만약 배열 A 가 있을 때 합 배열 S는 아래와 같다. S[i] = A[0] + A[1] + A{2] + … A[i-1] + A[i] 즉, S[i] 는 A[0] 부터 A[i] 까지의 합이다. 합 배열은 기존 배열을 전처리한 배열이라고 할 수 있다. 만약 이렇게 합 배열을 구해 놓으면 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(N) 에서 O(1) 으로 줄어든다. 예를 들어서 A[i] ~ A[j] 까지의 배열 합을 구해야 한다고 합시다. 합 배열 ..

자바 코딩 테스트 - 배열과 리스트, 백준 11720, 1546 문제

'Do it! 알고리즘 코딩테스트 자바 편' 교재로 공부한 내용을 정리했습니다. 배열과 리스트 배열 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조 배열의 특징 Index 을 사용하여 값에 바로 접근할 수 있다. 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다. 값을 삽입/삭제 하려면 해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요하다. 배열의 크기는 선언할 때까지 지정할 수 없으며 한 번 선언하면 크기를 늘리거나 줄일 수 없다. 구조가 간단하여 코딩 테스트에서 많이 사용한다. 리스트 값과 포인터를 묶은 ‘노드’를 포인터로 연결한 자료구조 리스트의 특징 인덱스가 없어서 값에 접근하려면 Head Pointer 에서부터 순서대로 접근해야 한다. 포인터로 연결되어 있으므로 데이터 ..

자바 예외처리란 무엇인가

프로그래밍을 할 때 "예외가 많이 발생할 것 같은 case 니까 예외 처리 잘 해야 될 것 같은데?" 라는 말을 자주 들은 적이 있다. 그래서 예외가 일어날 것 같은 상황에서 try - catch 문(java에서)으로 예외를 처리하고는 했는데 정작 이 경우 if 조건문으로 처리하는 것과 무엇이 다른지 정확히 알지 못하는 것 같았다. 그래서 자바 예외 처리를 자세히 공부하고 정리하려고 한다. 기본적인 내용은 "Do it! 자바 프로그래밍 입문" 교재를 참고하였습니다. 예외 클래스 시스템에서 오류는 보통 프로그래머가 코드 작성 실수로 인해 발생하는 'Compile Error' 와 프로그램이 실행되는 도중 의도하지 않은 동작을 하여 발생하는 'Runtime Error' 로 나뉜다. 그리고 RuntimeErro..

Java 2022.12.31

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