CS/Multicore & GPU

[Multicore] 효율적인 Matrix Multiplication - 멀티쓰레드와 캐시

0. Matrix Multiplication 아래는 N * N 크기의 행렬 A, B를 곱하여 그 결과인 N * N 행렬 C를 구하는 과정입니다. 결과로 나오는 C 행렬의 (i, j)번째 값을 계산하기 위해서는 위 그림처럼 A 행렬의 i번째 행과 B행렬의 j번째 열의 원소들을 곱해야 합니다. 위 과정을 코드로 보면 아래와 같으며 두 개의 N * N 행렬의 곱셈에 드는 시간 복잡도는 O(N^3)임을 알 수 있습니다. for i = 1 to n for j = 1 to n for k = 1 to n C(i, j) = C(i, j) + A(i, k) * B(k, j) 자, 그러면 위 연산을 어떻게 멀티쓰레딩을 통해 병렬로 처리할 수 있을까요? 앞으로 몇 가지 방법에 대해 소개를 할텐데, 각 방법이 동작하는 방식과..

2022.04.19 게시됨

CS/Multicore & GPU

[Multicore] 쓰레드의 Workload 관리와 Thread Pool에 대해

1. 쓰레드의 Workload 밸런스 8개의 쓰레드를 가지고 천 만개의 원소를 가진 배열의 각 원소에 대해 특정한 연산(더하기나 빼기 등)을 하는 작업을 한다고 해보겠습니다. 그러면 우리는 각 쓰레드에 10,000,000 / 8 = 1,250,000 개의 원소에 대한 연산을 할당하고, 쓰레드가 작업을 마치면 결과를 모아서 다음 과정을 이어나갈 수 있습니다. 하지만 실제 멀티쓰레드 환경은 언제나 위와 같이 각 쓰레드가 동일하거나 비슷한 수준의 작업량을 할당받는 보장이 없습니다. 어떤 쓰레드는 다른 쓰레드보다 훨씬 더 많은 작업을 처리해야 할 수 있고, 또 다른 쓰레드는 정말 적은 양의 작업을 마치고 다른 쓰레드들이 끝나길 기다려야 할 수 있죠. 위 그림은 시간에 따른 4개 쓰레드의 작업 진행 상황입니다. ..

2022.03.17 게시됨

CS/Multicore & GPU

[Multicore] Race Condition과 Locks

1. 들어가면서 멀티쓰레딩에서 Race Condition과 Lock은 가장 기초적이면서 중요한 개념입니다. 멀티쓰레딩이라는 개념을 단순하게 정의해봐도, 여러 개의 쓰레드가 공유되는 자원을 바탕으로 분산 처리를 하는 것이기 때문입니다. 그래서 이번 포스팅은 운영체제 시간에 배웠던 Race Condition과 Lock 개념을 되짚어보고, 코드를 통해 좀 더 구체적으로 공부해보려고 합니다. 먼저 아래는 Race Condition과 Lock의 정의입니다. [1] Race Condition A race condition occurs when two threads access a shared variable at the same time. The first thread reads the variable, and t..

2022.03.11 게시됨

CS/OS

[운영체제/OS] Blocking / NonBlocking, Sync / Async

0. 들어가면서 이번 포스팅에서는 Blocking/Non-Blocking(블록킹, 논블록킹)과 Sync/Async(동기, 비동기) 개념에 대해 정리해보고, 각각의 개념이 어떻게 쓰이는지를 정리해보려고 합니다. 아래 두 영상에서 이 개념들을 정말 잘 설명해주신 것 같아서 해당 영상을 참고해서 정리했습니다. 꼭 한 번 시청해보세요! 멍토의 Blocking vs Non-Blocking, Sync vs Async 우의 Block vs Non-Block & Sync vs Async 1. Blocking, Non-Blocking, Sync, Async 먼저 Blocking, Non-Blocking, Sync, Async 네 가지 개념에 대해 이해해보겠습니다. Blocking: 다른 작업을 하는동안 자신의 작업에 ..

2021.12.02 게시됨

CS/Network

[네트워크/Network] 세션(Session), 쿠키(Cookie), 캐시(Cache)의 구분

