이 글은 링크가 기술적인 문서에다가 하드코어한 문서이기에 "Sharing memory between threads in same work group"에서 마지막까지 되도록 직역을 한 버전이다. 직역은 틀리게 번역하는 것을 막아주는 좋은 점이 있다, 하지만 또다른 하드코어를 만들기도 한다, 그래도 의역의 이전 단계로 쓰기에는 괜찮기도 하다. 역자(갓댕치)가 한국사람이라 역시 문화의 차이에서 발생하는 언어문제는 여전히 있고, 오역 또한 발생 할 수 있으니, 원문과 번역문을 신중히 비교해 가며 보기를 바란다. 따로 의역 버전을 만들지는 모르겠고, 이 문서와 관련된 Compute shader의 내용 올리지 않을 지도 몰라 남겨 둔다. Sharing memory between threads in same work..
ComputeShader에는 2가지의 Barrier가 있다. 아하... 이 이야기를 하기전에 Barrier가 뭔지를 설명해야 겠구나.. Barrier란..? 일단 ComputeShader와는 상관없이 Barrier는 2가지 종류가 있다. 하나는 execution barrier, 나머지는 memory barrier다. CPU든 GPU든 이런 것들이 계산과 처리를 할 때, (여기서 CPU와 GPU같은 것이 만들어진 구조를 아키텍처[그냥단어다]라고 부른다.) 특히 멀티쓰레드로 작업을 할 때, 이 멀티쓰레드 작업의 결과가 올바르게 나오기 위해, 때로는 쓰레드의 실행을 멈추었다가 다시 실행해야 되고, 때로는 메모리 쓰여진 데이터가 다른 쓰레드에서 이 쓰여진 데이터를 읽어야 하는 경우가 있다. 실행을 멈추고 다시 ..
3.0까지 texture에 직접 쓸 수 있는 방법이 없었다. FBO로 감싸서 그려야 했고, 그 과정은 코드로는 간단하지만, 실제 GPU에서는 상당한 작업이 들어가는 작업이었다. 이제 ComputeShader는 바로 읽기/쓰기를 지원한다. 하지만 여기에는 제약이 있는 데, 기존에 사용하던 방식이 아닌 다른 함수를 통해 텍스쳐를 만들어야 한다. Immutable-storage에 텍스쳐만들기 말이 좀 해깔리지만(Immutable:바꿀 수 없는) 그냥 ComputeShader는 Immutable-storage의 텍스쳐만 쓸(write) 수 있다고 생각하면 된다. 이렇게 만들 수 있는 함수는 glTexStorage*()함수들이다. 텍스쳐 만드는 코드 GLuint texId = 0; glGenTextures( 1,..
이전 글에서 간단히 SSBO를 활용한 연산을 해 보았다, 이 글은 좀 더 자세한 사항을 다루도록 하겠다. 일단 GPU에서 사용될 Buffer를 만들어야한다. 이 버퍼에 데이터를 담아 GPU로 보내면 GPU는 이 곳에서 데이터를 읽을 수 있고, GPU에서 데이터를 이 곳에 쓰면 CPU에서 읽어 낼 수 있다. 일단 만드는 것은 다른 버퍼들과 동일하다. GLint ssbo = 0; glGenBuffers( 1, &ssbo ); glBindBuffer( GL_SHADER_STORAGE_BUFFER, ssbo ); glBufferData( GL_SHADER_STORAGE_BUFFER, 크기, nullptr, GL_STREAM_DRAW ); glBindBuffer( GL_SHADER_STORAGE_BUFFER, 0..
ComputeShader는 한개의 쉐이더만 있으면 된다. 다음은 ComputeShader를 컴파일하는 함수다. GLuint CompileComputeShader( const char* szShaderCode ) { GLuint rc = 0; int rvalue; GLchar log[1024]; GLsizei length; GLuint program = glCreateProgram(); GLuint shader = glCreateShader(GL_COMPUTE_SHADER); glShaderSource( shader, 1, &szShaderCode, nullptr ); glCompileShader(shader); glGetShaderiv(shader, GL_COMPILE_STATUS, &rvalue ); ..
GPU도 연산회로를 포함하고 있다. 게다가 이 연산은 3차원 공간과 색공간을 처리할 수 있는 특화된 연산함수를 포함한다. 주로 삼각함수와 고등학교에서 배운 벡터연산 등을 빠르게 계산할 수 있게 설계가 되어있다. 이 것을 잘 활용한다면 CPU의 부하를 줄이고 코어수가 훨씬 많은 GPU를 이용하기 때문에 더 많은 계산을 할 수 있다. OpenGL ES 는 3.1부터 이 연산을 바로 지원하도록 하고 있다. 이 전까지는 뭔가 그리는 것으로 작업 끝내는 용도였지만, 이 제 연산만 하고 다시 CPU에서 끌어다 쓸 수 있게 지원을 해준다. 그 것이 ComputeShader라는 녀석이다. 3.0이하 버전에서도 약간의 트릭을 써서 만들 수는 있다. Fragment shader로 그려서 FBO에 결과를 다시 읽어오면 같은..
- Total
- Today
- Yesterday
- 적금
- 에어컨
- 공유 컨텍스트
- 예금
- OpenGLes
- choreographer
- 에어콘
- 전기료
- gpgpu
- texture
- 전기세
- 재태크
- 컴퓨트쉐이더
- Android
- 금리
- 경제보복
- 컴퓨트셰이더
- ComputeShader
- 블로그
- 재테크
- 티스토리
- 사용료
- 애드핏
- 애드센스
- 아끼는 법
- 안드로이드
- 텍스처
- TTS
- OpenGL ES
- 전기요금
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |