반응형
Python 3.13은 2024년 10월에 출시된 최신 버전으로, 이전 버전들에 비해 상당한 개선과 새로운 기능을 제공합니다. 이번 글에서는 주요 변경사항들을 이전 버전과 비교하며 상세히 살펴보고, 각 기능에 대한 자세한 예제를 통해 이해를 돕겠습니다.1. 새로운 인터랙티브 인터프리터 (REPL)이전 버전 (Python 3.12 이하)단일 라인 편집만 가능제한된 색상 지원명령어 실행 시 괄호 필요 (예: exit(), help())Python 3.13의 개선사항멀티라인 편집 지원향상된 컬러 출력간소화된 명령어 (예: exit, help)예제: 새로운 REPL 기능 활용# Python 3.13 REPL>>> def greet(name):... return f"Hello, {name}!"...>>> ..
이전 글에서 DQN을 구현해 CartPole 환경을 학습시켜보았습니다. DQN은 간단하고 효과적이지만, 여전히 다음과 같은 문제가 남아 있습니다.Q값의 과추정(Overestimation): DQN은 최대 Q값을 직접 사용하기 때문에, 노이즈나 학습 초기 불안정으로 인해 실제보다 높은 Q값을 선택하는 경향이 있습니다. 이로 인해 정책이 왜곡될 수 있습니다.데이터 효율성과 안정성 문제: 경험 리플레이를 사용하지만, 모든 transition이 동일한 확률로 샘플링됩니다. 또, Q값 계산 시 행동에 따른 Q분포를 좀 더 효율적으로 학습할 수 있는 구조적 개선도 가능할 것입니다.이러한 문제를 완화하기 위해 다양한 DQN 변형 알고리즘이 제안되었습니다. 그중 대표적인 두 가지를 소개하겠습니다.Double DQN (..
지금까지 우리는 CUDA 프로그래밍 기초부터 시작해 Host-Device 메모리 관리, 스레드/블록/그리드 개념, 비동기 스트림, 메모리 계층(Shared/Constant) 최적화 기법, 그리고 CMake와 Modern C++를 활용한 빌드 환경 개선까지 쭉 달려왔습니다. 이제 어느 정도 기본기가 갖추어졌다면, 실제 GPU 코드가 의도대로 동작하고 있는지 확인하고, 혹시 병목현상이 일어나지는 않는지 점검하는 단계가 필요합니다. 이번 글에서는 디버깅(Debugging)과 성능 프로파일링(Performance Profiling) 방법을 간단히 살펴볼 겁니다. 한 번에 모든 툴과 기법을 다루긴 어렵지만, 대표적인 도구와 기본적인 절차를 익혀두면 앞으로 문제 해결에 큰 도움이 됩니다.GPU 디버깅 기본 아이디어..
이번에 소개할 표현은 "Hit the Ground Running"입니다. 이 표현은 시작부터 신속하고 효과적으로 작업을 시작하다는 의미로, 새로운 프로젝트나 작업을 빠르게 진행해야 하는 상황에서 자주 사용됩니다. 특히, 새로운 환경에서 빠르게 적응하거나, 첫 단계부터 생산성을 발휘해야 할 때 적합한 표현입니다.1. 표현의 의미"Hit the Ground Running"은 "땅에 발을 딛자마자 달리기 시작하다", 즉 "바로 행동으로 옮기다"를 의미합니다. 이는 사전 준비를 끝낸 상태에서, 작업을 시작하자마자 빠르고 효율적으로 성과를 내는 것을 뜻합니다.예:"우리는 새 프로젝트를 시작하자마자 빠르게 작업을 진행할 준비가 되어 있어요."→ "We’re ready to hit the ground running ..
이번 글에서는 모던 CMake를 활용하여 재사용 가능한 라이브러리를 패키지화하고, 다른 프로젝트에서 손쉽게 사용할 수 있도록 설정하는 방법을 알아보겠습니다. CMake의 패키지 관리 기능을 통해 라이브러리를 배포하고, find_package()를 이용하여 의존성을 간편하게 관리할 수 있습니다. 이 과정을 통해 프로젝트의 확장성과 유지보수성을 크게 향상시킬 수 있습니다.CMake 패키지 구성의 필요성재사용 가능한 라이브러리를 패키지화하면 다음과 같은 이점을 얻을 수 있습니다:의존성 관리의 단순화: find_package()를 통해 필요한 라이브러리를 손쉽게 찾고 링크할 수 있습니다.버전 관리: 특정 버전의 라이브러리를 요구하고, 호환성을 보장할 수 있습니다.배포의 용이성: 라이브러리를 다른 개발자나 프로젝..
미국 빅테크 기업에서 일할 때, 매니저나 멘토와의 1:1 미팅은 업무 진행 상황 점검, 커리어 발전 방향 논의, 피드백 요청, 목표 설정 등 다양한 목적을 지닌 중요한 시간입니다. 이 때 영어를 통한 의사소통은 명확하고 효율적이어야 합니다. 이번 글에서는 1:1 미팅 상황에서 바로 활용할 수 있는 영어 표현, 대화 전략, 구체적 예문과 가상 시나리오를 풍부하게 제시합니다.1. 1:1 미팅의 기본 원칙: 사전에 어젠다 공유 & 명확성 유지1:1 미팅은 한정된 시간 안에 핵심 사항을 다루기 위해 어젠다를 미리 공유하는 것이 좋습니다.예문:"I’d like to discuss three main points today: progress on the new feature, potential obstacles, ..
안녕하세요! 지난 글에서는 C++20/23 문법과 OpenCL C++ Wrapper를 활용해 OpenCL 코드를 훨씬 깔끔하게 만드는 방법을 살펴봤습니다. 이번 글에서는 실제로 유용할 수 있는 간단한 이미지 처리 예제를 통해 OpenCL의 이미지 기능을 체험해보려 합니다. 기본적인 버퍼 연산만 다뤘던 것에서 한 단계 나아가, GPU 가속을 활용한 이미지 변환(예: 컬러 이미지를 그레이스케일로 변환)을 시도해보죠.이번 글에서는 다음 내용을 다룹니다.이미지 객체를 사용한 데이터 처리호스트 측에서 이미지 로딩(예: stb_image 사용)OpenCL 커널에서 read_imagef, write_imagef 함수 활용결과 확인을 위한 이미지 저장CUDA와 비교: CUDA 텍스처/서피스와 유사한 개념1. 준비사항이..
C++23에서는 범위(Range) 라이브러리에 풍부한 알고리즘들이 추가되어, 데이터 처리 시 다양한 시나리오를 표준화된 방식으로 해결할 수 있게 되었습니다. 그중 하나인 std::ranges::sample 알고리즘은 범위에서 무작위로 일부 원소를 추출하여 샘플링할 수 있도록 하는 기능을 제공합니다. 이를 통해 무작위 데이터 선정, 표본 추출 등의 작업을 표준 라이브러리 알고리즘만으로 간편히 구현할 수 있습니다.이번 글에서는 std::ranges::sample의 개념과 사용법, 그리고 이전 방식과 비교하여 어떠한 개선점을 제공하는지 알아보겠습니다. std::ranges::sample란 무엇인가요?std::ranges::sample(rng, out, n, gen)는 범위 rng에서 원소를 n개 무작위로 선택..
C++23에서는 비동기 프로그래밍과 스레드 관리 패턴을 한층 더 간단하고 효율적으로 만들기 위해 std::in_place_stop_source와 std::in_place_stop_token이 도입되었습니다. 이들은 C++20에서 도입된 std::stop_source와 std::stop_token을 개선한 것으로, 비동기 작업이나 스레드 실행을 안전하고 직관적으로 중단(stop)할 수 있는 메커니즘을 제공합니다.기존의 std::stop_source/std::stop_token과 달리, in_place 버전은 무상태(stateless)로, 저장 비용이 줄고 더 가벼우며, 기본적으로 커스텀 메모리 관리나 동기화 없이도 안전하게 중단 신호를 전달하고 처리할 수 있습니다.이번 글에서는 std::in_place_s..
C++23에서는 범위(Range) 라이브러리를 더욱 강화하기 위해 다양한 뷰(View) 어댑터가 추가되었습니다. 그중 std::views::repeat와 std::views::repeat_n는 특정 값을 무한히 반복하거나, 지정된 횟수만큼 반복하는 시퀀스를 손쉽게 만들 수 있도록 해주는 뷰 어댑터입니다. 이를 통해 반복적인 데이터 소스를 간편하게 생성할 수 있으며, 다른 범위 어댑터와 결합하여 여러 가지 흥미로운 데이터 처리 파이프라인을 구성할 수 있습니다. 이번 글에서는 std::views::repeat와 std::views::repeat_n의 개념과 사용법, 그리고 이전 방식과 비교하여 어떠한 개선점을 제공하는지 알아보겠습니다. std::views::repeat란 무엇인가요?std::views::re..