전체 글115 [Android] 코루틴이란? 💡블로그 이동 원래 Velog에 Android 관련된 글을 썼었는데 하나로 통합하는 게 좋을 것 같아서 Tistory에 통합하려고 합니다! 아래는 링크는 본문입니다. [Android] 코루틴이란? 코루틴 개념 뿌시기!👊 velog.io ANR 문제란? 코루틴을 알아보기 전에 ANR을 먼저 알아보도록 하자. ANR은 액티비티가 응답하지 않는 오류 상황을 의미한다. 액티비티를 작성할 때 ANR을 고려하지 않으면 앱이 수시로 종료될 수 있다. 액티비티가 사용자 이벤트에 5초 이내에 반응하지 않으면 ANR 오류가 발생한다. 시스템에서 액티비티를 실행하는 수행 흐름을 메인 스레드 또는 화면을 출력하는 수행 흐름이라는 의미에서 UI 스레드라고 한다. ANR 문제를 해결하는 방법은 액티비티를 실행한 메인 스레드 이외.. 2024. 1. 23. [BOJ/11055/C++] 가장 큰 증가하는 부분 수열 이번에 푼 문제는 dp를 이용해서 푸는 문제였다. 예를 들어 수열 A에서 3번 째에 있는 수가 1번 째, 2번 째에 있는 수보다 크면 3번 째까지 증가하는 부분 수열의 합을 dp 배열에 저장해놓는 방식이다. 그러면 배열 dp에서 오름차순으로 정렬을 했을 때 제일 오른쪽에 있는 수가 최댓값이 될 것이다.#include#includeusing namespace std;int main(void){ int N; cin >> N; int A[1001]; int dp[1001]; for (int i = 0; i > tmp; dp[i] = A[i] = tmp; } for (int i = 0; i 2024. 1. 6. [BOJ/12931/C++] 두 배 더하기 이번에 푼 문제는 "두 배 더하기"이다.문제에서는 배열 A를 배열 B로 만들기 위한 연산의 최소 횟수를 구하라고 하였다. 그래서 당연히 배열 A를 B로 만들기 위한 최소 연산 과정을 고민하였다. 그러나 이렇게 푸는 것보단 배열 B를 배열 A로 만드는 것이 더 효율적이라는 것을 깨달았다.그렇게 된다면 계산 과정은 반대가 될 것이다.배열에 있는 값 하나 1 빼기배열에 있는 모든 값을 2로 나누기그리고 배열에 있는 모든 숫자가 0이 되면 배열 A를 만든 것이기 때문에 성공한 것이다. 문제 로직은 다음과 같다.#include #include using namespace std;int main(void){ int N, tmp; int count = 0; cin >> N; vector B; .. 2024. 1. 3. [컴퓨터구조] Lec22 The Basic of Caches ✅Cache : 자주 쓰이는 데이터를 저장하며, 매우 빠른 Access time을 지원하는 컴퓨터 메모리이다. Cache를 찾는 과정을 소프트웨어적으로 해결 불가능 하드웨어적으로 해결을 해야 함 cache 메모리가 더 작기 때문에 메인 메모리에서 캐시 메모리로 빨리 바꿔줘야 함 → 데이터를 빨리 보내는 방법 (address mapping) Q. 데이터가 캐시 내에 있는지 어떻게 알 수 있는가? 🤔 Q. 알 수 있다면 어떻게 찾을 수 있는가? 🤔 각 워드가 캐시 내의 딱 한 장소에만 있을 수 있다면 워드가 캐시 내에 있는지 없는지를 바로 알 수 있다. 각 메모리 워드에 캐시 내의 위치를 할당하는 가장 간단한 방법은 그 워드의 메모리 주소를 이용하는 것이다. ☑️Direct Mapping 모든 메모리 loc.. 2023. 12. 19. [컴퓨터구조] Lec19 Control Hazards 📢이전까지는 산술 연산과 데이터 전송이 관련된 헤저드였다. 이제는 분기와 관련된 파이프라이닝 헤저드가 있다. 원래 분기를 할 것인가 말 것인가에 대한 결정은 MEM에서 이루어진다. 그런데 이제 인출한 명령어게 늦게 결정되는 문제를 control hazard라고 한다. ✅Control Hazard 브랜치 헤저드 (브랜치 명령어 떄문에 발생해서) 해치된 명령어가 필요한 명령어가 아니기 때문에 해당 클럭 사이클에 실행할 수 없을 때 발생한다. * 명령어의 왼쪽에 있는 숫자들(40, 41,,)은 명령어 주소이다. 분기 명령어는 분기할 것인지를 MEM에서 결정을 한다. (위 표의 경우 CC4) 근데 다음 명령어가 PC+4이다. 그래서 이러한 CONTROL HAZARD가 발생한다. 📌Solution 데이터 해저드 .. 2023. 12. 19. [컴퓨터구조] Lec17, Lec18 Data Hazards ✅데이터 종속성 마지막 네 명령어 모두 레지스터 $2에 있는 첫 번째 명령어 결과에 종속적이다. 첫 번째 명령어는 $2에 쓰고 뒤에 나오는 모든 명령어는 $2를 읽는다. 같은 클럭 사이클 내에서 읽기와 쓰기가 이루어지면 쓰기가 먼저 끝나서 방금 쓴 값을 읽을 수 있다. 데이터 의존성의 조건은 목적지에 있는 레지스터를 다른 명령어가 쓸 때이다 붙어있거나 한 칸 떨어져 있으면 헤저드 발생, 그 외에는 디펜던스라고 하더라도 헤저드가 발생하지 않는다. 그렇다면 이 프로그램이 파이프라인에서 어떻게 수행될까?🤔 위 표를 보았을 때 위에서 아래로 내려오는 파란 선은 종속성을 나타낸다. 그 중에서 시간상 후방으로 가는 것들이 파이프 데이터 해저드인 것이다. 즉, $2의 올바른 값을 읽을 수 있는 건 add와 sw뿐이다.. 2023. 12. 19. [컴퓨터구조] Lec16 Pipelined Datapath and Control 들어가기 전에,, 데이터패스를 5개씩 분리해서 하나씩 clock cycle 부여해서 명령어가 돌아가게 했음 각 부분은 명령어 실행 단계에 따라서 다음과 같이 이름이 붙여진다.IF 명령어 인출 ID 명령어 해독 및 레지스터 파일 읽기 EX 실행 또는 주소 계산 MEM 데이터 메모리 접근 WB 쓰기 (Write-back) 동일한 시간에 동일하게 끝내게 하는 게 파이프라인이었다. 앞서 보았듯이 일반적으로 정보 흐름은 왼쪽에서 오른쪽으로 진행된다. 하지만 이 흐름 중 두 가지 예외가 있다. WB 단계: 결과를 Reg파일에 쓰기 (역류) ⇒ 데이터 해저드 유발 PC의 다음 값 설정: 증가된 PC값과 MEM 단계의 분기 주소 중에서 선택 ⇒ 제어 해저드 유발 📌lw Instruction Stage 이제부턴 색칠이 .. 2023. 12. 19. [컴퓨터구조] Lec15 Pipelining ✅파이프라니잉 : 여러 명령어가 중첩되어 실행되는 구현 기술 ☑️파이프라닝 예시 위의 그림은 네 묶음의 빨래를 처리하는데 8시간이 걸리지만 아래 그림은 빨래를 3.5시간만에 했죠?? 아래가 바로 파이프라인의 단계라고 볼 수 있습니다. 일감 하나를 끝내는 데 걸리는 시간을 단축하지는 못하지만, 해야 할 빨래가 많을 경우 처리량이 증가하므로 일을 끝내는 데 걸리는 전체 시간을 단축시켰습니다. 명령어 실행을 파이프라이닝 한 프로세서에도 같은 원리가 적용된다. 메모리에서 명령어를 가져온다. 명령어를 해독하는 동시에 레지스터를 읽는다. MIPS 명령어는 형식이 규칙적이므로 읽기와 해독이 동시에 일어날 수 있다. 연산을 수행하거나 주소를 계산한다. 데이터 메모리에 있는 피연산자에 접근한다. 결과값을 레지스터에 쓴다.. 2023. 11. 1. [컴퓨터구조] Lec12 Datapath Design ☑️기본적인 MIPS 구현 메모리 참조 명렁어 (lw, sw) 산술-논리 명렁어 (add, sub, AND, OR, slt) 분기 명령어 (beq, j) 모든 명령어의 처음 두 단계는 다 같다. 1️⃣STEP1 명령어 인출 (instruction fetch) 프로그램 카운터(PC)를 프로그램이 저장되어 있는 메모리로 보낸다. 메모리에서 명령어를 가져온다. 2️⃣STEP2 명령어 해독 (instruction decoding) 레지스터 읽기 (register prefetch) 3️⃣STEP3 (명령어 종류에 따라 달라짐) 메모리 참조 명령어 ⇒ 주소 계산을 위해 ALU 사용 산술-논리 명령어 ⇒ 연산 수행을 위해 ALU 사용 분기 명령어 ⇒ 비교하기 위해 ALU 사용 j 명령어를 제외한 모든 명령어가 ALU.. 2023. 10. 30. [컴퓨터구조] Lec10 Floating Point ☑️부동소수점 0.0000000001 또는 1.0 x 10^(-9) 3,155,760,999 또는 3.15576 x 10^9 위 두 수의 표현 방식은 Sicentific-notation(과학적 표기법)이라고 불린다. 이 방식에서 소수점의 왼쪽에는 한 자릿수만 있다. 과학적 표기법으로 표현된 숫자 중에서 맨 앞에 0이 나오지 않는 것을 normalized number(정규화된 수)라고 부른다. 1.0 x 10^9 ⇒ 정규화된 과학적 표기법 (O) 0.1 x 10^(-8) ⇒ 정규화된 과학적 표기법 (X) 위의 예시는 전부 십진수였는데, 이진수 또한 과학적 표기법으로 작성할 수 있다. 1.0 x 2^(-1) 이진수를 정규화된 형태로 표현하기 위해서는 소수점 왼쪽에 0 아닌 숫자가 한 자리만 나타나게 숫자를 .. 2023. 10. 30. [컴퓨터구조] Lec8 Multiplication Multiplication 첫 번째 피연산자는 multiplicand(피승수)라 부르고, 두 번째 피연산자는 multiplier(승수)라고 부른다. 💡multiplier가 1이면 multiplicand를 더하고 multiplier가 0이면 0을 더한다. (즉, 덧셈을 하지 않는다.) 1️⃣곱셈 하드웨어 매 단계마다 multiplicand를 왼쪽으로 한 자리씩 이동시키고 필요하면 중간 결과에 더해주는 식으로 계산되어야 한다. * 32비트 muliplicand가 왼쪽으로 32번 이동해야 하기 때문에 64비트 레지스터가 필요한 것이다. 2️⃣Second version 하드웨어 첫 번째 하드웨어와의 다른 점은 multiplicand 레지스터, multiplier 레지스터, ALU 전부 32비트이고, 곱 레지스터.. 2023. 10. 30. [컴퓨터구조] Lecture 4 Machine Instructions 명령어의 컴퓨터 내부 표현 거의 모든 명령어가 레지스터를 사용하기 때문에 레지스터 이름을 숫자로 매핑하는 규칙이 있어야 하는데 MIPS에서는 레지스터 $s0에서 $s7까지는 레지스터 번호 16에서 23번까지로, $t0에서 $t7까지는 번호 8에서 15까지로 매핑한다. 명령어의 각 부분을 필드(field)라고 부른다! 😍 R(register) 타입 명령어 op: 명령어가 실행할 연산의 종류 rs, rt: 첫 번째와 두 번째 근원지 피연산자 레지스터 rd: 목적지 레지스터 shamt: 자리이동 양 funct: op 필드에서 연산의 종류를 표시하고 funct 필드에서는 그 중의 한 연산을 구체적으로 지정 I(immediate) 타입 명령어 I 타입은 수치 연산과 데이터 전송 명령어에서 사용되며 그 모양은 위와.. 2023. 9. 30. 이전 1 ··· 4 5 6 7 8 9 10 다음