편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌 1 - 2 파이프 라인과 스캐일러스 파 이프 라인(pipe line)에 대해서 설명하기 전에 잠깐 인텔 80×86의 클럭 속도에 대해 이야기하겠다. 을 참고해 살펴보자. 인텔 80×86 계열의 CPU는 1978년 8086 발표 당시 8MHz의 클럭 속도로 시작한다. 15년이 지난 후 펜티엄이 발표되는 1993년, 클럭은 8086 시절보다 50MHz 정도의 증가를 보인다. 그럼 펜티엄이 발표된 지 어느덧 10년이 지난 현재 CPU의 클럭 속도는 어떠한가? 인텔 80×86의 발전 속도를 참고했을 때 현재의 펜티엄의 속도는 100MHz 정도를 겨우 넘기고 있을 것이라고 예상된다. 하지만 현재 펜티엄의 클럭은 GHz 대역을 넘은 지 오래 전이다. 언제부터 갑자기..
편견이 깨지는 어셈블리 프로그래밍 : 최적화 강좌 3 - 3 VC++의 최적화 VC ++나 델파이와 같은 고급 언어들의 컴파일 옵션에 보면 거의 포함되어 있는 메뉴가 최적화 메뉴다. 한때에는 고급 언어들의 성능 및 코드 생성 효율이 당시 하드웨어의 성능을 원활하게 끌어내기에는 부족했기 때문에 어셈블리어로 프로그램을 제작하기도 했었다. 하지만 현재는 높아진 하드웨어 성능과 많아진 메모리와 더불어 눈부시게 발전한 고급 컴파일러의 최적화 알고리즘에 의해 어셈블리어로 손수 최적화 코딩을 할 필요는 거의 없어졌다. 여기서는 지면관계상 고급 언어들을 다 다룰 수는 없고 이들 중 VC++를 선택해 최적화 기능의 예를 보여주려 한다. 간단한 테스트 예제 int TestOpt( int A_Test ) { int Tv_T..
편견이 깨지는 어셈블리 프로그래밍 : 최적화 강좌 3 - 2 배열대신 포인터를! 반복분기 작업이 필요하도록 만드는 것 중 하나가 배열일 것이다. 배열로 인해 고급 언어들은 프로그래머가 여러 개의 데이터를 처리하기 편하도록 만들고 있다. 하지만 조금이라도 속도를 늘리기를 원한다면 우리는 코드를 작성하는 손을 조금 더 번거롭게 해야 할 필요가 있다. 와 는 정수 3개의 요소가 들은 12바이트 크기의 구조체의 배열을 제어하는 예이다. 는 에서 구조체를 포인터를 이용해 제어하도록 변경한 것이다. 이 둘의 성능을 테스트했다(). ?? 와 의 실행 예?? * 단위: 클럭 ?? 배열 제어 성능 측정 일반적인 배열 작업 void TestDimPtr( ) { //local --------------------- int ..
편견이 깨지는 어셈블리 프로그래밍 : 최적화 강좌 3 - 1 지금까지 2회에 걸쳐 최적화에 대한 이론과 함께 몇 가지 예를 들어 보았다. 코드를 제작하는 방법에도 여러 가지가 있듯이 최적화 방식에도 여러 가지가 있다. 다양한 코드에 알맞은 최적화 방식을 찾는다는 것은 많은 경험과 실험이 필요하다. 시작이 반이라고 했다. 이번 연재를 계기로 최적화의 시작에 한보를 더하자. 지 난 연재에서 CPU 내부와 버스와 메모리의 동작, 그리고 그에 따른 최적화의 예를 간단히 보았다. 왜 최적화가 필요한지에 대해서도 이야기했다. 이번 호에서는 자신이 직접 만든 루틴의 속도를 간단하게 측정하는 방법과 일반적인 사칙연산, GUI의 관리 배열과 클래스의 최적화, 그리고 마지막으로 VC++가 최적화하는 방식을 알아보는 것으로..
- Total
- Today
- Yesterday
- diary
- 3D Engine
- Web Programming
- console
- 짤방 및 아이콘
- 프리랜서로 살아남는 법
- Military
- Information Processor
- wallpaper
- Battle
- Tech News
- USB Lecture
- C#
- WDB
- Mabinogi
- 막장로그
- cartoon
- win32
- BadCode
- medical
- 나비효과
- network
- Embedded System
- Assembly
- Network Inspector
- 야마꼬툰
- Reverse Engineering
- Linux
- Life News
- humor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |