본문 바로가기

Programming

(15)
[Python] 비동기 프로그래밍에서 asyncio.Event 사용하기 Python의 asyncio 라이브러리는 비동기 프로그래밍을 쉽게 할 수 있도록 여러 가지 도구를 제공합니다. 이 중 asyncio.Event는 여러 비동기 함수가 특정 이벤트에 의존하게 만들 때 유용합니다. asyncio.Event 이해하기 asyncio.Event 객체는 기본적으로 두 가지 메소드를 주로 사용합니다: set() : 이벤트를 설정합니다. 이 메서드가 호출되면, wait()로 대기 중인 모든 코루틴이 실행을 재개합니다. wait() : 이벤트가 설정될 때까지 현재 코루틴의 실행을 중단합니다. clear() : 이벤트를 초기화합니다. 이 메서드가 호출되면, 다음부터 wait()를 호출하는 코루틴은 이벤트가 다시 설정될 때까지 대기합니다. 예제: 두 개의 비동기 함수와 함께 사용하기 아래 예..
[Python] 효과적인 디버깅, 모니터링이 가능한 Python Logging 이 글에서는 Python의 내장 logging 모듈을 효과적으로 사용하여 디버깅 및 모니터링 능력을 향상시키는 방법을 자세히 살펴보겠습니다. 로깅을 이해하는 것은 견고하고 유지보수 가능한 애플리케이션을 구축하기 위해 중요합니다. Why Logging Matter 우리가 파이썬 로깅의 구체적인 내용을 자세히 살펴보기 전에 왜 로깅이 중요한지 먼저 이해해 봅시다. 복잡한 파이썬 프로젝트를 작업할 때 특히 팀으로 작업할 때 로깅은 믿을 수 있는 도구가 됩니다. 로깅은 다음과 같은 데에 도움을 줍니다: Debugging : 코드의 흐름을 쉽게 추적하고 오류와 문제를 식별 Monitoring : 프로덕션 환경에서 애플리케이션의 동작을 모니터링 Auditing : 애플리케이션 내에서 중요한 이벤트와 활동을 기록 T..
[Python] 2개의 Dictionary 합치는 방법 중복된 Key 값이 없을 경우 dict_1 = {'A' : 1, 'B' : 2, 'C' : 3, 'D' : 4} dict_2 = {'E' : 5, 'F' : 6, 'G' : 7, 'H' : 8} result_dict = dict_1 result_dict.update(dict_2) >>> result_dict {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8} 중복된 Key 값이 있을 경우 중복된 Key값이 있을 때 update를 수행하면, 업데이트할 대상으로 덮어쓰기 발생 dict_1 = {'A' : 1, 'B' : 2, 'C' : 3, 'D' : 4} dict_2 = {'C' : 5, 'D' : 6, 'E' : 7, 'F' : 8} 따라서..
Numba 설치하기 Compatibility Numba is compatible with Python 3.7–3.10, and Numpy versions 1.18 up to 1.23. Our supported platforms are: Linux x86 (32-bit and 64-bit) Linux ppcle64 (POWER8, POWER9) Windows 7 and later (32-bit and 64-bit) OS X 10.9 and later (64-bit and unofficial support on M1/Arm64) *BSD (unofficial support only) NVIDIA GPUs of compute capability 5.3 and later Compute capabilities 3.5 - 5.2 ar..
NUMA, ccNUMA, hUMA 설명 NUMA(Non-Uniformed Memory Access) 불균일 기억장치 접근 메모리에 접근하는 시간이 CPU와 메모리의 상대적인 위치에 따라 달라지는 컴퓨터 메모리 설계 방법. 각 CPU는 메모리의 일부를 자신의 지역 메모리(Local Memory)로 가지고 있으며 이 지역 메모리에 접근하는 속도는 원격 메모리(Remote Memory)에 접근하는 속도보다 훨씬 빠르다. 간단히 예를 들어 시스템에 CPU 소켓이 네 개 있고, 512GB의 메모리가 설치되어 있다면 물리 주소 0~128G-1번지까지의 메모리는 0번 소켓의, 128G~256G-1번지까지의 메모리는 1번 소켓의 지역 메모리가 되는 방식. 각 소켓에서 지역 메모리에 접근할 때에는 원격 메모리에 접근할 때보다 훨씬 빠르게 데이터를 읽고 쓸 수..
강력한 수준의 경량 프로파일러 Nvprof 강력한 수준의 경량 프로파일러 Nvprof 공헌자(저자/번역자): Mark Harris / NVIDIA Korea CUDA 5의 CUDA 툴킷에 nvprof라는 강력한 새 도구가 추가됐습니다! Nvprof는 진행 상황을 빠르게 검사, 작성 언어와 관계없이 NVIDIA GPU에서 실행되는 모든 CUDA 커널을 프로파일링 등 매우 편리한 도구입니다. Nvprof의 다양한 기능을 개발자 블로그에서 확인가능합니다. 링크: https://developer.nvidia.com/ko-kr/blog/cuda-%EC%A0%84%EB%AC%B8%EA%B0%80-%ED%8C%81-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EB%B2%94%EC%9A%A9-gpu-%ED%94%84%EB%A1%9C%ED%8C%8C%EC..
Python 알고리즘 Quick books Bubble Sort Algorithm arr = [7, 3, 9, 2, 0, 4, 8, 1, 6, 5] def bubbleSort(theSeq): n = len(theSeq) for i in range(n - 1): for j in range(n - 1 - i): if theSeq[j] > theSeq[j + 1]: temp = theSeq[j] theSeq[j] = the Seq[j + 1] theSeq[j + 1] = temp return theSeq print(bubbleSort(arr)) Printing Prime Numbers #printing prime numbers in a range lower = 100 upper = 200 for num in range(lower, upper+1): i..
OpenMP 동기제어 지시어 OpenMP 동기제어 멀티스레딩으로 프로그램을 제작할 때, 자주 발생하면서도 찾기 어려운 것이 동기화로 인해 발생하는 문제이다. OpenMP는 병렬영역에서 데이터 액세스 동기나 코드 실행의 동기를 제어하는 지시어를 지원한다.master, atomic, critical, barrier, taskwait, flush, ordered 지시어가 있는데 각각 지시어들의 사용법과 특징을 알아본다. 1. master 지시어스레드 팀에서 마스터 스레드에 의해서만 해당 코드가 실행되도록 한다.#pragma omp master 지시어는 암시적 동기화를 지원하지 않기 때문에, 다른 스레드들은 이후에 나오는 코드를 수행하게 된다. 마스터 스레드의 처리 완료때 까지 대기하려면 barrier 지시어를 사용해야 한다. 2. bar..