예전에 만들어놓은 안드로이드 프로젝트가 있었는데, git repository를 프로젝트 root 가 아니라 app 안에 생성해놨었다. 그래서 clone 할 때마다 불편해서 이 참에 .git 디렉터리를 옮기기로 했다.


현재 .git 디렉터리가 있는 경로에서 커맨드 창을 열고, 다음과 같은 명령어를 입력하면 된다.



git init --separate-git-dir=/path/to/move/.git .



나 같은 경우에는 한 단계 상위의 디렉터리로 .git 디렉터리를 옮기려고 했으니, 입력하는 명령은 다음과 같다.


git init --separate-git-dir=../.git .

블로그 이미지

NCookie

,

컴퓨터의 세대별 발전

반도체 기술의 획기적인 발전에 따라 컴퓨팅 환경은 크게 진화하고 있음

  • 1970년대 : 메인 프레임 시대, 단일 컴퓨터를 다수의 전문 사용자가 공유
  • 1990년대 : 개인 컴퓨팅 시대, 하나의 컴퓨터를 한 사람이 전용
  • 현재 : 유비쿼터스(Ubiquitous), 언제 어디서나 다수의 컴퓨터를 개인이 사용

컴퓨터의 세대별 특징

세대소자기억장치
0세대기계적 릴레이금속 기어, 카드
1세대진공관자기드럼
2세대트랜지스터자기코어
3세대SSI, MSIRAM, ROM
4세대LSI, VLSISRAM, DRAM
5세대VLSI, ULSI, GLSI, SoCSDRAM, DRAM, flash

3세대 이후의 컴퓨터는 다수의 트랜지스터를 하나의 칩으로 집약한 집적회로(IC, Intergrated Circuit) 를 기반으로 함

5세대 컴퓨터는 자연어 처리, 지능형 컴퓨터, 전문가 시스템, 로봇, 종합 정보 통신망 등과 같은 분야에 사용됨

현대 컴퓨터 발전과 발전의 지표

폰노이만 아키텍처

폰노이만 모델은 1936년에 발표된 앨런 튜링의 유니버설 기계 모델을 구체화한 형태이다. 이전에는 고정결선식 프로그램 방식을 사용하였다.

  • 고정결선식 프로그램 모델
    • 미리 정의된 기능을 물리적 / 하드웨어적으로만 설계한 기계임
    • 처음 설계할 당시 설정한 기능 외에는 사용할 수 없음
  • 프로그램 내장식 컴퓨터
    • 폰 노이만이 제안한 컴퓨팅 모델
    • 프로그램 자체와 프로그램에서 사용하는 데이터를 동일한 형태로 메모리에 저장할 수 있는 구조
    • 프로그램만 변경하면 데이터를 다양한 방식으로 처리할 수 있는 현대 범용 컴퓨터 개념의 시초 -> 소프트웨어의 개념을 탄생시킴

무어의 법칙

무어의 법칙은 인텔의 공동 창업자 고든 무어가 경험적 관찰에 의해 예측한 것으로, 단일 마이크로칩에 포함된 트랜지스터의 수가 18개월마다 약 2배씩 증가한다는 것을 의미한다.

최근 많은 전문가들은 집적 기술이 이미 한계에 도달했기 때문에 무어의 법칙을 유지하기가 어려울 것으로 보며, 이를 무어의 벽이라고 한다.

컴퓨터의 성능

성능의 정의

컴퓨터의 성능은 사용하는 사람에 따라 응답 시간, 처리율 등을 기준으로 잡지만, 이 둘은 완전히 별개의 요소가 아니라 한 쪽이 향상되면 다른 쪽도 향상된다. 따라서 여기서는 사용자 관점의 성능인 응답 시간을 기준으로 한다.

  • 응답 시간 : 하나의 프로그램을 처리하는데 소요되는 시간
  • CPU 실행 시간 : 입출력이나 시분할 시스템 등에서 다른 프로그램의 실행 시간을 제외한 순수하게 사용된 시간

$$ 성능 = { 1 \over CPU 실행 시간 } $$ $$ M1에 대한 M2의 성능 비율 = n = { M2의 성능 \over M1의 성능 } = { M2의 실행 시간 \over M1의 실행시간 } $$

암달의 법칙

시스템의 일부분을 개선하는 경우 전체 시스템에서 얻을 수 있는 최대 성능 향상을 구할 때 사용한다. 주로 병렬화에 의한 시스템 성능 향상의 한계를 지적하는데 사용된다.

