SlideShare a Scribd company logo
1 of 93
Download to read offline
GPGPU: Bruteforce is NOT DEAD !
GPGPU
BruteForce is NOT DEAD !
1
Bruteforce is NOT
DEAD !
GPGPU
How to make “Bruteforcing” Tool using
GPGPU
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
정구범
http://blog.ninetiger.com
admin@ninetiger.com
질문이 있다면,
바로 E-Mail 주세요!
양찬무
http://coldmu.tistory.com
coldmu@naver.com
3
Who we are?
/GPGPU/WHO_WE_ARE
COLDMUNineTiger
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
4
Goal of Lecture
GPGPU, CUDA, OpenCL에 관해 알며,
원하는 모든 알고리즘의 Bruteforcing Toolkit 제작을
할 수 있다.
+매 Section마다의 기프티콘! 개이득!
4
/GPGPU/GOAL_OF_LECTURE
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Content
발전 방향
GPGPU?
CPU vs GPU
Cuda vs
OpenCL
/GPGPU/CONTENT
GPGPU CUDA OpenCL TRAINING
Understanding
CUDA
How to install
CUDA
Hello World !
Understanding
OpenCL
Parallel
Programming
OpenCL
Architecture
Hello World !
OpenCL
Framework
SHA1
Demo
공인인증서
Q & A
5
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
발전 방향
1995년
/GPGPU/FUTURE_DIRECTION
6
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
발전 방향
매니코어가 전력 효율성이 높다.
/GPGPU/FUTURE_DIRECTION
7
입력 프로세서 출력
입력
f
정전용량 = C
전압 = V
동작주파수 = f
Power = CV2
𝑓
프로세서
프로세서
f/2
f/2
출력
f
정전용량 = 2.2C
전압 = 0.6V
동작주파수 = 0.5f
Power = 0.396CV2
𝑓
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
0
2
4
6
8
10
12
14
16
GFLOPS/Watt발전 방향
특화 칩이 전력 효율성이 좋다.
/GPGPU/FUTURE_DIRECTION
8
Intel 80-코어 테라급 프로세서
NVIDIA GTX 280
Intel Core2 쿼드
프로세서 (Q6700)
97W
236W
95W
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
9
매니코어 + 특화된 칩
= 이종 매니코어 플랫폼의 세상 도래
9
/GPGPU/FUTURE_DIRECTION
이런 플랫폼에 맞는 소프트웨어는
어떻게 설계할 것인가
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
GPGPU?
General Purpose Graphics Processing Unit
컴퓨터 그래픽스를 위한 계산만 다루는 GPU를
사용하여 CPU가 하던 프로그램들의 계산을 수
행하는 기술.
이를 가능하게 하는 것이 CUDA, OpenCL 이 있다.
/GPGPU/GPGPU?
10
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
CPU vs GPU
오직 계산을 위한 효율만 높여옴
나머지는 CPU에서 처리
i7의 10개를 합쳐야 나오는 성능.
/GPGPU/CPU_vs_GPU
11
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
CPU vs GPU
CPU 1 , 2, 4, 8, …
GPU 240 , 480, …
/GPGPU/CPU_vs_GPU
12
GPUCPU
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
그래픽 카드 안에 보
드, 메모리, GPU 모두
존재
제조사에서 개발 용이
발전 시간이 매우 빠
름
Ex) CPU와 대조적으로
그래픽카드는 GDDR5
CPU, 메인보드, 메모리
제조사가 다 다름
개발이 덜 용이
발전에 오랜 시간이 걸
림
Ex) 메모리 DDR1 >
DDR3
오랜 시간이 걸림
13
CPU vs GPU
/GPGPU/CPU_vs_GPU
CPUGPU
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
-호환성
+개발 단순
+호환성
-개발 복잡
14
CUDA vs OpenCL
/GPGPU/CDUA_vs_OPENCL
OpenCL
최근 들어,
cuda와 opencl은 10퍼센트미만의 차이점만을 가짐
즉, 무엇을 사용해도 큰 차이점을 보이지는 않는다.
CUDA
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
15
/GPGPU/EXAMPLE
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
16
Review: GPGPU
1. GPU가 제조사에서 개발이 용이하여 발전을 빠
르게 하였습니다. 개발이 용이한 이유?
2. CPU와 GPU의 차이점 아무거나?
16
/REVIEW/GPGPU/GA_2_DUT
CUDA
Computer Unified Device Architecture
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
WHAT
IS THE
Contents?
UNDERSTANDING CUDA
HOW TO INSTALL CUDA
HELLO WORLD
/GPGPU/CUDA/WHATISTHECONTENTS
2
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
3
CUDA?
Data Processing
Load Calculation
TPC/SM/SP
Thread/Block/Grid
CUDA Function
Thread
Basic Function
Function Modifier
Understanding
CUDA
/GPGPU/CUDA/UNDERSTANDING_CUDA
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
CUDA?
Computer Unified Device Architecture
Nvidia사가 GPU를 이용한 범용적인 프로그램
을 개발 할 수 있도록 ‘프로그램 모델‘, ‘프로그
램 언어‘, ‘컴파일러‘, ‘라이브러리‘, ‘프로파일러
'를 제공하는 통합 환경을 구축.
2007년 2월에 통합 개발환경 CUDA 발표.
/GPGPU/CUDA/UNDERSTANDING_CUDA/CUDA?
4
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
5
CPU Data Processing
/GPGPU/CUDA/UNDERSTANDING_CUDA/DATA_PROCESSING
CPU
메인보드
메모리(DRAM)
FPU(실수 연산) ALU(정수 연산)
레지스터
LSU
입력 데이터 출력 데이터
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
6
GPU Data Processing
/GPGPU/CUDA/UNDERSTANDING_CUDA/DATA_PROCESSING
CPU
메인보드
메모리(DRAM)
입력 데이터 출력 데이터
그래픽 카드
GPU
데이터 처리
그래픽 카드 메모리(DRAM)
입력 데이터 출력 데이터
GPU 코어
코어
코어
코어
공유메모리
코어
코어
코어
코어
공유메모리
코어
코어
코어
코어
공유메모리
코어
코어
코어
코어
공유메모리
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
7
/GPGPU/CUDA/UNDERSTANDING_CUDA/LOAD_CALCULATION
Load Calculation
CPU를 이용한
처리 시간
GPU를 이용한
처리 시간
CPU를 이용한
처리 시간
GPU를 이용한
처리 시간
그래픽카드에서
PC로
출력 데이터
전송
PC에서
그래픽 카드로
입력 데이터
전송
실제 연산 시간 전체 프로그램 소요 시간
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
8
TPC / SM / SP
/GPGPU/CUDA/UNDERSTANDING_CUDA/LOAD_CALCULATION
TPC(Texture Processor
Cluster)
SM, Texture Unit, Controller
SM(Streaming Multiprocessor)
SP를 제어, 명령어 캐시, 데이
터캐시
SP(Streaming Processors)
1개의 코어
TPC
Texture Units
Geometry Controller
SMC
Texture L1
SM
I Cache
MT issue
C Cache
SP SP
SP SP
SFU SFU
Shared
Memory
SM
I Cache
MT issue
C Cache
SP SP
SP SP
SFU SFU
Shared
Memory
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Thread / Block / Grid
스레드가 모여서 Block
Block이 모여서 GRID
Grid 2차원
Block 3차원
Dim3 Dg(3, 4, 1)
Dim3 Db(4, 3, 3)
Kernel <<< Dg, Db>>>(a,b,c)
/GPGPU/CUDA/UNDERSTANDING_CUDA/THREAD_BLOCK_GRID
Block(0,1)
Thread(0,0) Thread(1,0)
Thread(0,1) Thread(1,1)
Grid
Block(0,0) Block(1,0)
Block(0,1) Block(1,1)
9
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
10
CUDA Function
/GPGPU/CUDA/UNDERSTANDING_CUDA/CUDA_FUNCTION
__global__ void KernelFunction(int a, int b, int c)
{
// GPU 에서 실행되는 함수.
}
Void main()
{
KernelFunction (1, 2, 3);
}
<< < 블록, 스레드 >>>
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Thread
CPU 환경에서는 CPU 코어 개수와 생성한
스레드 개수가 동일해야 최적의 효율을 냄.
스레드가 많아지면 시분할 스케줄을 시행하여 효율
떨어짐.
CUDA 환경에서는 무조건 잘 쪼개기만
하면 됨.
/GPGPU/CUDA/UNDERSTANDING_CUDA/Thread
11
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
코어의 제한
문맥교환이 비교적 오
래걸림.
레지스터 8~16개
매니코어
문맥교환의 정보 최소
화.
레지스터 SM마다
16,384개
스레드마다 16개 레지
스터 필요 -> 16,384/16
= 1024개
SM 30개 -> 1024 * 30 =
30,720개
12
Thread
/GPGPU/CUDA/UNDERSTANDING_CUDA/Thread2
CPU Context Switch GPU Context Switch
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
15
/GPGPU/CUDA/UNDERSTANDING_CUDA/Thread2
이름 : 콜드무
나이 : 24
성별 : 남
사과
음료수
총 : 10,000원
이름 : 나인타이거
나이 : 24
성별 : 남
과자
빵
총 : 5,000원
물품
사과
음료수
총 : 10,000원
물품
과자
빵
총 : 5,000원
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
코어의 제한
문맥교환이 비교적 오
래걸림.
코어마다 레지스터
8~16개
매니코어
문맥교환의 정보 최소
화.
레지스터 SM마다
16,384개
스레드마다 16개 레지
스터 필요 -> 16,384/16
= 1024개
SM 30개 -> 1024 * 30 =
30,720개
16
Thread
/GPGPU/CUDA/UNDERSTANDING_CUDA/Thread2
CPU Context Switch GPU Context Switch
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Basic Function
cudaError_t cudaMalloc(void** devPtr, size_t count)
cudaError_t cudaFree(void* devPtr)
cudaError_t cudaMemcpy(void* dst, const void* src,
size_t count, cudaMemcpyHostToDevice);
cudaMemcpyHostToHost : PC메모리에서 PC메모리로
cudaMemcpyHostToDevice : PC메모리에서 그래픽 카드 메
모리로
cudaMemcpyDeviceToHost : 그래픽카드 메모리에서 PC메
모리로
cudaMemcpyDeviceToDevice : 그래픽카드 메모리에서 그
래픽카드 메모리로
/GPGPU/CUDA/UNDERSTANDING_CUDA/BASIC_FUNCTIOn
17
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Function Modifier
/GPGPU/CUDA/UNDERSTANDING_CUDA/FUNCTION_MODIFIER
18
•디바이스에서 실행
•호스트에서 호출. 디바이스에서 호출 불가.__global__
•디바이스에서 실행
•디바이스에서 호출. 호스트에서 호출 불가.__device__
•호스트에서 실행
•호스트에서 호출. 디바이스에서 호출 불가.__host__
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
20
Download
Install
Settings
How to install
CUDA
/GPGPU/CUDA/HOW_TO_INSTALL_CUDA
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
21
/GPGPU/CUDA/HOW_TO_INSTALL_CUDA/DOWNLOAD
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
22
/GPGPU/CUDA/HOW_TO_INSTALL_CUDA/DOWNLOAD
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
23
/GPGPU/CUDA/HOW_TO_INSTALL_CUDA/INSTALL
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
24
/GPGPU/CUDA/HOW_TO_INSTALL_CUDA/INSTALL
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
25
/GPGPU/CUDA/HOW_TO_INSTALL_CUDA/INSTALL
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
26
Hello World !!!Hello World
/GPGPU/CUDA/UNDERSTANDING_CUDA
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
27
/GPGPU/CUDA/HELLO_WORLD/CREATE_SOLUTION
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
28
/GPGPU/CUDA/HELLO_WORLD/HELLO_WORLD
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
29
/GPGPU/CUDA/HELLO_WORLD/PARALLEL_CODE
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
30
/GPGPU/CUDA/HELLO_WORLD/PARALLEL_RESULT
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Debugging
1 GPU
2 GPU
2 Computer
/GPGPU/CUDA/APPENDIX/DEBUGGING
31
&
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Source
CUDA 병렬 프로그래밍 / 정영훈 저 / 프리렉 출
판사
https://developer.nvidia.com/cuda-
education-training (CUDA Online Training)
/GPGPU/CUDA/APPENDIX/SOURCE
32
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
33
Review: CUDA
1. 이름이 CUDA라고 정의된 이유?
2. CPU는 왜 코어갯수만큼 스레드를 생성하고,
GPU는 많이 쪼개도 될까?
3. 디바이스랑 호스트란?
33
/REVIEW/CUDA
OpenCL
Open Computing Language
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
저는 여러분들이
최대한 이해
하셨으면 좋겠습니다.
1. C언어를 해보셨습니까?
2. Windows/Linux/E.T.C API 공부를 해보셨습니까?
3. 프로세스, 쓰레드, 이벤트란 무엇인지 아십니까?
2
/GPGPU/OPENCL/BEFORE_START
WHAT
IS THE
Contents?
UNDERSTANDING OPENCL
PARALLEL PROGRAMMING
OpenCL Architecture
Hello World !
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
4
OpenCL?
Understanding
OpenCL
GPGPU/OPENCL/UNDERSTANDING_OPENCL
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
5
OpenCL?
Open Computing Language
CPU, GPU등의 이종 프로세서들의 조합으로 구성된 컴
퓨터를 프로그래밍하기 위한 산업계의 표준 프레임워
크
OpenCL은 하드웨어를 우아한 추상화 뒤로 감추는 것
이 아니라 오히려 하드웨어를 노출시킴으로써 높은
수준의 이식성 제공.
즉, 이 말은 프로그래머가 플랫폼과 문맥 그리고 작업
을 서로 다른 디바이스들에 어떻게 스케줄할지에 대
해서 명시적으로 정의해야 한다는 것을 의미
GPGPU/OPENCL/UNDERSTANDING_OPENCL/OpenCL
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
6
병렬성과 병행성
Parallel Programming
Model
Why OpenCL use
parallel-model?
Parallel
Programming
/GPGPU/OPENCL/PARALLEL_PROGRAMMING
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
단순히 두 개 이상의
활성화된 연산 스트림
으로 구성
이들을 한꺼번에 진행
할 수 있다면, 병행성
이 있다고 할 수 있다.
병행적인 소프트웨어가 실
행의 기본 단위가 되는 하
드웨어 유닛인 Processing
Element를 여러 개 가진 컴
퓨터에서 여러 PE로 실제
로 동시에 실행될 때
즉, 하드웨어에 의해 병행
성이 지원될 때 병렬적이라
고 한다.
7
병렬성과 병행성
/GPGPU/OPENCL/PARALLEL_PROGRAMMING/병렬성과_병행성
병렬성 병행성
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
병렬성과 병행성
프로그래머는 병행성에 대하여 대단히 고민해야 한다.
/GPGPU/OPENCL/PARALLEL_PROGRAMMING/병렬성과_병행성
8
연산 스트림 정의 연산 데이터 연관 결과 종속성 만족
1~100 더하기 10개씩 10개로 나눔 결과들을 서로 더함
근의 공식 어떻게 쪼갤 것인지?
결과들을 어떻게
합칠 것인지?
따라서, 문제를 보다 쉽게 다루기 위해서, 모델링을 한다.
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
여러 병행적인 task들
을 프로그래머가 직접
정의하고 나누어 각
PE에 맵핑
부하조절 문제가 더욱
어려울 수 있다
9
Parallel programming model
/GPGPU/OPENCL/PARALLEL_PROGRAMMING/PARALLEL_PROGRAMMING_MODEL
Task-parallel
1
2
3 4
5 6
6개의 독립적인 Tasks
1
2
3
4
5
6
3개의 PE, 잘못된 부하조절
1
2
3
4
5
6
3개의 PE, 잘된 부하조절
끝나는
시간
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
동일한 명령어 스트림
을 가지고 병행적으로
데이터 요소에 적용
상대적으로 부하조절
문제가 적다
10
Parallel programming model
/GPGPU/OPENCL/PARALLEL_PROGRAMMING/PARALLEL_PROGRAMMING_MODEL
Data-parallel
6 1 1 0 9 2 4 1 1 9
36 1 1 0 81 4 16 1 1 81
A_Vector
A_Result
TASK(A[i])
TASK(A[i])
TASK(A[i])
단일 task가 병렬적으로 적용
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Why OpenCL use parallel-model?
OpenCL은 CPU가 입출력 작업을 하고 다른 모든 작업
을 GPGPU에 맡기는 작업을 장려하지 않음
OpenCL은 매니코어와 이종 프로그래밍의 장점을 지
향
모든 OpenCL을 지원하는 디바이스들에 대한 접근을
허용함으로써, 추상화와는 반대적으로 접근
모든 OpenCL 디바이스를 활용한 효율적인 프로그래
밍 지향
/GPGPU/OPENCL/PARALLEL_PROGRAMMING/Why_OpenCL_use_parallel-model?
11
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
12
Platform Model
Execution Model
Memory Model
Programming Model
OpenCL 제약
OpenCL Component
OpenCL
Architecture
/GPGPU/OPENCL/OpenCL_ARCHITECTURE
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Platform Model
이종 시스템에 대한 상위 수준의 기술
Host: 단 한 개. 모든 Compute Device들과 연결됨
Compute Device: =OpenCL Device, 명령어 스트림(커
널)이 실행되는 곳
Compute Unit: ≈작업 그룹
PE: 실제적인 계산이
이루어지는 곳
/GPGPU/OPENCL/OpenCL_ARCHITECTURE/PLATFORM_MODEL
13
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Execution Model
Host Program: OpenCL 객체들과 상호 연동하는 프로
그램. OpenCL 명세에는 자세한 동작규약이 없다.
Kernel: 입력 메모리 객체를 출력 메모리 객체로 변환
하는 함수, 실제적인 작업을 수행
Command Queue: 커널과 데이터를 전송하는 순차/
비순차 큐
Work-item: PE에 의해 처리되는 커널의 인스턴스
Work-group: Work-item들의 집합
/GPGPU/OPENCL/OpenCL_ARCHITECTURE/EXECUTION_MODEL
14
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Execution Model
1. OpenCL 플랫폼을 선택하고 문맥 생성하기
2. 디바이스들을 열거하고, 명령-큐 생성하기
3. 프로그램 객체를 생성하고 빌드하기
4. 커널 객체를 생성하고 커널 인자를 위해 메모
리 객체 생성하기
5. 커널을 실행하고 그 결과를 읽기
6. OpenCL에서의 에러 확인하기
/GPGPU/OPENCL/OpenCL_ARCHITECTURE/EXECUTION_MODEL
15
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Memory Model
Private Memory
Per work-item
Local Memory
Per work-group
work-group안의 work-item끼리
공유가능
Global/Constant Memory
동기화 안됨
Host Memory
CPU, RAM …
/GPGPU/OPENCL/OpenCL_ARCHITECTURE/MEMORY_MODEL
16
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Single Instruction Multiple
Data(SIMD)
동일한 명령에 데이터만
다른 것
Single Program Multiple
Data(SPMD)
같은 커널 실행, 작업 내용
이 여러가지 인 것
OpenCL은 Data-parallel을
기본으로 설계 됨
Kernel 내부 병렬성
비순차 큐 병렬성
선택적 구현 - 모든 플랫
폼에서 동작하지 않음
이벤트 모델 병렬성
17
Programming Model
/GPGPU/OPENCL/OpenCL_ARCHITECTURE/PROGRAMMING_MODEL
Task-parallel Model Data-parallel Model
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
OpenCL 제약
서로 다른 work-group의 work-item 사이의 동
기화 메커니즘을 제공하지 않음.
따라서, 이에 의존하는 알고리즘은 안전한 수
행을 보장 받지 못함
OpenCL의 구현상의 한계 때문에 OpenCL로 구
현할 수 없는 병렬 패턴이 존재할 수 있음
OpenCL Specification문서에서 더 많은 제약을 볼 수
있음
http://www.khronos.org/registry/cl/specs/opencl-1.x-latest.pdf#page=157
/GPGPU/OPENCL/OpenCL_ARCHITECTURE/OpenCL_LIMITATION
18
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
OpenCL Component
Platform API: 디바이스 찾기
Runtime API: 큐에 명령을 집어 넣는 함수등의 실행 중에 필요
한 모든 함수
Programming Language: OpenCL C, ISO C99의 확장. 이식성이
중요하기 때문에 CPU에서만 지원하는 기능 몇 가지를 제외.
> 재귀 함수, 함수 포인터, 비트 필드, 표준 라이브러리.
/GPGPU/OPENCL/OpenCL_ARCHITECTURE/OpenCL_COMPONETN
19
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Review: OpenCL
1. OpenCL이 실행되는 과정을 아는 대로 말해 주세요!
2. OpenCL에서 Kernel과 Host를 설명해주세요!
20
/REVIEW/OpenCL/GA_2_DUT
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
OpenCL 이미지 출처
http://ahnlabsabo.tistory.com/1426
http://amd.com
http://www.khronos.org/assets/uploads/develope
rs/library/overview/opencl_overview.pdf
21
Goal of Lecture
GPGPU, CUDA, OpenCL에 관해 알며,
원하는 모든 알고리즘의
Bruteforcing Toolkit 제작!
+마지막 남은 제일 비싼 기프티콘!
개이득!
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
2
Favorite C IDE
OpenCL SDK
Boost Lib
Install
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
3
Build 환경 구축
Hello World 실행
Hello World Kernel 분석
Host Program 분석
Hello World !
/GPGPU/OPENCL/HELLO_WORLD
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Build 환경 구축
OpenCL 지원 확인
CPU:
intel driver: SSE4.1~
AMD driver: SSE2.x~
GPU:
intel driver: HD 4000~
NVIDIA driver: 2009 year~https://developer.nvidia.com/cuda-gpus
AMD driver: 2009 year~http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-tools-sdks/amd-accelerated-parallel-processing-app-sdk/system-requirements-driver-compatibility/
OpenCL SDK 설치
AMD APP SDK or Intel OpenCL SDK
AMD CodeXL (Only on AMD GPU)
Visual Studio에서 OpenCL 빌드
C/C++ > 추가 포함 디렉토리: C:Program Files (x86)AMD APP SDK2.9include
링커 > 추가 종속성: C:Program Files (x86)AMD APP SDK2.9libx86_64OpenCL.lib
프로젝트 메인 디렉토리: kernel.cl (실행시킬 Kernel 파일)
/GPGPU/OPENCL/HELLO_WORLD/INSTALL_OPENCL
4
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Hello World 실행
i=0~
i + i*2 > 출력
/GPGPU/OPENCL/HELLO_WORLD/HELLO_WORLD
5
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Hello World Kernel Analysis
모든 __(underbar 2개)는 생략가능
OpenCL C로 구현되어 있으며, 보통 .cl확장자를 가짐
__Kernel
OpenCL에서 쓰이는 커널함수 지시자
항상 void 리턴
__global
__local, __constant, __private(default)
가리킨 메모리가 어디에 할당된 메모리인가에 대한 지시자
get_global_id()
/GPGPU/OPENCL/HELLO_WORLD/HELLO_WORLD_KERNEL_ANALYSIS
6
6 1 1 0 9 2 4 1 1 9
get_work_dim = 1
get_global_size = 10
get_local_id = 2
get_num_groups = 2
get_group_id = 0 get_local_size = 5
get_global_id = 7
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Host Program Analysis
OpenCL Platform 선택: CreateContext()
Device의 Command-Queue 생성: CreateCommandQueue()
프로그램 객체 생성 및 빌드: CreateProgram()
커널 객체 생성: clCreateKernel()
커널 인자=메모리 객체 생성: clSetKernelArg()
커널 실행을 위한 큐: clEnqueueNDRangeKernel()
값 읽기를 위한 큐: clEnqueueReadBuffer()
/GPGPU/OPENCL/HELLO_WORLD/HOST_PROGRMA_ANALYSIS
7
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
Host Program Analysis
clGetxxInfo() 사용법
cl_device_info flag
/GPGPU/OPENCL/HELLO_WORLD/HOST_PROGRMA_ANALYSIS
8
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
9
편리를 위해
멀티바이트 세팅
기본 cpp, cl 파일
CREATE EMPTY
CONSOLE PROJECT
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
10
정상적으로 되었는지
컴파일 해보고 테스트
통과 한다면
OpenCL 사용 가능 환경
INCLUDE
HEADER & LIBRARY
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
11
readKernelFile
try catch
build
함수 추가
ERROR: clCreateProgramWithSource(-30)
이 나오면 성공
platform = profile
context = device type
device = device
src = source
program = compilable/ed src
BASIC
HOST PROGRAM
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
12
program.build(devices);
가 성공해야 한다
SIMPLE
OPENCL KERNEL
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
13
result[500] == 250000
이면 성공
SIMPLE
HOST PROGRAM
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
14
GID2KEY ?
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
15
GID2KEY ?
1. 큐를 사용하는 것은 매우 느리다?
2. GPGPU로 보내는데 매우 많은 시간이 걸린다?
3. 일 차원 배열을 사용하는 것은 처리에
매우 비효율 적이다?
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
16
GID2KEY ?
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
17
GID2KEY ?
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
18
GID2KEY ?
A B C D E F G H
1 2 3 4 5 6 7 8
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
19
GID2KEY ?
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
20
GID2KEY ?
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
21
cpp/cl 파일들을 교체
기존 파일들을 복붙함
OpenCL BruteForce Tool
Framework 완성
원하는 알고리즘을 자
신이 추가하여 완성
GID2KEY
GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU
22
C SHA1 Source 확인
OpenCL C99 변환
예외 확인
몇 가지 수정 사항BRUTEFORCE
SHA1
SHA1 완성 DEMO
23
공인인증서
BruteForce DEMO
24
Q & A
THANK YOU

