컴퓨터 구조 - 5

컴퓨터 구조 5강

KOCW 컴퓨터구조 2020-2학기 최규상 교수님 강의를 듣고 정리한 글이다.


Array vs Pointer


ca5_1

사진 출처 : 영상참고 

위 그림을 보면 pointer가 array보다 for문에서 더욱 효율적인 것을 볼 수 있다. pointer의 loop문을 보면 array의 loop문보다 2개의 명령어가 적게 쓰이는 것을 볼 수 있기 때문이다.


최신 compiler들은 우리가 array로 코드를 작성해도 pointer를 쓰는 것 만큼의 효과를 보게 해준다. 따라서 성능의 차이가 거의 없다는 것. 그래서 본 강의에서는 array를 C코드에서 사용하길 권장한다. → 성능은 비슷해졌는데 코드를 알아보기 쉽고, 버그가 잘 안나기 때문이다.


ARM & MIPS Similarities

ca5_2

사진 출처 : 영상참고

MIPS와 많은 부분이 유사하다. 따라서 MIPS의 특성이 대부분 ARM에도 적용된다.


Compare and Branch in ARM

Arithmetic/logical 의 결과를 condition code에서 사용이 가능하다는게(Conditional Execution) ARM의 가장 큰 특징 중 하나이다.

ARM은 각 명령어들이 conditional하게 쓰일 수 있다. 명령어의 최상위 4bit가 conditional value이다. → branch를 사용 안하고 branch의 효과를 줄 수 있다.


ca5_3

 사진 출처 

아까 말했던 것처럼 ARM은 MIPS에 비해서 register개수가 적고, register의 bit수가 더 적기 때문에 남는 공간을 conditional value로 줬다.


Fallacies

Powerful Instruction == Higher Performance??

과연 강력한 명령어(복잡) 하나가 무조건 더 높은 성능을 낼 수 있을까? Powerful Instruction는 여러개의 명령어를 안써도 되기 때문에 명령어 수를 줄일 수 있다는 장점이 있다. 그러나 복잡해진다는 단점이 있다. 그리고 복잡한 명령어는 구현이 어렵다. 구현이 어렵다는 뜻은 gate의 수가 증가한다는 것이고, gate의 수가 증가한다는 뜻은 clock cycle이 느려진다는 것이다.

결국 복잡한 logic을 구현하기 위해 clock이 느려지고 모든 명령어들이 그 느린 clock에 맞춰서 동작하게 된다.

따라서 compiler가 복잡한 1개의 명령어를 쓰느 것 보단, 간단한 여러개의 명령어를 쓰는 것이 더 효율적일 수 있다.