0. 들어가면서 세션, 쿠키, 캐시는 기본적으로 HTTP 프로토콜의 특징을 이해해야 왜 필요한지 이해할 수 있는 개념이라고 생각합니다. 그리고 그 중에서도 이 개념들과 관련이 깊은 HTTP의 비상태(stateless) 프로토콜이란 무엇인지에 대해 짚어보려고 하는데요. 참고로, HTTP의 비상태성은 HTTP의 지속 연결과는 구분되는 개념입니다. HTTP의 지속 연결은 서버가 응답을 보낸 후에 TCP 연결을 그대로 유지하는 특징을 말하는데, 이는 클라이언트와 서버가 하나의 지속 TCP 연결을 통해 데이터를 주고받고, 일정 시간(Timeout)동안 사용되지 않으면 연결을 닫는 것을 말합니다. HTTP 헤더의 Keep-alive가 이를 말해주고 있죠. 1. HTTP, 비상태 프로토콜(Stateless Proto..

2021.11.15 게시됨

CS/Database

[데이터베이스/DB] 데이터베이스에서 인덱스(INDEX)의 사용

0. 들어가면서 인덱스(Index)는 데이터베이스에서 테이블의 조회 속도를 높여주는 자료구조를 말합니다. 조회 성능의 관점에서 인덱스의 사용은 데이터베이스 안의 레코드를 처음부터 풀스캔(Full Scan)하지 않고, 테이블 내의 컬럼을 색인화하여 B+ Tree로 구성된 구조를 만들고 INDEX 파일 검색으로 속도를 향상시키게 됩니다. 사실 인덱스 자체에 대한 개념은 평소에 우리가 무의식적으로 계속 사용하고 있습니다. List objects = ... Object o = objects.get(index); ... 위와 같이 리스트에서 어떤 자료를 뽑을 때 처음부터 하나하나 세서 해당 위치에 있는 자료를 뽑는 것이 아니라, 인덱스로 바로 접근하여 해당 위치의 데이터를 꺼내오고 있죠. 그렇다면 데이터베이스에서..

2021.11.08 게시됨

CS/Network

[네트워크/Network] REST API와 HTTP 메서드(GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH)

1. Rest API, Restful API 정의 REST는 REpresentational State Transfer라는 용어의 약자로, 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다. 조금 더 현실적인 관점에서 REST API를 정의하자면, REST API는 웹 상에서 사용되는 여러 리소스를HTTP URI로 표현하고 해당 리소스에 대한 행위를 HTTP Method로 정의하는 방식을 말합니다. 그리고 RESTful API는 REST API 설..

2021.10.28 게시됨

CS/Database

[데이터베이스/DB] 관계형 DB에서 JOIN의 개념(Inner join과 Left join)

1. JOIN ? JOIN이란 영어 해석 그대로 두 개 이상의 테이블을 결합하여 데이터를 조회할 때 쓰는 개념입니다. 정규화를 통해 여러 테이블로 나누어진 데이터는 서로 연관관계를 가지고 있을 수 있고, A라는 엔티티를 조회할 때 B라는 엔티티의 부분 정보도 같이 조회하고 싶다면 JOIN 개념이 반드시 필요하죠. 어떻게 보면 JOIN이 필요한 이유는 정규화로부터 파생되었다고 볼 수 있기 때문에, 정규화 개념은 JOIN을 공부하기 이전에 반드시 알아야하는 내용이기도 합니다. 본론으로 돌아와서, JOIN의 예시를 하나 보겠습니다. 위 내용은 게시물(Post)을 조회할 때 게시물을 작성한 유저의 정보와 해당 게시물에 관련된 '좋아요' 정보를 함께 불러오는 JPQL 쿼리입니다. 정규화 과정에 의해 DB 스키마는..

2021.10.26 게시됨

CS/Network

[네트워크/Network] 비연결형 트랜스포트 UDP 정리

💡0. 들어가면서 이전 포스팅에서 OSI 7계층에 대해 정리를 했었는데요. 트랜스포트 계층의 기본적인 역할은 네트워크 계층과 애플리케이션 레벨 프로세스 간의 데이터를 넘겨주기 위해서 다중화와 역다중화 서비스를 제공하는 것이었습니다. [네트워크/Network] 네트워크의 기본: OSI 계층 구조와 캡슐화 🤔 0. 개요 "OSI 7계층이 무엇인가요?" "컴퓨터 네트워크를 왜 7계층으로 나누나요?" "메시지, 데이터그램, 세그먼트의 차이와 캡슐화는 무엇인가요?" CS를 공부해본 사람이라면 한 번쯤은 OSI 7계층 studyandwrite.tistory.com 이 내용을 간단하게 복기해보면, 애플리케이션 계층은 트랜스포트 계층에 '메시지(Message)' 형태로 데이터를 전달해주고, 트랜스포트 계층은 이를 '세..

2021.10.15 게시됨