본문 바로가기

IT

(228)
Double buffering 버퍼란 어떤 장치에서 다른 장치로 데이터를 송신할 때 일어나는 시간의 차이나 데이터 흐름의 속도 차이를 조정하기 위해 일시적으로 데이터를 기억시키는 장치이다. 싱글버퍼(single buffer)의 경우 채널이 데이터를 버퍼에 저장하면 프로세서가 처리하는 방식으로 진행된다. 이경우 채널이 데이터를 저장하는 동안에는 데이터에 대한 처리가 이루어질 수 없으며, 프로세서가 데이터를 처리하는 동안에는 다른 데이터가 저장될 수 없게된다. 더블버퍼(double buffer)의 경우에는 데이터에 대한 저장과 처리가 동시에 일어날 수 있다. 입력채널이 첫 번째 버퍼에 데이터를 저장하는 동안 프로세서가 두 번째 버퍼의 데이터를 처리할 수 있는 것이다. 이렇게 두개의 버퍼를 서로 교대로 사용하는 것을 플립플롭버퍼링(flip..
Data prefetching 앞으로 연산에 필요한 data들을 미리 가져오는 것 Data Prefetch Data prefetch Data prefetch란 앞으로 연산에 필요한 data들을 미리 가져오는 것을 의미합니다. 미리 가져온다... 미리 가져오면 좋은점이 어떤 것이 있을까요? 바로 Memory latency를 감출 수 있습니다.. wh00300.tistory.com
Batch Processing(배치 프로그램) 일괄 처리(batch processing)란 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식을 뜻한다. 초기의 일괄처리 방식은 사용자와 상호작용하는 것이 불가능했지만, 운영 체제가 발전함에 따라 프로그램 입출력을 통해 상호작용하는 것이 가능해졌다. 일괄 처리는 1950년대 전자 컴퓨팅 초기 시절 이후 메인프레임 컴퓨터와 함께하고 있다. 여기서 중요한 것은 바로 일괄처리 입니다. 개별적으로 어떤 요청이 있을 때마다 실시간으로 통신하는 것이 아닌 한꺼번에 일괄적으로 대량 건을 처리하는 것입니다. 특히 배치는 보통 정해진 특정한 시간에 실행됩니다. 1. 대량건의 데이타를 처리한다. 2. 특정 시간에 실행된다. 3. 일괄적으로 처리한다. S보험회사의 대표인 중앙처리시스템이 대표로 S보험회사가 보유하..
swp(스왑파일) 생성 오류 rm 사용해서 없앤다. [Linux] 리눅스 vi 에디터 스왑파일(swp) 생성시 해결방법 vi 에디터 스왑파일 생성시 해결방법 vi 에디터 또는 vim 에디터를 사용하다가 파일을 실행하는 경우 다음과 같은 경고를 마주하게 될 때가 있습니다. (여기서는 한국어 버전 리눅스를 사용했는데 dololak.tistory.com
[Intellij] 단축키 Intellij의 모든 단축키를 알고 싶다면 "Ctrl + J"를 누르십시오. 모든 바로 가기가 표시됩니다. System.out.println ()의 경우 "sout"을 입력하고 "Tab"키를 누릅니다. 설정 (기본적으로 Alt + Ctrl + S)을 열고 라이브 템플릿을 검색하십시오.
IDE (Integrated Development Environment) 란 통합 개발 환경(IDE)은 Integrated Development Environment의 줄인말입니다. 단어의 뜻 그대로 통합된 개발 환경입니다. 쉽게 생각해서 그냥 개발환경입니다. 개발을 하면서 사용되는 도구들의 집합이라고 생각하시면 됩니다. 그러면 과연 무엇이 통합되어 있을까요? 통합 개발 환경에 따라 다르지만 보통은 개발하는데 필요한 편집기 언어팩 syntax highlighting git 연동 터미널 각종 테마 기타 플러그인 등 많은 것들을 포함하고 있습니다. 그리고 많은 IDE들이 플러그인을 개발할 수 있도록 열어 두어, 많은 개발자들이 다양한 플러그인을 만들어서 사용할 수 있도록 하고 있습니다.
삼항연산자
[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의 값이 병렬 영역 내에서 임의적 (초기화되지 않음)이며 병렬 영역 이후에 수정 된 부분..
Openmp 참고사이트 Chapter 3: nested If we have nested for loops, it is often enough to simply parallelize the outermost loop: a(); #pragma omp parallel for for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { c(i, j); } } z(); This is all that we need most of the time. You can safely ppc.cs.aalto.fi
WinScp 편집기 winSCP - 기본 에디터 변경 winSCP 파일 홈에디터플러스로 열기 winSCP에서 파일을 클릭하면 Internal Text Editor가 기본적으로 작동합니다. 의외로 쓸만하고 가볍고 좋습니다. ▼Internal Text Editor 에디터 https://winscp.net/eng/docs.. gocoder.tistory.com
visual studio 콘솔 창 Visual Studio 콘솔 창 꺼짐 현상 해결 (Ctrl+F5 디버그하지 않고 시작) 종강하고 오랜만에 공부하려 마음을 먹고 비주얼 스튜디오에 새 프로젝트를 만들고 간단한 출력문부터 쳐봤... blog.naver.com
빌드 속 컴파일 1. 컴파일(Compile) 컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. (목적파일이 생성됨) 즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다. 이러한 작업을 해주는 프로그램을 가르켜 컴파일러(Compiler)라 한다. 자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성이 된다. 2. 링크(link) 프로젝트를 진행하다 보면 소스파일이 여러개가 생성이되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수(메서드)를 호출하는 경우가 있다. 이때 A와 B 소스파일 각각을 컴파일만 하면 A가 B에 존재하는 함수를 찾질 못하기 때문에 호출할 수가 없다. 따라서 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 한다. 여러개로 ..
vi 편집기 문자열 찾기 vi, vim 문자열 찾기 / 바꾸기 vi, vim 문자열 찾기 바꾸기 vi 문자열 찾기 vi, vim에서 문자열을 검색하기 위해서는 일반모드(vi를 실행한 상태, 입력모드나 명령행 모드라면 ESC로 빠져나온 상태)에서 "/"를 입력하고 찾을 문자열�� ttend.tistory.com Bash 입문자를 위한 핵심 요약 정리 (Shell Script) 블로그와 SNS에서 주기적으로 기술 정보를 찾고 분류하여 가치를 더해 공유합니다. blog.gaerae.com
[Linux] sh파일로 gcc 컴파일 chmod 700 gcc.sh linux에서 sh 파일로 gcc컴파일 쉽게 하기 sh 파일에 자주 쓰는 명령어를 담아 놓으면 일일이 명령어를 타이핑할 필요 없이 sh파일을 실행해서 명령어들을 한꺼번에 수행할 수 있다. 유의사항) #!bin/bash 다 붙여서 써줘야함 안 그러면 에러� kerry123.tistory.com
gcc 컴파일 이와 같이 향상된 어셈블리어는 인간이 좀더 다루기 쉽도록 도와주기 위한 다양한 명령과 기능을 제공하고 있다. MIPS의 어셈도 마찬가지로 확장된 어셈블리어를 제공하기 때문에, 좀더 사용하기 쉽기는 하겠지만.. 여전히 프로세서의 세부적인 작동방식을 이해하고 있어야만 한다. 위에서 C(:12)/C++같은 고급언어의 경우에는 프로세서의 세부적인 작동방식을 이해하고 있을 필요는 없다. 왜냐하면, 인간이 이해하기 쉬운 코드를 만들어내면, 이것을 c혹은 c++ 컴파일러가 해당 프로세서가 이해할 수 있는 어셈블리어로 변환 시켜주기 때문이다. 때문에 Intel 계열 프로세서에서 작동하도록 만들어진 C프로그램은 거의 코드의 변환 없이 Sparc 프로세서에서도 작동을 한다. 단지 컴파일만 새로 해주면 Sparc 프로세서가..
x86 x86 또는 80x86은 인텔이 개발한 마이크로프로세서 계열을 부르는 말이자, 이들과 호환되는 프로세서들에서 사용한 명령어 집합 구조들을 통칭하는 말이다. x86 아키텍처는 데스크톱 컴퓨터 시장에서 매우 널리 쓰이며, PowerPC 같이 좀 더 근대적인 아키텍처를 사용한 프로세서들이 x86과 경쟁했으나 그다지 많은 시장 점유율을 확보하지는 못했다. x86-64는 x86 명령어 집합 아키텍처의 64비트 모임이다. x86-64 또는 x64의 이름을 일상적으로 사용하기에 이르렀다. SIMD 명령 집합 80486 이후 x86 아키텍처에는 멀티미디어 처리를 위한 SIMD 명령 집합과 이를 위한 레지스터들이 추가되었다. 이 중 처음으로 도입된 것은 펜티엄 MMX에서 소개된 MMX로, 부동소수점 레지스터와 공유되는 ..