전체 글 (611) 썸네일형 리스트형 [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의 값이 병렬 영역 내에서 임의적 (초기화되지 않음)이며 병렬 영역 이후에 수정 된 부분.. LIS(Longest Increasing Subsequence, 최장증가 부분 수열) 주어진 어떤 수열에서 순서대로 증가하면서 커지는 가장 긴 수열 LIS를 찾아내는 다양한 방법을 생각하고 만들어낼 수 있지만 재귀적 문제해결사고를 활 용할 수도 있다. 1. k번째 위치를 마지막으로 만들어질 수 있는 LIS의 길이를 solve(k)라고 하자. 2. 그렇다면 solve(k)는 그 이전의 solve(k-1), solve(k-2), solve(k-3), … , solve(3), solve(2), solve(1)들의 길이에 1을 더한 것이라고 생각할 수 있다. [DFS] 저울 추 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 동적할당된 메모리 크기 구하기, _msize 동적 할당된 메모리의 크기 구하기 : C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 1. sizeof 연산자 보통 C 언어에... blog.naver.com calloc, malloc, realloc 1. malloc char* p = (char*) malloc ( sizeof(char) * 10 ) 2. calloc 3. realloc C언어 동적메모리할당(malloc, calloc, realloc, free) * C를 배울때 보통 동적메모리할당은 후반부에 배운다. 이유인즉, 포인터, 배열, 함수 등 기본적인 내용을... blog.naver.com 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 [CNN] Batch Normalization [Part Ⅵ. CNN 핵심 요소 기술] 1. Batch Normalization [1] - 라온피플 머신러닝 아카데미 - Part I. Machine Learning Part V. Best CNN Architecture Part VII. Semantic ... blog.naver.com Batch Normalization은 기본적으로 Gradient Vanishing / Gradient Exploding 이 일어나지 않도록 하는 아이디어 중의 하나이다. 지금까지는 이 문제를 Activation 함수의 변화 (ReLU 등), Careful Initialization, small learning rate 등으로 해결하였지만, 이 논문에서는 이러한 간접적인 방법보다는 training 하는 과정 자체를 전체적.. [ML] 오차(error)와 잔차(residual)의 차이 만약 모집단에서 회귀식을 얻었다면, 그 회귀식을 통해 얻은 예측값과 실제 관측값의 차이가 오차이다. 반면 표본집단에서 회귀식을 얻었다면, 그 회귀식을 통해 얻은 예측값과 실제 관측값의 차이가 잔차이다. 둘의 차이는 모집단에서 얻은 것이냐 표본집단에서 얻은 것이냐 뿐이다. 사실상 우리는 대부분 표본집단에서 회귀식을 얻기 때문에, 잔차를 가지고 회귀식의 최적의 파라미터 값들을 추정한다. 즉, 잔차들의 제곱들을 더한 것(잔차제곱합)을 최소로 만들어주는 파라미터를 찾는 것이다. 이것이 바로 최소제곱법(least squares method)이다. 최소제곱법은 최소자승법과 동의어다. ▶ 최소자승법(least square method)이란? 이제 투영이라는 개념과 최소자승법과 어떻게 연관되어 있는지 알아볼 시간이다... [ML] ResNet 2 ResNet의 저자들은 컨볼루션 층들과 fully-connected 층들로 20 층의 네트워크와 56층의 네트워크를 각각 만든 다음에 성능을 테스트해보았다. 위 그래프들을 보면 오히려 더 깊은 구조를 갖는 56층의 네트워크가 20층의 네트워크보다 더 나쁜 성능을 보임을 알 수 있다. 기존의 방식으로는 망을 무조건 깊게 한다고 능사가 아니라는 것을 확인한 것이다. 뭔가 새로운 방법이 있어야 망을 깊게 만드는 효과를 볼 수 있다는 것을 ResNet의 저자들은 깨달았다. Residual Block 그것이 바로 ResNet의 핵심인 Residual Block의 출현을 가능케 했다. 아래 그림에서 오른쪽이 Residual Block을 나타낸다. 기존의 망과 차이가 있다면 입력값을 출력값에 더해줄 수 있도록 지름길.. 배낭 문제 오른편 절단 가능 소수 전체 탐색 f(0,0) f ( 1 , 1 ) - f ( 11 , 2 ) - f ( 12 , 2 ) 이런 구조로 길이가 n인 순열이 생성되고, 생성된 수를 4~11행의 소수 판별함수로 오른쪽부터 하나씩 절단하면서 소수인지 판단한다. 이 때 n/10으로 수를 분리하면 된다. 만약 오른쪽을 절단하면서 체크하는 과정에서 하나라도 소수가 아니면 바로 취소하고, 다음 숫자로 넘어간다. 만약 오른편 절단 가능 소수임이 판단되면 전체 개수를 저장하는 변수 cnt 값을 1증가시키고, 그 수를 화면에 바로 출력한다. 최대값 구하기 탐색하기 전 먼저 해를 저장할 변수인 ans를 0으로 초기화한다. 여기서 주의할 점은 각 원소들 중 음수값이 존재할 경우 최댓값을 구하기 위해 ans를 0으로 초기화하면 안 된다는 점이다. 이 문제는 음수값이 존재하지 않기 때문에 ans를 0으로 초기화하고 문제를 해결한다. BFS - 너비 우선 탐색 너비우선탐색은 백트랙을 하지 않는다. 대신에 현재 정점에서 깊이가 1인 정점을 모두 방문해야 하므로 큐(queue)라는 선입선출(FIFO) 자료구조를 활용하여 현재 정점에서 깊이 가 1 더 깊은 모든 정점을 순차적으로 큐에 저장하여 탐색에 활용한다. 알고리즘 :: BFS 너비 우선 탐색 (C/C++ 구현), 탐색알고리즘 BFS 너비 우선 탐색 탐색을 할때 너비를 우선으로 탐색하는 알고리즘 BFS 탐색 알고리즘을 통해 '최단 경로'를 찾을 수 있다. 응용하면 미로찾기와 같은 알고리즘도 구현할 수 있다. BFS를 구현하기 hongku.tistory.com [C++ / STL] sort std::sort(Size, Size+cnt, cmp) 왼쪽이 오른쪽에 비해서 크다. -> 내림차순 왼쪽에 있는 것이 더 클 수 있도록 정렬하겠다. 왼쪽에 있는 것이 오른쪽에 비해서 더 작도록 정렬하겠다. -> 오름차순 std::sort(Size, Size+cnt, cmp) std::vector() std::upper_bound() std::queue() 8. C++ STL sort() 함수 다루기 ① 지난 시간까지 선택 정렬, 버블 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬의 개념에 대해 이해하고 간단한 프로... blog.naver.com 백트랙 다음 전체탐색을 위한 백트랙을 진행하면서 이전 전체탐색의 흔적을 지워야 한다는 것이다. 너비우선탐색은 백트랙을 하지 않는다. 대신에 현재 정점에서 깊이가 1인 정점을 모두 방문해야 하므로 큐(queue)라는 선입선출(FIFO) 자료구조를 활용하여 현재 정점에서 깊이가 1 더 깊은 모든 정점을 순차적으로 큐에 저장하여 탐색에 활용한다. 빌드 속 컴파일 1. 컴파일(Compile) 컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. (목적파일이 생성됨) 즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다. 이러한 작업을 해주는 프로그램을 가르켜 컴파일러(Compiler)라 한다. 자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성이 된다. 2. 링크(link) 프로젝트를 진행하다 보면 소스파일이 여러개가 생성이되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수(메서드)를 호출하는 경우가 있다. 이때 A와 B 소스파일 각각을 컴파일만 하면 A가 B에 존재하는 함수를 찾질 못하기 때문에 호출할 수가 없다. 따라서 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 한다. 여러개로 .. [C/C++] header파일 #include 을 사용하면 'iostream'이라는 헤더 파일의 모든 내용을 복사해오도록 요청한다. 이렇게 하면 헤더 파일의 내용을 코드 파일에서 사용할 수 있다. 헤더 파일은 일반적으로 선언만 포함하므로 어떻게 구현되는지 정의하지는 않는다. 실제 정의는 링크 단계에서 자동으로 프로그램에 링크되는 C++ 런타임 지원 라이브러리에서 구현된다. 만약 iostream 헤더 파일이 존재하지 않는다면, cout과 관련된 모든 선언을 각 파일의 맨 위로 일일이 복사해야 한다 전방 선언과 정의'에서 컴파일러가 main.cpp를 컴파일할 때 'add'가 무엇인지 알 수 있도록 전방 선언(forward declaration)을 했었다. 사용하고자 하는 모든 함수에 대한 전방 선언을 각 파일에 작성하는 것은 매우 지루한.. [C/C++] scanf 이전 1 ··· 16 17 18 19 20 21 다음 목록 더보기