수식의 경우는 다음 링크를 참고 암달의 법칙은 어떤 시스템을 개선하여 전체 작업 중 P%의 부분에서 S배의 성능이 향상되었을 때 전체 시스템에서 최대 성능이 얼마나 향상되는지 구하는 것이다.

예를 들어, 사칙연산을 수행하는 시스템에서 덧셈 및 뺄셈의 실행 시간이 2/3를 차지하고, 덧셈 및 뺄셈을 수행하는 가감산기의 성능을 개선한다고 할 때, 암달의 법칙에 따라 가감선기의 성능을 극한까지 개선한다고 해도 기존 시스템의 성능에서 3배 이상 개선할 수 없다.

이는 병렬화 등의 방법으로 시스템 일부의 성능을 개선함으로써 최적의 성능을 얻는 것도 좋지만 성능이 개선되지 않는 부분을 최소화하는 것이 중요하다는 점을 시사한다.

CPU 성능 분석

성능에 영향을 미치는 요소

프로그램의 실행 시간은 다음과 같이 3개의 요소로 나타낼 수 있다.

$$ { CPU 실행 시간 \over 프로그램 } = { 명령어 개수 \over 프로그램 } \times { 사이클 개수 \over 명령어 } \times { 시간 \over 사이클 } $$

  1. 프로그램의 크기
    • 하나의 프로그램에 포함된 명령어 개수
    • 종류의 수가 아님
  2. CPI(Cycles per Instruction)
    • 하나의 명령어를 실행하는데 필요한 클록 사이클의 수
    • CPI는 명령어마다 다를 수 있기 때문에 여기서는 평균 CPI를 사용
  3. 사이클 시간
    • 한 클록 사이클에 소요되는 시간
    • 사이클 시간의 역수를 클록률 또는 클록 속도라고 함

CPU 실행 시간을 다시 정리하면 다음과 같다.

$$ 프로그램의 CPU 실행 시간 = 명령어 개수 \times 평균 CPI \times 사이클 시간 = { 명령어 개수 \times 평균 CPI \over 클록 속도 }$$

성능에 영향을 미치는 요소의 분석

컴퓨터 설계자는 프로그램의 크기, 평균 PCI, 프로세서 클록 사이클 이 세가지 요소를 모두 낮추려고 하지만, 서로 충돌하는 관계에 있다. 그리고 이들은 명령어 수준의 아키텍처, 컴퓨터의 구성과 관련된 컴퓨터 구현, 기술적 수준인 컴퓨터 실현에 의해 좌우된다.

아래 표는 성능에 영향을 미치는 요소 사이의 관계를 정리한 것이다.

구분명령어 개수평균CPI클록 속도
알고리즘O
아키텍처OO
컴퓨터 구현OO
컴퓨터 실현O

명령어 개수

  • 알고리즘과 아키텍처에 의해 결정
  • 개선 방법
    • 좋은 알고리즘을 사용
    • 강력하고 복잡한 명령어를 가진 아키처인 CISC(Complex Instrcution Set Computer) 구조를 사용

평균 CPI

  • 아키텍처와 컴퓨터 구현에 의해 결정
  • 개선 방법
    • 단순한 명령어로 구성된 RISC(Reduced Instrcution Set Computer) 아키텍처를 사용
    • 병령화와 파이프라이닝 같은 고급 기술 등을 사용해 연산을 병렬로 구현

클록 사이클 시간

  • 주로 컴퓨터 구현과 실현 수준에 의해 결정
  • 아키텍처도 영향을 줄 수 있음. 복잡한 명령어는 일반적으로 사이클 시간이 길어질 수 있기 때문
  • 컴퓨터 구현 수준
    • 데이터 경로가 짧으면 일반적으로 지연 시간이 짧아짐 -> 사이클 시간도 짧아짐
    • 파이프라이닝 기술 사용 -> 한 사이클 동안 수행할 작업 양 감소 -> 클록 속도 증가
  • 컴퓨터 실현 수준
    • 동일한 면적에 더 많은 트랜지스터를 집적할 수 있음 -> 클록 속도 향상
    • 따라서 반도체 제조 기술은 이 요소에 영향을 미침

따라서 시스템의 성능을 향상하기 위해 아키텍처, 컴퓨터 구현, 컴퓨터 실현 사이의 적절한 절충이 필요하다.

벤치마크와 성능 척도

벤치마크

두 시스템의 성능을 비교할 때 작업 부하로 선택된 프로그램의 집합을 벤치마크(Benchmark)라고 한다.

TPC(Transaction Processing Performance Council)

  • 시스템의 성능 평가 척도를 마련하고 각 회사의 벤치마크 값을 검증하기 위해 발족한 비영리 단체
  • 네트워크 상의 여러 이용자가 실시간으로 데이터베이스의 데이터를 갱신하거나 조회하는 등의 단위 작업을 처리하는 시스템에 대한 성능을 평가

MIPS와 MFLOPS

  • IPS(Instructions per Second)
    • 컴퓨터의 프로세서 속도를 가늠하기 위한 척도
    • 1초 동안 실행한 명령어 개수를 의미함
  • MIPS(Million Instructions per Second)
    • 1초에 수행한 명령어 개수를 100만으로 나눈 값
    • MIPS 값이 높으면 빠른 컴퓨터라고 할 수 있지만, 단순히 명령어 실행 속도를 나타내기 때문에 절대적이라고 할 수는 없음

$$ MIPS = { 명령어 개수 \over 실행시간 \times 10^6 } = { 클록 속도 \over CPI \times 10^6 } $$

  • MFLOPS(Million Floating Point Operations per Second)
    • 부동 소수점 연산의 수를 100만으로 나눈 값
    • 부동 소수점 연산은 프로그램에 종속적이며, MFLOPS 값은 정수와 부동 소수점 연산의 상대적 배합, 초월함수 등에 따라 달라질 수 있음
    • 위와 같은 이유들 때문에 성능을 비교하는데 적절하지 않은 경우가 흔하게 발생함

$$ MFLOPS = { 부동 소수점 연산 개수 \over 실행 시간 \times 10^6 } $$

의문

  • 현재 기업들은 시스템의 성능을 향상시키기 위해서 구체적으로 어떻게 요소들간 절충을 하고 있는가
  • 그렇다면 최근 벤치마크로 사용되는 기준 / 척도에는 어떤 것들이 있는가


'컴퓨터 구조' 카테고리의 다른 글

[책] Ch01. 컴퓨터 시스템의 개요  (0) 2019.02.12
블로그 이미지

NCookie

,

컴퓨터 시스템

컴퓨터 시스템의 개념적 구성

  • 하드웨어(Hardware)
    • 시스템을 구성하는 물리적 부품으로 이루어진 전자적 / 기계적 장치를 의미
  • 펌웨어(Firmware)
    • 하드웨어를 제어하는데 필수적인 프로그램
    • 고정도가 높고 기본적인 프로그램이기 때문에 일반적으로 ROM에 저장
  • 소프트웨어(Software)
    • 하드웨어에 작업을 수행할 순서와 방법을 지시하는 명령어로 구성된 프로그램
    • 프로그램 수행에 필요한 절차, 규칙, 관련 문서 등을 총칭

컴퓨터 시스템의 4대 기능

입력 / 처리 / 저장 / 출력

비트, 바이트, 워드

컴퓨터는 두 가지 상태의 신호나 기호, 즉 디지털 정보만을 이해할 수 있음. 이를 0과 1로 이루어진 2진수로 표현

  • 비트(Bit)
    • 정보를 구성하는 최소 단위
    • 0과 1의 두 가지 상태만을 나타냄
  • 바이트(Byte)
    • 정보 표현의 기본 단위
    • 연속적인 8개 비트의 조합
    • 과거에는 정보의 기본 단위로 니블(nibble)이라는 4비트 단위를 사용하기도 하였음
  • 워드(Word)
    • 중앙처리장치에서 한 번에 처리할 수 있는 비트의 집합
    • 요즘은 32비트와 64비트를 워드로 많이 사용함

컴퓨터 하드웨어

중앙처리장치(CPU, Central Processing Unit)

중앙처리장치는 컴퓨터 시스템에 부착된 모든 장치의 동작을 제어하고 명령을 실행하는 장치를 말한다.

  • CPU : 컴퓨터 시스템의 논리적 구성 요소
  • 마이크로프로세서 : CPU를 집적회로 형태로 만든 물리적 구성 요소
  • 구성요소
    • 산술논리장치(ALU, Arithmetic & Logic Unit)
    • 레지스터(Register)
    • 내부 버스
      • CPU 내부 구성 요소를 연결하는 배선의 집합
      • 데이터 신호, 주소 신호, 제어 신호 등을 전송

기억장치(Memory Device)

  • 계층적 기억장치
    • 레지스터
    • 캐시 메모리(SRAM)
    • 메인 메모리(DRAM)
    • 보조기억장치(HDD. SDD 등)

주변장치(Peripheral Device)

컴퓨터 시스템의 구성 요소 중 CPU와 메인 메모리를 제외한 나머지 구성 요소를 말함. 입출력장치라고도 함

  • 입력장치
    • 키보드, 마우스, 조이 스틱, 스캐너 등
  • 출력장치
    • 모니터, 프린터, 스피커 등

