본문 바로가기
반응형

전체 글552

컴퓨터 구조 - ISA, CISC, RISC 명령어 집합 명령어의 기본적인 구조와 작동원리는 크게 다르지 않지만 명령어의 세세한 생김새, 명령어로 할 수 있는 연산, 주소 지정 방식 등은 CPU마다 조금씩 차이가 있다. CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합(instruction set) 또는 명령어 집합구조(ISA, Instruction Set Architecture)라고 한다. 즉 CPU마다 ISA가 다를 수 있다. 어셈블리어와 ISA ISA가 다르다는 건 CPU가 이해할 수 있는 명령어가 다르다는 뜻이고 명령어가 달라지면 어셈블리어도 달라진다. 다시 말해 같은 소스 코드로 만들어진 같은 프로그램이라 할지라도 ISA가 다르면 CPU가 이해할 수 있는 명령어도 어셈블리어도 달라진다. ISA가 같은 CPU끼리는 서로의 명령어를 이해.. 2023. 11. 29.
컴퓨터 구조 - 명령어 파이프라인, 슈퍼 스칼라, 비순차적 명령어 처리 기법 빠른 CPU를 만들려면 높은 클럭 속도에 멀티코어, 멀티스레드를 지원하는 CPU를 만드는 것도 중요하지만 CPU가 놀지 않고 시간을 알뜰하게 쓰며 작동하게 만드는 것도 중요하다. 명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시키는 기법인 명령어 병렬처리기법과(ILP, Instruction-Level Parallelism)이 있다.대표적인 명령어 병렬 처리 기법에는 명령어 파이프라이닝, 슈퍼스칼라, 비순처적 명령어 처리가 있다. 1. 명령어 파이프라인(Instruction Pipeline) CPU가 명령어를 처리하는 과정을 여러 단계로 나누어 일련의 파이프라인 스테이지에서 동시에 처리하는 기법이다. 이를 통해 여러 명령어가 동시에 파이프라인의 각 스테이지를 통과하며 병렬적으로 실행된다. 01 명.. 2023. 11. 29.
Effective C# - Item11 .NET 리소스 관리에 대한 이해 .NET 개발자가 되기 위해서는 관리 환경에서 메모리와 주요 리소스들이 어떻게 관리되는지를 올바르게 이해해야 한다. 특히 메모리 관리와 가비지 컬렉션의 동장 방식을 정확이 이해해야 한다. 가비지 컬렉션(GC)과 메모리 관리 가비지 컬렉션은 관리되는 메모리(managed memory)를 관리하는 기술로, 메모리 누수, 댕글링 포인터, 초기화되지 않는 포인터 등과 같은 메모리 관리 문제를 자동으로 처리한다. .NET 프레임워크에서는 가비지 컬렉터가 주기적으로 실행되어 더 이상 사용되지 않는 객체를 찾아내고 메모리에서 제거한다 마크/콤팩트(Mark/Compact) 알고리즘 여러 객체 사이의 연관 관계를 효율적으로 파악하여 더 이상 사용하지 않는 객체를 자동으로 제거한다. 마킹(Marking) 이 알고리즘의 첫.. 2023. 11. 29.
백준 C# - 11726 +) 풀이 DP를 이용해서 풀어야한다. DP알아보러 가기 C# - 다이나믹 프로그래밍(DP) 다이나믹 프로그래밍 메모리를 적절히 사용하여 수행 시간 효율성을 향상 시키는 최적화 기법중 하나이다. 큰 문제를 작은 부분 문제로 나누어 해결하며 이미 계산된 작은 문제의 결과를 메모 code-piggy.tistory.com 풀이 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 문제이다. 그림에서 보면 끝에 부분이 2x1인 경우와 2x2인 2가지 경우로 나누어진다는 것을 확인할 수 있다. 01 2x1 2x1로 고정되어 있는 경우 경우의 수는 그 자리를 제외한 (n-1)!과 같다. 하지만 우리는 그 값을 dp[i-1]에 저장해놓았으므로 dp[i]에 그 값을 더해준다. 02 2x2 2x2로 고정되어 .. 2023. 11. 29.
백준 C# - 1463 +) 풀이 DP를 이용해서 풀어야한다. DP알아보러 가기 C# - 다이나믹 프로그래밍(DP) 다이나믹 프로그래밍 메모리를 적절히 사용하여 수행 시간 효율성을 향상 시키는 최적화 기법중 하나이다. 큰 문제를 작은 부분 문제로 나누어 해결하며 이미 계산된 작은 문제의 결과를 메모 code-piggy.tistory.com 풀이 DP의 점화식을 구해보자 dp[i] = dp[i - 1] + 1 // 1을 빼는 경우 dp[i] = min(dp[i], dp[i / 2] + 1) // 2로 나누는 경우 dp[i] = min(dp[i], dp[i / 3] + 1) // 3으로 나누는 경우 왜 점화식 끝에 1을 더해요? dp[i]는 i를 1로 만들기 위해 필요한 최소 연산 횟수를 나타내므로 각각의 연산이 수행될때마다 count하는 .. 2023. 11. 27.
C# - 퀵 정렬(Quick Sort) 퀵정렬(Quick Sort) 퀵 정렬에서는 피벗(Pivot)을 기준으로 배열을 분할하고, 각 부분 배열에 대해 정렬 작업을 수행하지만 피벗을 다시 처리하는 부분 문제는 호출하지 않는다. 한 번 피벗의 위치가 정해지면 해당 피벗은 정렬이 완료된 것으로 취급되어 중복 계산이 발생하지 않는다. 핵심 : 키 값을 잡아 더 큰것과 더 작은것 바꾸기 01 피벗 선택 퀵 정렬의 핵심은 피벗(pivot)을 선택하는 것이다. 피벗은 배열의 원소 중에서 하나를 선택한다. 피벗 선택의 효율성이 정렬 속도에 영향을 미친다. 02 분할 선택된 피벗을 기준으로 배열을 두 부분으로 분할한다. 피벗보다 작은 값은 피벗의 왼쪽으로, 큰 값은 피벗의 오른쪽으로 배치된다. 분할 과정 후에는 피벗의 위치가 최종적으로 결정된다. 03 정복 .. 2023. 11. 27.
반응형