갬장장이
갬장장이의 코드 대장간

전체 글

os/multithreading, parallel computing

메모리 정책(memory order), 메모리 장벽(memory fence/barrier)

Memory model에 대한 정책 세 가지 (더 있으나 보편적으로 세 가지를 주로 사용) 1) Sequentially consistent (seq_cst) 2) Acquire-Releasse (acquire, release) 3) Relaxed (relaxed) 위에 있을 수록 더 엄격한 정책, 컴파일러의 최적화가 적다. 아래로 갈 수록 컴파일러 최적화의 여지가 많다. 예시 코드 atomic ready; int32 value; void Producer() { value = 5; ready.store(true, memory_order::메모리 정책); } void Consumer() { while(ready.load(memory_order::메모리 정책) == false); cout

os/multithreading, parallel computing

lock-free atomic calculation

CPU에 따라서 int64같은 데이터에 대해 atomic한 연산을 지원해줄 수도 있고, 안해줄 수도 있다. 만약 안해주는 CPU의 경우, C++ 등에서 atomic한 연산으로 int64 데이터에 연산을 실행하면, 컴파일러가 별도로 락을 만들고 락을 걸어 원자성을 보장해주는 형태로 구현된다. (당연히 더 느리다) 특정 상황에서 어떤 연산의 atomic 연산이 CPU단에서 락없이 처리가 가능한지를 확인하려면 다음과 같이 확인해보면 된다. atomic v; cout

os/multithreading, parallel computing

멀티스레드 환경에서 발생하는 문제들

스레드 경합 및 동기화로 인한 문제 https://cheetile.tistory.com/entry/OS-%EC%8A%A4%EB%A0%88%EB%93%9C-%EB%8F%99%EA%B8%B0%ED%99%94-%EB%AC%B8%EC%A0%9C-Race-Condition-Deadlock-Starvation-Livelock [OS] 스레드 동기화 문제 - Race Condition, Deadlock, Starvation, Livelock 스레드 동기화 문제 멀티프로세싱이나 멀티스레딩을 개발할 때 프로세스나 스레드들의 상태 제어 처리하는 부분에 까다로운 점이 많습니다. 스레드의 개수가 많아질수록 더욱 정교한 처리가 cheetile.tistory.com 경합 상황(여러 스레드가 동일한 메모리에 동시 접근 후 writ..

life

성장하는 나

작대기 3개 어느덧 제 군생활이 절반 이상 지나갔네요... 그중 특히 2022년은 제 인생 전체를 통틀어서 가장 많은 변화를 겪은 해가 아니었나 생각합니다. 개인적인 일들도 있었고, 무엇보다 군대라는 공간 속에서 제 스스로 정말 많이, 아주 많이 변화했다고 생각합니다. 대체 뭐가 그렇게 달라졌느냐고 물으신다면, 저는 크게 다음 두 가지, 내 목표를 이루기 위한 능력들을 갖춰나가는 지적 성장, 그리고 보다 더 나은 사람이 되기 위한 내적 성장 을 이루었다고 말씀드리고 싶습니다. 저는 끊임없이 학습하고 스스로를 더 나은 사람으로 만들어나가는 것을 멈추지 않아 왔습니다. 지식을 추구하는 것은 제 가장 큰 즐거움 중 하나이고, 삶의 원동력이 되기 때문입니다. 그런 저에게 입대는 하나의 시련처럼만 느껴졌습니다. ..

computer graphics/3D Graphics

[3DGraphics] 17. Phong shading & Per-pixel lighting

오늘은 phong shading, 정확히는 per-pixel lighting을 살펴보자. phong shading은 per-pixel lighting에 추가적으로 다른 개념들이 사용된 셰이딩 방법이지만, 일단은 편의를 위해 phong shading이라고 표현하겠다. 지난번 글에서 우리의 파이프라인의 point light에 한가지 문제가 있음을 언급했다. 이 사진을 보면 이해가 빠르다. 바로 빛이 거리의 영향을 받지 않는 문제이다. 그러나 우리는 분명 지난 시간에 거리에 따른 빛의 명암을 구현했는데, 이게 무슨 일일까? 물체를 기울여보면 그 문제의 원인에 대해 대략 감을 잡을 수 있다. 우리가 빛과 물체의 거리를 측정할 때는 정점을 기준으로 하고 있다. 그리고 정점과 정점 사이의 공간에 대해서는 두 정점에..

computer graphics/3D Graphics

[3DGraphics] 16. Point lights

Directional light로는 표현할 수 없는 상황들이 게임 속에는 다수 존재한다. 빛과 물체의 상대적인 위치에 따라 물체에 가해지는 명암이 달라지는 경우 특히 그러한데, 방 안에 전구가 있고 그 전구를 기점으로 물체가 빙글빙글 돌아갈 때의 명암을 생각하면 쉽다. 또한 빛과 물체의 거리와 상관없이 빛의 세기가 일정한 directional light와는 다르게, 먼 물체일 수 록 더 어둡게 표현하고 싶다면 다른 형태의 빛이 필요하다. 이런 상황들에서 사용할 수 있는 게 바로 point light 이다. 상대적인 위치에 따라 명암을 동적으로 계산할 뿐만 아니라, 거리에 따라 빛이 감소(dropoff)하기도 한다. 이는 1/(거리)^2 에 비례한 형태로 나타나는데, 이때 명암을 단순히 1/x^2로 설정해..

computer graphics/3D Graphics

[3DGraphics] 15. Gouraud shading

Gouraud shading에 대해 알아보자. Gouraud shading은 flat shading과 다르게 폴리곤 별로 색상 하나를 지정해주는 방식의 shading이 아니라 모든 폴리곤들에 대해 색을 interpolate 시켜서 부드러운 명암 효과를 줄 수 있다. 이를 시각적으로 쉽게 알아보기 위해서는 구 오브젝트에 셰이딩을 적용시켜보는 게 가장 직관적인데, 이를 위해 우선 구를 제작해보자. 구형 오브젝트를 만드는 방법은 여러가지가 있지만 이번 글에서는 위도와 경도를 이용한 방법을 사용하겠다. 이 방법을 사용해 일단 모든 정점들을 생성하고 (격자의 교점) 그 정점들이 생성하는 모든 폴리곤들을 점과 맵핑해 생성한 후 위 뚜껑과 아래 뚜껑을 제작하면 구 생성이 종료된다. 이를 구현하기 위해 우리는 z축(꼭..

computer graphics/3D Graphics

[3DGraphics] 14. Flat shading and Mesh loading

Dynamic lighting과 shading에 대해 알아보자. 3차원 물체에 빛을 쏘아 명암을 입히려 할때, 이를 어떻게 구현할까? 빛을 shading하는 기법에도 여러가지가 있는데, 그 중 가장 단순한 flat shading부터 살펴보자. flat shading은 단순히 각 폴리곤들마다 받는 빛을 계산해 폴리곤별로 색을 렌더링해주는 기법이다. 더 자세히 살펴보기 전에, 우선 Directional light에 대해 알아보자. 어떤 광원으로부터 쏘아진 광자가 물체에 다다를 때 광원까지의 거리가 멀 수록 물체에 부딪히는 광자들이 이루는 각의 크기가 작아짐을 볼 수 있다. 이는 달리말해 광원의 거리가 무한히 멀다면 이 각이 0도에 수렴하고, 이는 즉 모든 빛이 같은 방향에서 들어온다는 것을 의미한다. 이러한..

mathematics/game mathematics

[Mathematics] 28. 회전목마

바로 이전 포스트에서 우리는 회전목마와 상자의 운동을 행렬곱으로 표현해보았다. 그러나 해당 방식은 물체가 회전목마에서 닿았다 떨어졌다 하는 상황에서 동적으로 변경해줄 수 없다는 문제가 있다. 즉 게임 내의 회전하는 원판 장애물 등으로는 활용할 수 없다는 이야기다. 이번 포스트에서는 Move parents라는 개념을 사용해 이를 개선해보자. 사실 지난 포스트에서 다룬 회전운동을 표현하는 수학적 원리는 전부 동일하다. 단 이제부터는 각 오브젝트가 Move parents를 가질 수 있고, 만약 Move parents가 있을 경우 이 오브젝트의 transform은 Global transform 대신 Local transform을 통해 표현한다. 이를 회전목마 운동에 대입시켜보자. 우선 회전목마는 move par..

mathematics/linear algebra

[선형대수] Matrix layout - Mathematics vs Graphics

Matrix Layouts, DirectX and OpenGL When reading about computer graphics, you invariably run into the mention of the Matrix datatype. Typically, this is a 4x4 matrix of floating-point values, used to perform affine transforms for graphics (scaling, rotation, translation, sometimes shearing). However, there are at least two different conventions for how to apply matrices to the vectors (vertices a..

mathematics/game mathematics

[Mathematics] 27. 기준점을 중심으로 한 원형 회전

지난 포스트에 이어 우리가 그동안 배운 행렬 연산을 실제로 어떤 식으로 활용할 수 있는지 다른 예시도 살펴보자. 회전목마 같이 회전하는 원판 위에 어떤 물체가 놓여 있을 때, 회전목마가 S(=회전행렬) 만큼 회전했을 경우 이 물체의 위치는 초기 위치 B에서 어떻게 표현할 수 있을까? 우선 회전목마의 Transform부터 표현해보자. 우리는 Transform을 TRS 중 S를 생략한 TR matrix로 표현가능하며, 회전목마의 회전하기 전 TR Matrix를 M이라고 하자. 또 y축에 대해 일정 각도만큼 회전운동을 하는 행위를 나타낸 회전행렬 S가 있다고 하자. 이때 회전 후 Transform인 M'은 단순히 SM으로 표현할 수 없는데, 이는 M이 기준점에 있다는 보장이 없으므로 S만큼 회전했을 때 M의 ..

software engineering/algorithms

이분탐색, 파라메트릭 서치

https://marades.tistory.com/7 이진탐색(Binary Search)와 파라메트릭서치(Parametric Search) 오늘 처음으로 소개할 알고리즘은 이진 탐색과 파라메트릭 서치입니다. 많은 분들이 이진 탐색에 대해선 많이 들어보셨을거라 생각하지만 파라메트릭 서치라는 알고리즘은 아마 생소하신 분 marades.tistory.com 관련 문제: BOJ 1114 https://dongwoo338.tistory.com/13 [boj 1114] 통나무 자르기 www.acmicpc.net/problem/1114 알고리즘 : 이분탐색(파라메트릭) + 그리디 몇주 전 풀고 올려야지! 하고 생각만 하다 이제야 올리는 문제다. 처음에 문제 분류가 그리디 + 이분탐색으로 되있어서 난 그리 dongwo..