기타 하드웨어

버스

컴퓨터 시스템의 구성 요소는 이 버스를 통해 서로 각종 신호를 전달하고 교환함. 이들을 통틀어 시스템 버스라고도 함

  • 데이터버스
    • 데이터 전송
    • 배선의 수 = CPU가 한 번에 접속할 수 있는 비트 수(워드)
  • 주소버스
    • 시스템 구성 요소를 식별하기 위한 주소 정보 전송
    • 배선의 수 = CPU가 접속할 수 있는 최대 메모리의 용량
  • 제어버스
    • 시스템 구성 요소의 동작 제어하는데 사용

메인보드

  • 마더보드, 주회로기판, 시스템보드라고도 함
  • 역할
    • 컴퓨터의 실행 환경 설정
    • 설정 정보 유지
    • 안정적인 구동
    • 모든 장치간의 원활한 데이터 입출력 교환
  • 시스템 전반의 안정적인 동작 여부를 좌우함
  • 노스브릿지(MCH, Memory Controller Hub)
    • 주로 고속 장치를 구동
  • 사우스브릿지(ICH, I/O controller Hub)
    • 주로 저속 장치를 구동

컴퓨터 소프트웨어

  • 소프트웨어

    • 개념 : 명령의 집합으로 구성된 컴퓨터 프로그램 및 그와 관련된 문서를 총칭
    • 역할 : 데이터의 이동 방향과 데이터 처리의 종류를 지정함
    • 종류 : 시스템 소프트웨어, 응용 소프트웨어
  • 시스템 소프트웨어

    • 컴퓨터 하드웨어의 기능을 실행하기 위해 필수적인 작업을 하거나 응용 소프트웨어의 실행을 지원함
    • ex) 운영체제, 장치 드라이버, 번역기(컴파일러, 인터프리터 등), 링커, 로더 등
  • 응용 소프트웨어

    • 컴퓨터 시스템을 특정 분야에 사용하기 위해 제작된 소프트웨어
    • 최종 사용자가 원하는 작업을 수행하도록 해줌
    • ex) 사무, 그래픽, 멀티미디어, 게임, 통신 및 네트워크 등

운영체제와 부팅

운영체제

  • 하드웨어를 동작시키는데 가장 중요한 시스템 소프트웨어
  • 역할
    • 컴퓨터 시스템의 하드웨어 자원 관리
    • 사용자와 하드웨어 사이의 인터페이스 역할
    • 하드웨어의 고장 탐색, 오류 처리, 보안 유지
  • ex) 윈도우, 리눅스, MacOS, iOS, 안드로이드 등

부팅

  • 운영체제가 컴퓨터 하드웨어를 관리하고 응용 소프트웨어를 실행할 수 있도록 컴퓨터에 시동을 거는 것을 말함
  • 보조기억장치에 저장된 운영체제를 메인 메모리에 불러들이는 과정을 말함
  • 부트로더(Bootstrap Loader)와 비휘발성 메모리인 ROM을 이용
  • 자세한 내용은 해당 링크 참고

컴파일러와 인터프리터

컴퓨터의 분류

컴퓨터는 처리 능력, 사용 목적, 응용 분야, 사용 데이터, 아키텍처에 따라 다양하게 분류할 수 있음

  • 처리 능력에 의한 분류
    • 태블릿 컴퓨터, 개인용 컴퓨터, 워크스테이션, 미니텀프터와 메인프레임 컴퓨터
  • 사용 목적에 의한 분류
    • 전용 컴퓨터, 특수 목적 컴퓨터, 범용 컴퓨터
  • 응용 분야에 의한 분류
    • 데스크톱 컴퓨터, 서버, 임베디드 컴퓨터
  • 사용 데이터에 의한 분류
    • 디지털 컴퓨터, 아날로그 컴퓨터

컴퓨터의 구조, 구성, 실현

컴퓨터 구조

  • 하드웨어와 소프트웨어의 인터페이스에 대한 설명을 의미하는 명령어 집합 구조에 해당함
  • 프로그래머에게 보이는 시스템의 속성, 프로그램의 논리적 실행에 직접 영향을 미치는 시스템의 특성
  • ex) 명령어 집합, 데이터 표현에 사용되는 비트 수, 레지스터의 개수나 형식, 메모리 주소 지정 방식 등

컴퓨터 구성

  • 아키텍처 사양에 대한 형체를 제공하는 논리적인 골격
  • CPU와 각종 구성 요소, 관련 회로의 인터페이스에 대한 세부 사항 등 프로그래머에게 투명한 하드웨어 내역을 의미