More Related Content

What's hot

Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_ozlael ozlael
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp진현 조
 

What's hot (6)

Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
Compute shader
Compute shaderCompute shader
Compute shader
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
Ai based on gpu
Ai based on gpuAi based on gpu
Ai based on gpu
 

Similar to Gpgpu how to make bruteforcing tool using gpgpu

Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼ibmrep
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기YEONG-CHEON YOU
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Samsung Electronics
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작chcbaram
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요Jo Hoon
 
WebGL 20150428
WebGL 20150428WebGL 20150428
WebGL 20150428Jun Ho Lee
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Opennaru, inc.
 
Cloud tpu jae_180814
Cloud tpu jae_180814Cloud tpu jae_180814
Cloud tpu jae_180814Jaewook. Kang
 
MGS 툴세미나
MGS 툴세미나MGS 툴세미나
MGS 툴세미나Bonex Gu
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
 
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례(Joe), Sanghun Kim
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법종인 전
 
Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016perillamint
 
Theano 와 Caffe 실습
Theano 와 Caffe 실습 Theano 와 Caffe 실습
Theano 와 Caffe 실습 정주 김
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기진현 조
 
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드Opennaru, inc.
 

Similar to Gpgpu how to make bruteforcing tool using gpgpu (20)

Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
 
WebGL 20150428
WebGL 20150428WebGL 20150428
WebGL 20150428
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
 
Cloud tpu jae_180814
Cloud tpu jae_180814Cloud tpu jae_180814
Cloud tpu jae_180814
 
MGS 툴세미나
MGS 툴세미나MGS 툴세미나
MGS 툴세미나
 
Nvidia architecture
Nvidia architectureNvidia architecture
Nvidia architecture
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
 
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법
 
Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016
 
Theano 와 Caffe 실습
Theano 와 Caffe 실습 Theano 와 Caffe 실습
Theano 와 Caffe 실습
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기
 
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
 

Gpgpu how to make bruteforcing tool using gpgpu

  • 1. GPGPU: Bruteforce is NOT DEAD ! GPGPU BruteForce is NOT DEAD ! 1 Bruteforce is NOT DEAD !
  • 2. GPGPU How to make “Bruteforcing” Tool using GPGPU
  • 3. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 정구범 http://blog.ninetiger.com admin@ninetiger.com 질문이 있다면, 바로 E-Mail 주세요! 양찬무 http://coldmu.tistory.com coldmu@naver.com 3 Who we are? /GPGPU/WHO_WE_ARE COLDMUNineTiger
  • 4. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 4 Goal of Lecture GPGPU, CUDA, OpenCL에 관해 알며, 원하는 모든 알고리즘의 Bruteforcing Toolkit 제작을 할 수 있다. +매 Section마다의 기프티콘! 개이득! 4 /GPGPU/GOAL_OF_LECTURE
  • 5. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Content 발전 방향 GPGPU? CPU vs GPU Cuda vs OpenCL /GPGPU/CONTENT GPGPU CUDA OpenCL TRAINING Understanding CUDA How to install CUDA Hello World ! Understanding OpenCL Parallel Programming OpenCL Architecture Hello World ! OpenCL Framework SHA1 Demo 공인인증서 Q & A 5
  • 6. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 발전 방향 1995년 /GPGPU/FUTURE_DIRECTION 6
  • 7. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 발전 방향 매니코어가 전력 효율성이 높다. /GPGPU/FUTURE_DIRECTION 7 입력 프로세서 출력 입력 f 정전용량 = C 전압 = V 동작주파수 = f Power = CV2 𝑓 프로세서 프로세서 f/2 f/2 출력 f 정전용량 = 2.2C 전압 = 0.6V 동작주파수 = 0.5f Power = 0.396CV2 𝑓
  • 8. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 0 2 4 6 8 10 12 14 16 GFLOPS/Watt발전 방향 특화 칩이 전력 효율성이 좋다. /GPGPU/FUTURE_DIRECTION 8 Intel 80-코어 테라급 프로세서 NVIDIA GTX 280 Intel Core2 쿼드 프로세서 (Q6700) 97W 236W 95W
  • 9. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 9 매니코어 + 특화된 칩 = 이종 매니코어 플랫폼의 세상 도래 9 /GPGPU/FUTURE_DIRECTION 이런 플랫폼에 맞는 소프트웨어는 어떻게 설계할 것인가
  • 10. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU GPGPU? General Purpose Graphics Processing Unit 컴퓨터 그래픽스를 위한 계산만 다루는 GPU를 사용하여 CPU가 하던 프로그램들의 계산을 수 행하는 기술. 이를 가능하게 하는 것이 CUDA, OpenCL 이 있다. /GPGPU/GPGPU? 10
  • 11. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU CPU vs GPU 오직 계산을 위한 효율만 높여옴 나머지는 CPU에서 처리 i7의 10개를 합쳐야 나오는 성능. /GPGPU/CPU_vs_GPU 11
  • 12. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU CPU vs GPU CPU 1 , 2, 4, 8, … GPU 240 , 480, … /GPGPU/CPU_vs_GPU 12 GPUCPU
  • 13. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 그래픽 카드 안에 보 드, 메모리, GPU 모두 존재 제조사에서 개발 용이 발전 시간이 매우 빠 름 Ex) CPU와 대조적으로 그래픽카드는 GDDR5 CPU, 메인보드, 메모리 제조사가 다 다름 개발이 덜 용이 발전에 오랜 시간이 걸 림 Ex) 메모리 DDR1 > DDR3 오랜 시간이 걸림 13 CPU vs GPU /GPGPU/CPU_vs_GPU CPUGPU
  • 14. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU -호환성 +개발 단순 +호환성 -개발 복잡 14 CUDA vs OpenCL /GPGPU/CDUA_vs_OPENCL OpenCL 최근 들어, cuda와 opencl은 10퍼센트미만의 차이점만을 가짐 즉, 무엇을 사용해도 큰 차이점을 보이지는 않는다. CUDA
  • 15. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 15 /GPGPU/EXAMPLE
  • 16. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 16 Review: GPGPU 1. GPU가 제조사에서 개발이 용이하여 발전을 빠 르게 하였습니다. 개발이 용이한 이유? 2. CPU와 GPU의 차이점 아무거나? 16 /REVIEW/GPGPU/GA_2_DUT
  • 18. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU WHAT IS THE Contents? UNDERSTANDING CUDA HOW TO INSTALL CUDA HELLO WORLD /GPGPU/CUDA/WHATISTHECONTENTS 2
  • 19. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 3 CUDA? Data Processing Load Calculation TPC/SM/SP Thread/Block/Grid CUDA Function Thread Basic Function Function Modifier Understanding CUDA /GPGPU/CUDA/UNDERSTANDING_CUDA
  • 20. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU CUDA? Computer Unified Device Architecture Nvidia사가 GPU를 이용한 범용적인 프로그램 을 개발 할 수 있도록 ‘프로그램 모델‘, ‘프로그 램 언어‘, ‘컴파일러‘, ‘라이브러리‘, ‘프로파일러 '를 제공하는 통합 환경을 구축. 2007년 2월에 통합 개발환경 CUDA 발표. /GPGPU/CUDA/UNDERSTANDING_CUDA/CUDA? 4
  • 21. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 5 CPU Data Processing /GPGPU/CUDA/UNDERSTANDING_CUDA/DATA_PROCESSING CPU 메인보드 메모리(DRAM) FPU(실수 연산) ALU(정수 연산) 레지스터 LSU 입력 데이터 출력 데이터
  • 22. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 6 GPU Data Processing /GPGPU/CUDA/UNDERSTANDING_CUDA/DATA_PROCESSING CPU 메인보드 메모리(DRAM) 입력 데이터 출력 데이터 그래픽 카드 GPU 데이터 처리 그래픽 카드 메모리(DRAM) 입력 데이터 출력 데이터 GPU 코어 코어 코어 코어 공유메모리 코어 코어 코어 코어 공유메모리 코어 코어 코어 코어 공유메모리 코어 코어 코어 코어 공유메모리
  • 23. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 7 /GPGPU/CUDA/UNDERSTANDING_CUDA/LOAD_CALCULATION Load Calculation CPU를 이용한 처리 시간 GPU를 이용한 처리 시간 CPU를 이용한 처리 시간 GPU를 이용한 처리 시간 그래픽카드에서 PC로 출력 데이터 전송 PC에서 그래픽 카드로 입력 데이터 전송 실제 연산 시간 전체 프로그램 소요 시간
  • 24. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 8 TPC / SM / SP /GPGPU/CUDA/UNDERSTANDING_CUDA/LOAD_CALCULATION TPC(Texture Processor Cluster) SM, Texture Unit, Controller SM(Streaming Multiprocessor) SP를 제어, 명령어 캐시, 데이 터캐시 SP(Streaming Processors) 1개의 코어 TPC Texture Units Geometry Controller SMC Texture L1 SM I Cache MT issue C Cache SP SP SP SP SFU SFU Shared Memory SM I Cache MT issue C Cache SP SP SP SP SFU SFU Shared Memory
  • 25. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Thread / Block / Grid 스레드가 모여서 Block Block이 모여서 GRID Grid 2차원 Block 3차원 Dim3 Dg(3, 4, 1) Dim3 Db(4, 3, 3) Kernel <<< Dg, Db>>>(a,b,c) /GPGPU/CUDA/UNDERSTANDING_CUDA/THREAD_BLOCK_GRID Block(0,1) Thread(0,0) Thread(1,0) Thread(0,1) Thread(1,1) Grid Block(0,0) Block(1,0) Block(0,1) Block(1,1) 9
  • 26. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 10 CUDA Function /GPGPU/CUDA/UNDERSTANDING_CUDA/CUDA_FUNCTION __global__ void KernelFunction(int a, int b, int c) { // GPU 에서 실행되는 함수. } Void main() { KernelFunction (1, 2, 3); } << < 블록, 스레드 >>>
  • 27. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Thread CPU 환경에서는 CPU 코어 개수와 생성한 스레드 개수가 동일해야 최적의 효율을 냄. 스레드가 많아지면 시분할 스케줄을 시행하여 효율 떨어짐. CUDA 환경에서는 무조건 잘 쪼개기만 하면 됨. /GPGPU/CUDA/UNDERSTANDING_CUDA/Thread 11
  • 28. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 코어의 제한 문맥교환이 비교적 오 래걸림. 레지스터 8~16개 매니코어 문맥교환의 정보 최소 화. 레지스터 SM마다 16,384개 스레드마다 16개 레지 스터 필요 -> 16,384/16 = 1024개 SM 30개 -> 1024 * 30 = 30,720개 12 Thread /GPGPU/CUDA/UNDERSTANDING_CUDA/Thread2 CPU Context Switch GPU Context Switch
  • 29. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 15 /GPGPU/CUDA/UNDERSTANDING_CUDA/Thread2 이름 : 콜드무 나이 : 24 성별 : 남 사과 음료수 총 : 10,000원 이름 : 나인타이거 나이 : 24 성별 : 남 과자 빵 총 : 5,000원 물품 사과 음료수 총 : 10,000원 물품 과자 빵 총 : 5,000원
  • 30. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 코어의 제한 문맥교환이 비교적 오 래걸림. 코어마다 레지스터 8~16개 매니코어 문맥교환의 정보 최소 화. 레지스터 SM마다 16,384개 스레드마다 16개 레지 스터 필요 -> 16,384/16 = 1024개 SM 30개 -> 1024 * 30 = 30,720개 16 Thread /GPGPU/CUDA/UNDERSTANDING_CUDA/Thread2 CPU Context Switch GPU Context Switch
  • 31. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Basic Function cudaError_t cudaMalloc(void** devPtr, size_t count) cudaError_t cudaFree(void* devPtr) cudaError_t cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyHostToDevice); cudaMemcpyHostToHost : PC메모리에서 PC메모리로 cudaMemcpyHostToDevice : PC메모리에서 그래픽 카드 메 모리로 cudaMemcpyDeviceToHost : 그래픽카드 메모리에서 PC메 모리로 cudaMemcpyDeviceToDevice : 그래픽카드 메모리에서 그 래픽카드 메모리로 /GPGPU/CUDA/UNDERSTANDING_CUDA/BASIC_FUNCTIOn 17
  • 32. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Function Modifier /GPGPU/CUDA/UNDERSTANDING_CUDA/FUNCTION_MODIFIER 18 •디바이스에서 실행 •호스트에서 호출. 디바이스에서 호출 불가.__global__ •디바이스에서 실행 •디바이스에서 호출. 호스트에서 호출 불가.__device__ •호스트에서 실행 •호스트에서 호출. 디바이스에서 호출 불가.__host__
  • 33. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 20 Download Install Settings How to install CUDA /GPGPU/CUDA/HOW_TO_INSTALL_CUDA
  • 34. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 21 /GPGPU/CUDA/HOW_TO_INSTALL_CUDA/DOWNLOAD
  • 35. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 22 /GPGPU/CUDA/HOW_TO_INSTALL_CUDA/DOWNLOAD
  • 36. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 23 /GPGPU/CUDA/HOW_TO_INSTALL_CUDA/INSTALL
  • 37. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 24 /GPGPU/CUDA/HOW_TO_INSTALL_CUDA/INSTALL
  • 38. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 25 /GPGPU/CUDA/HOW_TO_INSTALL_CUDA/INSTALL
  • 39. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 26 Hello World !!!Hello World /GPGPU/CUDA/UNDERSTANDING_CUDA
  • 40. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 27 /GPGPU/CUDA/HELLO_WORLD/CREATE_SOLUTION
  • 41. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 28 /GPGPU/CUDA/HELLO_WORLD/HELLO_WORLD
  • 42. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 29 /GPGPU/CUDA/HELLO_WORLD/PARALLEL_CODE
  • 43. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 30 /GPGPU/CUDA/HELLO_WORLD/PARALLEL_RESULT
  • 44. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Debugging 1 GPU 2 GPU 2 Computer /GPGPU/CUDA/APPENDIX/DEBUGGING 31 &
  • 45. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Source CUDA 병렬 프로그래밍 / 정영훈 저 / 프리렉 출 판사 https://developer.nvidia.com/cuda- education-training (CUDA Online Training) /GPGPU/CUDA/APPENDIX/SOURCE 32
  • 46. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 33 Review: CUDA 1. 이름이 CUDA라고 정의된 이유? 2. CPU는 왜 코어갯수만큼 스레드를 생성하고, GPU는 많이 쪼개도 될까? 3. 디바이스랑 호스트란? 33 /REVIEW/CUDA
  • 48. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 저는 여러분들이 최대한 이해 하셨으면 좋겠습니다. 1. C언어를 해보셨습니까? 2. Windows/Linux/E.T.C API 공부를 해보셨습니까? 3. 프로세스, 쓰레드, 이벤트란 무엇인지 아십니까? 2 /GPGPU/OPENCL/BEFORE_START
  • 49. WHAT IS THE Contents? UNDERSTANDING OPENCL PARALLEL PROGRAMMING OpenCL Architecture Hello World !
  • 50. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 4 OpenCL? Understanding OpenCL GPGPU/OPENCL/UNDERSTANDING_OPENCL
  • 51. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 5 OpenCL? Open Computing Language CPU, GPU등의 이종 프로세서들의 조합으로 구성된 컴 퓨터를 프로그래밍하기 위한 산업계의 표준 프레임워 크 OpenCL은 하드웨어를 우아한 추상화 뒤로 감추는 것 이 아니라 오히려 하드웨어를 노출시킴으로써 높은 수준의 이식성 제공. 즉, 이 말은 프로그래머가 플랫폼과 문맥 그리고 작업 을 서로 다른 디바이스들에 어떻게 스케줄할지에 대 해서 명시적으로 정의해야 한다는 것을 의미 GPGPU/OPENCL/UNDERSTANDING_OPENCL/OpenCL
  • 52. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 6 병렬성과 병행성 Parallel Programming Model Why OpenCL use parallel-model? Parallel Programming /GPGPU/OPENCL/PARALLEL_PROGRAMMING
  • 53. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 단순히 두 개 이상의 활성화된 연산 스트림 으로 구성 이들을 한꺼번에 진행 할 수 있다면, 병행성 이 있다고 할 수 있다. 병행적인 소프트웨어가 실 행의 기본 단위가 되는 하 드웨어 유닛인 Processing Element를 여러 개 가진 컴 퓨터에서 여러 PE로 실제 로 동시에 실행될 때 즉, 하드웨어에 의해 병행 성이 지원될 때 병렬적이라 고 한다. 7 병렬성과 병행성 /GPGPU/OPENCL/PARALLEL_PROGRAMMING/병렬성과_병행성 병렬성 병행성
  • 54. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 병렬성과 병행성 프로그래머는 병행성에 대하여 대단히 고민해야 한다. /GPGPU/OPENCL/PARALLEL_PROGRAMMING/병렬성과_병행성 8 연산 스트림 정의 연산 데이터 연관 결과 종속성 만족 1~100 더하기 10개씩 10개로 나눔 결과들을 서로 더함 근의 공식 어떻게 쪼갤 것인지? 결과들을 어떻게 합칠 것인지? 따라서, 문제를 보다 쉽게 다루기 위해서, 모델링을 한다.
  • 55. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 여러 병행적인 task들 을 프로그래머가 직접 정의하고 나누어 각 PE에 맵핑 부하조절 문제가 더욱 어려울 수 있다 9 Parallel programming model /GPGPU/OPENCL/PARALLEL_PROGRAMMING/PARALLEL_PROGRAMMING_MODEL Task-parallel 1 2 3 4 5 6 6개의 독립적인 Tasks 1 2 3 4 5 6 3개의 PE, 잘못된 부하조절 1 2 3 4 5 6 3개의 PE, 잘된 부하조절 끝나는 시간
  • 56. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 동일한 명령어 스트림 을 가지고 병행적으로 데이터 요소에 적용 상대적으로 부하조절 문제가 적다 10 Parallel programming model /GPGPU/OPENCL/PARALLEL_PROGRAMMING/PARALLEL_PROGRAMMING_MODEL Data-parallel 6 1 1 0 9 2 4 1 1 9 36 1 1 0 81 4 16 1 1 81 A_Vector A_Result TASK(A[i]) TASK(A[i]) TASK(A[i]) 단일 task가 병렬적으로 적용
  • 57. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Why OpenCL use parallel-model? OpenCL은 CPU가 입출력 작업을 하고 다른 모든 작업 을 GPGPU에 맡기는 작업을 장려하지 않음 OpenCL은 매니코어와 이종 프로그래밍의 장점을 지 향 모든 OpenCL을 지원하는 디바이스들에 대한 접근을 허용함으로써, 추상화와는 반대적으로 접근 모든 OpenCL 디바이스를 활용한 효율적인 프로그래 밍 지향 /GPGPU/OPENCL/PARALLEL_PROGRAMMING/Why_OpenCL_use_parallel-model? 11
  • 58. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 12 Platform Model Execution Model Memory Model Programming Model OpenCL 제약 OpenCL Component OpenCL Architecture /GPGPU/OPENCL/OpenCL_ARCHITECTURE
  • 59. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Platform Model 이종 시스템에 대한 상위 수준의 기술 Host: 단 한 개. 모든 Compute Device들과 연결됨 Compute Device: =OpenCL Device, 명령어 스트림(커 널)이 실행되는 곳 Compute Unit: ≈작업 그룹 PE: 실제적인 계산이 이루어지는 곳 /GPGPU/OPENCL/OpenCL_ARCHITECTURE/PLATFORM_MODEL 13
  • 60. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Execution Model Host Program: OpenCL 객체들과 상호 연동하는 프로 그램. OpenCL 명세에는 자세한 동작규약이 없다. Kernel: 입력 메모리 객체를 출력 메모리 객체로 변환 하는 함수, 실제적인 작업을 수행 Command Queue: 커널과 데이터를 전송하는 순차/ 비순차 큐 Work-item: PE에 의해 처리되는 커널의 인스턴스 Work-group: Work-item들의 집합 /GPGPU/OPENCL/OpenCL_ARCHITECTURE/EXECUTION_MODEL 14
  • 61. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Execution Model 1. OpenCL 플랫폼을 선택하고 문맥 생성하기 2. 디바이스들을 열거하고, 명령-큐 생성하기 3. 프로그램 객체를 생성하고 빌드하기 4. 커널 객체를 생성하고 커널 인자를 위해 메모 리 객체 생성하기 5. 커널을 실행하고 그 결과를 읽기 6. OpenCL에서의 에러 확인하기 /GPGPU/OPENCL/OpenCL_ARCHITECTURE/EXECUTION_MODEL 15
  • 62. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Memory Model Private Memory Per work-item Local Memory Per work-group work-group안의 work-item끼리 공유가능 Global/Constant Memory 동기화 안됨 Host Memory CPU, RAM … /GPGPU/OPENCL/OpenCL_ARCHITECTURE/MEMORY_MODEL 16
  • 63. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Single Instruction Multiple Data(SIMD) 동일한 명령에 데이터만 다른 것 Single Program Multiple Data(SPMD) 같은 커널 실행, 작업 내용 이 여러가지 인 것 OpenCL은 Data-parallel을 기본으로 설계 됨 Kernel 내부 병렬성 비순차 큐 병렬성 선택적 구현 - 모든 플랫 폼에서 동작하지 않음 이벤트 모델 병렬성 17 Programming Model /GPGPU/OPENCL/OpenCL_ARCHITECTURE/PROGRAMMING_MODEL Task-parallel Model Data-parallel Model
  • 64. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU OpenCL 제약 서로 다른 work-group의 work-item 사이의 동 기화 메커니즘을 제공하지 않음. 따라서, 이에 의존하는 알고리즘은 안전한 수 행을 보장 받지 못함 OpenCL의 구현상의 한계 때문에 OpenCL로 구 현할 수 없는 병렬 패턴이 존재할 수 있음 OpenCL Specification문서에서 더 많은 제약을 볼 수 있음 http://www.khronos.org/registry/cl/specs/opencl-1.x-latest.pdf#page=157 /GPGPU/OPENCL/OpenCL_ARCHITECTURE/OpenCL_LIMITATION 18
  • 65. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU OpenCL Component Platform API: 디바이스 찾기 Runtime API: 큐에 명령을 집어 넣는 함수등의 실행 중에 필요 한 모든 함수 Programming Language: OpenCL C, ISO C99의 확장. 이식성이 중요하기 때문에 CPU에서만 지원하는 기능 몇 가지를 제외. > 재귀 함수, 함수 포인터, 비트 필드, 표준 라이브러리. /GPGPU/OPENCL/OpenCL_ARCHITECTURE/OpenCL_COMPONETN 19
  • 66. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Review: OpenCL 1. OpenCL이 실행되는 과정을 아는 대로 말해 주세요! 2. OpenCL에서 Kernel과 Host를 설명해주세요! 20 /REVIEW/OpenCL/GA_2_DUT
  • 67. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU OpenCL 이미지 출처 http://ahnlabsabo.tistory.com/1426 http://amd.com http://www.khronos.org/assets/uploads/develope rs/library/overview/opencl_overview.pdf 21
  • 68. Goal of Lecture GPGPU, CUDA, OpenCL에 관해 알며, 원하는 모든 알고리즘의 Bruteforcing Toolkit 제작! +마지막 남은 제일 비싼 기프티콘! 개이득!
  • 69. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 2 Favorite C IDE OpenCL SDK Boost Lib Install
  • 70. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 3 Build 환경 구축 Hello World 실행 Hello World Kernel 분석 Host Program 분석 Hello World ! /GPGPU/OPENCL/HELLO_WORLD
  • 71. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Build 환경 구축 OpenCL 지원 확인 CPU: intel driver: SSE4.1~ AMD driver: SSE2.x~ GPU: intel driver: HD 4000~ NVIDIA driver: 2009 year~https://developer.nvidia.com/cuda-gpus AMD driver: 2009 year~http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-tools-sdks/amd-accelerated-parallel-processing-app-sdk/system-requirements-driver-compatibility/ OpenCL SDK 설치 AMD APP SDK or Intel OpenCL SDK AMD CodeXL (Only on AMD GPU) Visual Studio에서 OpenCL 빌드 C/C++ > 추가 포함 디렉토리: C:Program Files (x86)AMD APP SDK2.9include 링커 > 추가 종속성: C:Program Files (x86)AMD APP SDK2.9libx86_64OpenCL.lib 프로젝트 메인 디렉토리: kernel.cl (실행시킬 Kernel 파일) /GPGPU/OPENCL/HELLO_WORLD/INSTALL_OPENCL 4
  • 72. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Hello World 실행 i=0~ i + i*2 > 출력 /GPGPU/OPENCL/HELLO_WORLD/HELLO_WORLD 5
  • 73. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Hello World Kernel Analysis 모든 __(underbar 2개)는 생략가능 OpenCL C로 구현되어 있으며, 보통 .cl확장자를 가짐 __Kernel OpenCL에서 쓰이는 커널함수 지시자 항상 void 리턴 __global __local, __constant, __private(default) 가리킨 메모리가 어디에 할당된 메모리인가에 대한 지시자 get_global_id() /GPGPU/OPENCL/HELLO_WORLD/HELLO_WORLD_KERNEL_ANALYSIS 6 6 1 1 0 9 2 4 1 1 9 get_work_dim = 1 get_global_size = 10 get_local_id = 2 get_num_groups = 2 get_group_id = 0 get_local_size = 5 get_global_id = 7
  • 74. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Host Program Analysis OpenCL Platform 선택: CreateContext() Device의 Command-Queue 생성: CreateCommandQueue() 프로그램 객체 생성 및 빌드: CreateProgram() 커널 객체 생성: clCreateKernel() 커널 인자=메모리 객체 생성: clSetKernelArg() 커널 실행을 위한 큐: clEnqueueNDRangeKernel() 값 읽기를 위한 큐: clEnqueueReadBuffer() /GPGPU/OPENCL/HELLO_WORLD/HOST_PROGRMA_ANALYSIS 7
  • 75. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU Host Program Analysis clGetxxInfo() 사용법 cl_device_info flag /GPGPU/OPENCL/HELLO_WORLD/HOST_PROGRMA_ANALYSIS 8
  • 76. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 9 편리를 위해 멀티바이트 세팅 기본 cpp, cl 파일 CREATE EMPTY CONSOLE PROJECT
  • 77. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 10 정상적으로 되었는지 컴파일 해보고 테스트 통과 한다면 OpenCL 사용 가능 환경 INCLUDE HEADER & LIBRARY
  • 78. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 11 readKernelFile try catch build 함수 추가 ERROR: clCreateProgramWithSource(-30) 이 나오면 성공 platform = profile context = device type device = device src = source program = compilable/ed src BASIC HOST PROGRAM
  • 79. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 12 program.build(devices); 가 성공해야 한다 SIMPLE OPENCL KERNEL
  • 80. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 13 result[500] == 250000 이면 성공 SIMPLE HOST PROGRAM
  • 81. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 14 GID2KEY ?
  • 82. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 15 GID2KEY ? 1. 큐를 사용하는 것은 매우 느리다? 2. GPGPU로 보내는데 매우 많은 시간이 걸린다? 3. 일 차원 배열을 사용하는 것은 처리에 매우 비효율 적이다?
  • 83. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 16 GID2KEY ?
  • 84. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 17 GID2KEY ?
  • 85. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 18 GID2KEY ? A B C D E F G H 1 2 3 4 5 6 7 8
  • 86. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 19 GID2KEY ?
  • 87. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 20 GID2KEY ?
  • 88. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 21 cpp/cl 파일들을 교체 기존 파일들을 복붙함 OpenCL BruteForce Tool Framework 완성 원하는 알고리즘을 자 신이 추가하여 완성 GID2KEY
  • 89. GPGPU: Bruteforce is NOT DEAD ! // NineTiger && COLDMU 22 C SHA1 Source 확인 OpenCL C99 변환 예외 확인 몇 가지 수정 사항BRUTEFORCE SHA1
  • 92. Q & A