본문 바로가기

전체 글

(594)
[JAVA] 파일입출력 원리 1. 파일 객체를 만든다. 2. 해당 파일을 열어 읽는다. (+읽은 내용 알아서 처리, 어디다 쓰든지 문자열을 바꾸던지 뭐 맘대로 하면 된다.) 3. 파일을 닫는다. 자바 파일 입출력 (txt파일 한 문자씩, 한 줄씩, 한 번에 읽기) 자바 파일 입출력 원리 1. 파일 객체를 만든다. 2. 해당 파일을 열어 읽는다. (+읽은 내용 알아서 처리, 어디다 쓰든지 문자열을 바꾸던지 뭐 맘대로 하면 된다.) 3. 파일을 닫는다. 1) 한 문자씩 읽�� jeong-pro.tistory.com
[JAVA] 배열 길이
[JAVA] 배열 선언
[JAVA] static 1. static 정리 일반적으로 우리가 만든 Class는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap영역에 생성됩니다. 객체의 생성시에 할당된 Heap영역의 메모리는 Garbage Collector를 통해 수시로 관리를 받습니다. 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 됩니다. [ Static 변수 특징 ] Static 변수는 클래스 변수이다. 객체를 생성하지 않고도 Static 자원에 접근이 가능하다..
JAVA 운영체제에 독립적 운영체제에 독립적이다. 자바 언어가 나오기 전까지 기존의 언어(Programing Language)는 한 운영체제(Window, Linux, Macintosh) 등의 운영체제에 적용하기 위해 많은 노력이 필요했었다. 자바 언어가 나오면서부터 이러한 적용하기 위한 노력들이 줄어들었다. 그 이유는 뭐였을까? 바로 애뮬레이터인 자바가상머신(JVM)을 통해서 가능해졌다. [[기존 언어]] [[운영체제, 하드웨어]] [[자바 언어]] [[JVM]] [[운영체제, 하드웨어]] 기존 언어는 운영체제와 하드웨어 등이 이해 할 수 있도록 각각 운영체제에 맞는 변환과정을 거쳐야 했음 (종속적) 자바 언어는 운영체제와 하드웨어가 아닌 JVM 하고만 통신함, 응용 프로그램으로부터 전달받은 내용..
JVM( Java Virtual Machine ) 자바 가상 머신의 구성 자바 가상 머신(JVM)은 다음과 같이 구성됩니다. 1. 자바 인터프리터(interpreter) 2. 클래스 로더(class loader) 3. JIT 컴파일러(Just-In-Time compiler) 4. 가비지 컬렉터(garbage collector) 자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것이 자바 인터프리터(interpreter)입니다. 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결됩니다. 이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더(class loader)입니다. JIT 컴파일러(Just-In-Time compiler)란 프로그램이 실행 중인 런타임에..
JAVA 프로그램의 실행 과정 자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여, 운영체제와는 독립적으로 동작할 수 있습니다 따라서 자바는 어느 운영체제에서나 같은 형태로 실행될 수 있습니다. 자바 컴파일러(Java compiler) 자바 컴파일러는 자바를 가지고 작성한 자바 소스 코드를 자바 가상 머신이 이해할 수 있는 자바 바이트 코드로 변환합니다. 자바 컴파일러는 자바를 설치하면 javac.exe라는 실행 파일 형태로 설치됩니다. 자바 바이트 코드(Java bytecode) 자바 바이트 코드(Java bytecode)란 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다. 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있습니다..
IDE (Integrated Development Environment) 란 통합 개발 환경(IDE)은 Integrated Development Environment의 줄인말입니다. 단어의 뜻 그대로 통합된 개발 환경입니다. 쉽게 생각해서 그냥 개발환경입니다. 개발을 하면서 사용되는 도구들의 집합이라고 생각하시면 됩니다. 그러면 과연 무엇이 통합되어 있을까요? 통합 개발 환경에 따라 다르지만 보통은 개발하는데 필요한 편집기 언어팩 syntax highlighting git 연동 터미널 각종 테마 기타 플러그인 등 많은 것들을 포함하고 있습니다. 그리고 많은 IDE들이 플러그인을 개발할 수 있도록 열어 두어, 많은 개발자들이 다양한 플러그인을 만들어서 사용할 수 있도록 하고 있습니다.
JDK와 SDK 차이점 JDK란 "Java Development Kit (자바 개발 도구)"이라는 의미이고, SDK란 "Software Development Kit (소프트웨어 개발 도구)"의 약자입니다. 자바만 개발할 수 있는 SDK를 JDK라고 합니다. 마이크로소프트(MS) 등의 다른 회사에서도 SDK라는 이름으로 개발 도구들을 많이 발표합니다. 그런데 현재 JDK 는 대부분 "Java SE 개발 도구"를 의미합니다. "Java EE" 개발도구는 SDK라고 부르더군요. 자바 초보자라면 "Java SE 개발 도구"를 다운받아서 설치하면 됩니다. 결국 자바프로그래밍에서의 JDK와 SDK는, 표현의 차이만 있을 뿐 서로 동일한 것이라고 볼 수 있습니다.
[C/C++] 수학 관련 함수
[관계기반] 숫자 뒤집기(p.18) 방법1 방법2 방법3
관계 기반 알고리즘 설계 탐색기반의 설계방법은 컴퓨터의 빠른 연산속도를 이용하여 짧은 시간에 가능한 해의 집합을 탐색하면서 최적 해를 구하는 기술적인 방법 관계기반 설계방법은 해를 구하는 행위를 하나의 함수로 표현하고 이 함수들의 관계를 이용하여 해를 구하는 아주 효율적인 방법이다. 관계기반 설계를 적용하기 위해서는 문제의 정의 및 상태를 함수로 정의하고 이 함수들 간의 관계를 점화식 혹은 이와 유사한 형태로 표현할 수 있어야 한다. 관계기반 설계에서는 수학적 귀납법과 점화식 등의 표현이 기반이 되므로 이번 단원에서는 수학적 귀납법에 대해서 간단히 살펴보고 관계기반으로 알고리즘을 설계하는 방법에 대해서 다룬다.
[DFS] 돌다리 건너기(p.239) f(악마/ 천사의 돌다리, 시작 인덱스, 두루마리 인덱스) 1 과 2 라인을 선택해서 시작점을 정한다. 두루마리에 있는 값과 일치한다면 다음 인덱스로 넘어간다. 마지막 점에 도착하였다면 return 1
[DFS] 좋은 수열(p.226) (a==b ? false:i==b); a=b라면 false a!=b 라면 i==b에 관한 참, 거짓 여부를 return한다. 이 방법보다 조금 더 효율적인 방법을 생각해볼 수 있다. 만들어진 수열의 좋은 수열 여부를 판단할 때, 새로 붙은 수를 포함하는 것으로만 평가해 보는 것이다. 이 때 좋은 수열을 판단하는 방법은 다음과 같다.
삼항연산자
[Linux] 동적 라이브러리 만들기 라이브러리로 쓸 함수가 포함된 소스 두 개 작성 공용으로 각각 컴파일 두개의 오브젝트를 하나의 라이브러리로 통합 링크파일 생성 라이브러리 등록 라이브러리의 함수를 사용 하는 프로그램 소스 작성 라이브러리를 사용하도록 컴파일 실행 PIC(Position Independent Code) 비 PIC 공유 라이브러리를 작성할 수는 있지만 실행할 때 재배치에 시간이 소요되고 다른 프로세스와 코드(.text)를 공유할 수 없는 커다란 단점이 있다. 따라서 공유 라이브러리를 작성할 때는 .c 파일을 PIC로 컴파일 하도록 한다. [Hack #20] 공유 라이브러리에 PIC를 사용하는 이유 ♧ 통상 GNU/리눅스의 공유 라이브러리를 만들 때는 각각의 .C 파일을 PIC(Position Independent Code)가..
정적 라이브러리 만들기 라이브러리로 쓸 함수가 포함된 파일 두개 만들기 컴파일 해서 오브젝트로 만들기 두개의 오브젝트를 하나의 라이브러리로 합치기 라이브러리를 사용할 메인프로그램 코딩 라이브러리를 포함해서 컴파일 동작 실행 1. 라이브러리로 쓸 함수가 포함된 파일 두개 만들기 2. 컴파일 해서 오브젝트로 만들기 #gcc -c file1.c file2.c c 옵션은 오브젝트 파일을 만드는 옵션이다. 오브젝트 파일은 .o 확장 자를 가지며, elf 바이너리 구조이다. 결과물 : file1.o file2.o 3. 두개의 오브젝트를 하나의 라이브러리로 합치기 #ar rscv libstatic.a file1.o file2.o 두개의 오브젝트 파일을 libstatic.a 파일로 합친다. ar은 tar 과 비슷하며, archive 를 뜻한..
동적, 정적 라이브러리 개념설명과 gcc에서 사용하기 유연성 부족 문제에 의해서 정적라이브러리를 지양(피하는)한다. 유연성을 올리기 위해서 동적 라이브러리를 이용한다 동적링크라이브러리(Dynamic Link Library) - .dll 동적라이브러리는 실행시간에 실행 프로세스 주소 공간으로 로드됩니다. 정적라이브러리처럼 컴파일 시에 함수가 연결되는 방식이 아닌 런타임시에 함수가 실행파일에 연결된다. 실행파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않으므로 실행 파일의 크기가 작아진다. 하지만 실행 파일은 함수에 대한 정보만 가지고 있을 뿐 실제 코드를 가지고 있지 않기 때문에 프로그램 실행시에는 dll 파일이 항상 존재해야 한다. 실행 시간에 라이브러리 파일을 찾아 코드를 포함하기 때문에 동적라이브러리라고 부른다 즉 정적 라이브러리는 ..
[CUDA] 프로세서 CUDA Thread Hierachy와 CUDA Processor간의 관계 CUDA Processor와 CUDA의 논리적인 구조는 다음과 같은 상관 관계가 있습니다. CUDA Architecture CUDA Logical Architecture CUDA Processor CUDA Kernel/Grid CUDA Multi-Processor 복수의 CUDA Block CUDA Core CUDA Thread CUDA Thread Index 구성 CUDA Kernel을 개발하실때 주지해야 하는 사항은, 여러분이 짜는 CUDA 코드는 병렬적으로 처리되는 코드이지만, CUDA Thread 입장에서는 오직 하나의 Thread만이 동작하는 코드입니다. 따라서 CUDA Thread는 고유의 Index를 갖고 있으며, 이..
[CUDA] 프로그래밍 시작 CUDA 메모리를 할당하고 해제한다. CUDA 메모리에 데이터를 복사해야 한다. CPU에서 For 문제 의해 했던 것을 cuda thread 수로 계산을 해야한다. CUDA에서는 __global__이라는 키워드가 붙은 함수로 CUDA 연산을 구동시킨다. GPU는 CPU와는 별도의 메모리 구조를 갖고 있고, 따라서 별개의 메모리를 사용합니다. 주소 공간을 분할해서 쓰는 것이 아니라 아예 다른 메모리입니다. 그래픽 카드를 살때 보면 옆에 1GB, 2GB.. 등으로 메모리 용량을 표시하는데 그 메모리를 사용하는 것입니다.
[CUDA] 프로그래밍 모델( kernel, thread ) ​ 1. Kernel CUDA에서는 kernel이라 불리는 함수를 정의할 수 있습니다. 일반 C 함수와 kernel의 차이점은 호출시 N개의 CUDA 쓰레드에서 병렬로 실행된다는 것입니다. kernel은 __global__이라는 specifier와 호출 시 실행될 횟수를 정의하는 execution configuration syntax로 정의 됩니다. 각 kernel을 실행하는 쓰레드는 고유한 thread ID를 가지며 threadIdx라는 built-in로 접근할 수 있습니다. ​ 다음 코드는 N개의 A와 B 백터를 더하는 샘플 코드입니다. 여기서 N개의 쓰레드가 VecAdd를 실행하여 각각 한번씩 더하기를 실행하게 됩니다. 전체 코드는 CUDA sample의 vectorAdd에서 볼 수 있습니다. 2...
[CUDA] Visual Studio 프로젝트 만들기 1. Host와 Device CUDA에서 Host는 CPU, Device는 GPU를 의미합니다. CUDA에서 "C++, Python등 일반적으로 사용하는 프로그래밍 코드로 작성된 프로그램은 Host에서 실행된다" 라고 표현합니다. 2.1 kernel CUDA에서 __global__이라는 키워드는 아래와 같은 함수를 의미합니다. · Device(GPU)에서 실행됩니다. · Host(CPU)에서 호출가능합니다. 위와 같이 __global__키워드가 붙는 함수를 CUDA에서는 커널(kernel)이라 부릅니다. ​ 2.2 kernel 실행 kernel은 일반 C 함수와 달리 N개의 쓰레드에서 병렬로 실행될 수 있습니다. 이러한 기능은 라는 문법을 통해 정의 됩니다. 위의 예제에서 은 1개의 CUDA thread..
SIMD, SISD SIMD(Single Instruction Multiple Data)는 병렬 프로세서의 한 종류로, 하나의 명령어로 여러 개의 값을 동시에 계산하는 방식이다. 벡터 프로세서에서 많이 사용되는 방식으로, 비디오 게임 콘솔이나 그래픽 카드와 같은 멀티미디어 분야에 자주 사용된다. CPU에서는 인텔의 MMX, 스트리밍 SIMD 확장(SSE)과 AMD의 3D나우! 등의 기술에서 이를 적용했다. Intel SIMD 아키텍처인 MMX, SSE, AVX 등은 실시간 그래픽 지원을 위해서 만들어졌기 때문에 데이터 타입과 아키텍처에 따라 벡터 길이가 2에서 16 워드 정도인 2,3,4 차원 처리를 위해 고안되었다. SIMD (Single Instruction Multiple Data)에 대한 집중탐구! ​안녕하세요~! ..
CUDA 설치 windowx86_64 NVIDIA CUDA Window에 설치하기(병렬처리, 엔비디아 쿠다 설치) 이번에는 NVIDIA GPU를 이용하여 병렬 처리를 지원하는 CUDA를 윈도우에 설치해보도록 할게요. CUDA의 경우 NVIDIA GPU(그래픽 카드)를 이용하기 때문에 하드웨어 지원이 필요하기 때문에 현재 사용 중�� ghostweb.tistory.com
[Basic] cpu, core, processor 0 중앙 처리 장치 또는 CPU(영어: central processing unit)는 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행하고 처리하는 가장 핵심적인 컴퓨터의 제어 장치, 혹은 그 기능을 내장한 칩을 말한다. 컴퓨터 안의 중앙 처리 장치(CPU)는 외부에서 정보를 입력 받고, 기억하고, 컴퓨터 프로그램의 명령어를 해석하여 연산하고, 외부로 출력하는 역할을 한다. 따라서 중앙 처리 장치(CPU)는 컴퓨터 부품과 정보를 교환하면서 컴퓨터 시스템 전체를 제어하는 장치로, 모든 컴퓨터의 작동과정이 중앙 처리 장치(CPU)의 제어를 받기 때문에 컴퓨터의 두뇌에 해당한다고 할 수 있다. 실제의 CPU 칩엔 실행 부분뿐만 아니라 캐시 등의 부가 장치가 통합된 경우가 많다. CPU에는 MCU(Micro Cont..
CUDA GPU 환경 제공하는지 확인 기본적으로 CUDA가 엔비디아nVidia사에서 만든 플랫폼이므로 엔비디아의 지포스 제품이면 일단 가능성은 있지 않을까 생각해 볼 수 있을 것 같습니다. 그리고 GTX 붙으면 일단 된다고 보시면 될 것 같습니다. 요기로 가시면 CUDA가 가능한 GPU인지 확인해 보실 수 있습니다. https://developer.nvidia.com/cuda-gpus CUDA GPUs Recommended GPU for Developers NVIDIA TITAN RTX NVIDIA TITAN RTX is built for data science, AI research, content creation and general GPU development. Built on the Turing architecture, it feat..
그래픽 카드 윈도우10 그래픽 카드 확인하는 방법 윈도우10 그래픽 카드 확인하는 방법 환경: windows 10 보통 새로 나온 게임을 설치하기 전에 내 컴퓨터의 사양을 체크합니다. 게임에서는 컴퓨터 장치 중 그래픽 카드가 중요한 하드웨어 중 하나이 mainia.tistory.com [용어설명] GPU의 원리 & 그래픽카드 스펙 보는 법 그래픽 카드란 무엇인가?라고 물어본다면, 당연히 "컴퓨터의 그래픽을 처리하는 장치"라는 원론... blog.naver.com
CUDA란 CUDA ("Compute Unified Device Architecture"),는 그래픽 처리장치(GPU)에서 수행하는 알고리즘을 코딩하는데 있어서 C 프로그래밍 언어를 사용할 수 있도록 하는 GPGPU 기술이다. CUDA는 엔비디아(Nvidia)에 의해서 개발되어져왔고 이 아키텍쳐의 사용하기위해선 Nvidia GPU와 특별한 스트림 처리 드라이버가 필요하다. CUDA는 G8X GPUs로 구성된 GeForce 8시리즈에서 동작할 수 있다.; Nvidia는 GeForce 8 시리즈상에 작성된 프로그램은 앞으로 개발될 Ncidia 비디오 카드에서도 프로그램 수정없이 작동할 것이라고 선언했다. CUDA는 CUDA GPUs 안의 명령셋과 대용량 병렬처리 메모리를 접근할 수 있도록 해준다. 최초의 CUDA SD..
SDK, API, IDE API Application Programming Interface 의 약자이다. API는 프로그램의 기능을 다른 프로그램이 쓸 수 있게 하는 것이 목적입니다. 운영체제가 응용프로그램을 위해 제공하는 함수의 집합으로 응용프로그램과 디바이스를 연결해주는 역할을 한다. API는 특정 시스템을 프로그래밍 하기위한 함수의 집합을 이르는 일반 명사이며 그중의 하나가 윈도우즈 API나 요즘은 일반적으로 API라고 하면 윈도우즈 API를 말하는 경우가 많다.그래서 통상 API를 공부 한다라고하면 이는 윈도우즈 API를 말하는데.. 윈도우 os가 그만큼 대중화되었다는 것이겟지? 운영체제는 하드웨어와 응용프로그램 사이에 위치하며 응용 프로그램을 대신하여 하드웨어와 메모리를 관리하는 시스템 소프트웨어이다. 16비트운영체제..
private, firstprivate, lastprivate firstprivate : 각 스레드가 고유 한 변수 인스턴스를 가져야하고 변수가 병렬 구문 이전에 존재하기 때문에 변수 값으로 초기화되도록 지정합니다. lastprivate : 변수의 엔 클로징 컨텍스트 버전이 최종 반복 (for-loop 구문) 또는 마지막 섹션 (#pragma 섹션)을 실행하는 스레드의 개인 버전과 동일하게 설정되도록 지정합니다. lastprivate를 사용하여 i을 루프 외부에서 마지막 값으로 반환 할 수 있습니다. private 변수는 초기화되지 않습니다. 즉, 다른 로컬 자동 변수와 같은 임의의 값으로 시작합니다 (그리고 종종 각 스레드의 스택에서 자동 변수를 사용하여 구현 됨). 이것은 i의 값이 병렬 영역 내에서 임의적 (초기화되지 않음)이며 병렬 영역 이후에 수정 된 부분..