컴퓨터 실현

  • 컴퓨터 구현의 구체적인 버전
  • 어떤 컴퓨터 부품이 사용되며 그 부품들이 어떻게 서로 연결되고 배치되는지를 결정함

컴퓨터 계열

  • 동일한 컴퓨터 구조를 사용하지만 다른 방식으로 시스템을 구현한 컴퓨터의 집합
  • 하나의 설계에 여러 개의 모델을 만들어낼 수 있음
  • 컴퓨터 계열은 소프트웨어의 호환성이라는 개념을 제공함

하드웨어와 소프트웨어의 상호 조정

  • 컴퓨터 시스템의 모든 기능은 하드웨어로도 구현할 수 있고 소프트웨어로도 구현할 수 있음
    • 하드웨어로 구현 : 고성능, 많은 비용
    • 소프트웨어로 구현 : 낮은 성능, 적은 비용

따라서 컴퓨터 구조의 특성을 결정할 때 반드시 이에 대한 상호 조정(tradeoff)가 필요함

'컴퓨터 구조' 카테고리의 다른 글

[책] Ch02. 컴퓨터의 발전과 성능  (0) 2019.02.12
블로그 이미지

NCookie

,

QT 프로젝트를 빌드하다보면 가장 많이 보게 되는 오류인데, 원인은 여러가지가 있다. 라이브러리 호출 경로가 제대로 되어있지 않았다던지, 함수 선언 부분에 문제가 있다던지.


이번 문제의 원인은 외부 라이브러리 호출 시 컴파일러와 라이브러리 간의 비트(x86, x64)가 일치하지 않았기 때문이다. 외부 라이브러리 경로를 x64로 설정해주니 빌드가 잘 된다.



이번에 qt creator를 업그레이드 하면서 어디선가 설정이 바뀌었나보다. 회사에서 굳이 개발 프로그램 업데이트를 하지 않으려는지 알 것 같다.

'QT' 카테고리의 다른 글

QTableView edit이 되지 않을 때  (3) 2018.05.23
Qt LNK 2019 에러  (1) 2018.04.30
Class hierarchy와 Object hierarchy  (0) 2018.04.04
Q_OBJECT 란  (1) 2018.02.28
블로그 이미지

NCookie

,

회사에서 개발하고 있는 어플리케이션에 mvvm 아키텍처를 적용하면서 여러 시행착오를 겪고있는데, 이번에 해결한 문제가 가장 어이없고 짜증났던 것 같다.


기존의 백그라운드 서비스와 액티비티 간의 통신 방식을 브로드캐스트에서 event bus로 바꾸기 위해 코드를 수정하였다. 필요없는 코드들을 다 지우고 빌드를 해봤더니 error: cannot find symbol method setModel(BleServiceViewModel) 이 에러가 발생하는거다... 그래서 다른 부분에 문제가 있겠거니 해서 다른거 하고 다시 빌드했더니 같은 오류... 


(에러가 발생하는 코드)

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mFeatureFragBinding = FeatureFragBinding.inflate(inflater, container, false);

mBleServiceViewModel = FeatureActivity.obtainBleServiceViewModel(getActivity());
mFeatureFragBinding.setViewModel(mBleServiceViewModel);

return mFeatureFragBinding.getRoot();
}


도저히 뭐가 문제인지 몰라 구글링도 해보고 같은 프로그램의 정상 작동하는 다른 view-viewmodel 코드와 비교해도 오류가 발생할 껀덕지를 못 찾겠더라... 그렇게 몇 일을 날리다가 xml에서 class 이름을 커스터마이징했더니 깔끔하게 동작한다. 에러에 대한 힌트도 없고, 자료도 없고, 심지어 내가 뭘 잘못한 것도 아니라 해결을 하고도 굉장히 허무한 것 같다.


(해결)

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:bind="http://schemas.android.com/apk/res-auto">

<data class="FeaturesFragBinding">
<variable
name="viewmodel"
type="com.example.viewmodel.BleServiceViewModel" />
</data>
...
</layout>


정리

1. 코드를 수정하다보니 어느 순간 error: cannot find symbol method setModel(BleServiceViewModel)라는 오류 발생

2. Clean Project, Invalidate Caches & Restart, 프로그램 재시작 등을 해도 에러 발생

3. 코드에는 문제가 없음

4. generated databinding 클래스 이름 커스터마이징해주니 해결


가장 찝찝한건 원인을 알 수 없다는거다... 아마 라이브러리 자체의 문제 같은데

블로그 이미지

NCookie

,