목록전체 글 (410)
Develog
보틀넥 문제 (Bottle neck)GPU가 연산하는데 필요한 모든 소스 데이터는 CPU를 통해 가져와야 한다.(정점 좌표, 면의 순서, 광원 좌표 등)컴퓨터는 기본적으로 CPU, GPU, DRAM 등 다양한 역할을 담당하는 부품이 모여서 구성된 복합체다. 이 때문에 특정 부품의 성능이 다른 부품의 성능보다 상대적으로 떨어진다면 병목 현상이 발생해 전체적인 성능이 떨어질 수밖에 없다.즉, 컴퓨터의 전체 성능은 여러 부품 중에서 가장 느린 성능을 지닌 부품의 속도에 맞게 결정된다. GPU의 경우, 연산에 필요한 데이터를 비디오 메모리에서 가져오는 단계에서 성능이 떨어지는 상황이 흔히 발생한다.그 중에서도 텍스처는 가장 흔히 보틀넥 문제를 일으키는 요소로 지목된다. 용량이 너무 큰 텍스처 데이터를 한꺼번에 ..
CPU와 GPUCPU는 복잡한 연산의 순차 처리에 특화되어 있는 유닛(Unit)이지만, GPU는 단순한 연산의 병렬 처리에 특화되어 있는 유닛이다. 이러한 구조적인 차이 때문에 CPU에서 픽셀 단위의 연산을 처리한다면, 픽셀의 수만큼 엄청난 양의 연산을 순차적으로 반복해야 한다. (1920 * 1080 = 2,073,600번)(참고: https://youtu.be/ZrJeYFxpUyQ?si=rDr9yryrzvMwzwa8)드로우 콜 (Draw Call)복잡한 처리를 CPU가 먼저 처리한 다음, GPU에 '완벽하게 준비된 데이터'만 전달하여 빠른 속도로 계산만 진행한다. 이때, CPU가 GPU에게 '그리기' 명령을 내리는 것을 드로우 콜(Draw Call)이라고 부른다.드로우 콜을 받은 GPU는 CPU에서 ..
1. 문자열Python은 문자열을 다룰 때 정말 강력한 성능을 발휘하는 언어 중 하나입니다.문자열을 자르고, 붙이고, 곱하고, 더하는 등 직관적이고 사고공학적(?)인 구조를 지니고 있어 유연하게 활용할 수 있습니다.문자열을 가공할 때는 물론, 문자열을 출력할 때도 이러한 Python의 장점이 발휘됩니다.repr( )과 str( )이 그것입니다. 2. repr( )문자열로 객체를 다시 생성하고자 할 때 사용됩니다.import datetimea = datetime.datetime(2017, 9, 27)str(a)>>> '2017-09-27 00:00:00'a = datetime.datetime(2017, 9, 27)repr(a)>>> 'datetime.datetime(2017, 9, 27, 0, 0)'문자..
1. C++ 진짜 싫다아니 대체 이런 언어를 왜 쓰는 거죠.프레임워크를 설치하든, 코드를 짜든, 문법 배운 거 실습을 하든 도통 뭘 하든 간에 제대로 돌아가는 꼴을 못 봤습니다.버전은 어마어마하고, 책임은 몽땅 프로그래머한테 떠넘기고, OS마다 컴파일러마다 파편화는 아찔한 수준이고, 패키지든 프레임워크든 뭐 하나 설치만 하면 에러부터 뿜어대고...Catch2요?아니 유닛 테스트를 위해서 쓸 수 있는 좋은 프레임워크라고 소개하면 뭐 합니까, 설치해서 쓸려고 해도 에러만 토해내는데!초보자 입장인 저에게는 C++이 너무나도 싫습니다. 문법 괴팍하다고 한동한 멀리하던 Python이 선녀로 보이는 수준입니다.아니 패키지 설치하라고 할 때마다, 새로운 문법을 하나씩 배울 때마다 늘 새롭고 재밌지가 않아요. 겁부터 ..
1. 가정법 과거완료과거의 일은 미련이 남기 마련입니다. "그때 조금만 더 ~를 했다면 ~했을 텐데!"처럼요.사실 지난 일을 되돌리는 건 불가능합니다. 하지만 묘사는 가능하죠.가정법 표현은 이러한 경우에 주로 사용됩니다.현재 벌어진 결과에 대해 아쉬움과 미련 등을 묘사하기 위해 특정 조건을 가정하여 말합니다."과거에 있었던 일에 대해 그보다 더 과거가 되는 시점에서 '무언가'를 행한다면 달라졌을 텐데!"라는 표현을 사용할 때는 가정법 과거완료를 사용합니다.여기서 독특하게도, 조건(IF)과 결과(Result)의 순서를 바꾸는 것도 가능합니다.If I hadn't been ill, I would have gone to the party.I would have gone to the party if I hadn..
1. 템플릿템플릿은 C++에서 제네릭을 구현하기 위해 사용되는 문법입니다.타입을 고정시키지 않고 경우에 따라 다양한 타입의 값을 받아 동작시킬 수 있기 때문에 보다 유연하고, 재사용성이 높은 코드를 작성하는 것이 가능해집니다.template struct AutoBrake { AutoBrake(const T& publish) : publish{ publish } {} void observe(const SpeedUpdate& cd) {} void observe(const CarDetected& cd) {} void set_collision_threshold_s(double x) { collision_threshold_s = x; } double get_speed_..
1. 대문자 활용법대문자를 활용하는 방법을 논한다면 문장의 첫 글자를 대부분 떠올릴 것입니다.물론 그것도 맞지만 의외로 더 많은, 다양한 활용법이 존재합니다. 1.1. 날, 달, 휴일 등을 나타낼 때주(week), 달(month), 행사가 있는 날 등을 표기하고자 할 때 대문자로 표기합니다. 단, 계절을 표기할 때는 사용하지 않습니다.His birthday party is on Thursday.It rains a lot in April and May, but the summer is very dry. 1.2. 사람 또는 장소의 이름을 나타낼 때사람의 이름, 장소의 명칭 등을 나타낼 때도 대문자로 표기합니다. 거리, 행성, 국가, 대륙도 이에 포함됩니다.Bea Jankowski has lived on Ch..
1. 영국어, 미국어사실 외국인 입장에서 보면 뭐가 뭔지 구분이 잘 안 갑니다.영국인 미국인이 한국어랑 조선어랑 같이 놓고 본다고 해서 제대로 구분할 수 있을까 싶긴 하지만, 생각해 보니 그거랑 좀 다른 성격 같으니까 없던 일로 하고 넘어갑시다.아무튼, 그럼에도 유심히 잘 살펴보면 생각보다 차이가 나는 편입니다. 영화에서도 나온 대사인 "Shall we?"가 영국 영어였다는 걸 알고서 충격받은 건 덤입니다. 2. 현재완료 시제와 단순 과거 시제저는 시제가 매우 싫습니다. 하지만 매일같이 사용되는 문법이기 때문에 절대 피할 수 없죠.역설적이게도 그 덕분에 영국 영어와 미국 영어를 쉽게 구분할 수 있는 힌트가 발생합니다.영국 영어에서는 현재에 영향을 미치는 과거의 사건/행동을 표현할 때 현재완료 시제를 사..
