#title 최적화의 우선순위 [[TableOfContents]] 문서 작성중.. ==== 개요 ==== 작업이 여러 개가 있다고 가정하자. MS-SQL Server의 경우는 전체 비용이 얼마인지 대충 계산을 할 수가 있다. 예를 들어 다음과 같이 쿼리를 실행했을 때에 SQL Server의 실행계획을 볼 수 있다. {{{ select * from sys.sysobjects }}} attachment:plan01.jpg 그러므로 전체 SQL과 SP엗 대한 '하위 트리 비용'을 수집하고, 실행(또는 호출) 횟수를 수집하면 어플리케이션의 비용을 산출 할 수 있다. 그리고 각각의 SP와 SQL에 대해서 code line수 등으로 복잡성을 산출하여 수정 비용을 계산합니다. 그래서 아래의 법칙을 적용하여 계산을 때립니다. 맞나? 아.. 씨발.. 존나 어렵네.. 더 정리 필요하다.. ==== 암달의 법칙(Amdahl's law) ==== 암달의 법칙이란, 병렬처리 프로그램에서 차례로 수행되어야 하는 비교적 적은 수의 명령문들이, 프로세서의 수를 추가하더라도 그 프로그램의 실행을 더 빠르게 할 수 없도록 속도향상을 제한하는 요소를 갖고 있다는 것이다. 암달의 법칙에 따르면, 어떤 시스템을 개선하여 P 만큼의 부분에서 S 만큼의 성능 향상이 있을 때 전체 시스템에서 최대 성능 향상은 다음과 같다. SpeedUp = 1 / ((1-P) + (P/S)) 예를 들어서 어떤 작업의 40%에 해당하는 부분의 속도를 2배로 늘릴 수 있다면, P는 0.4이고 S는 2이고 최대 성능 향상은 1.25(=1/((1-0.4)+(0.4/2)))가 된다. 개선 후 실행시간은 (개선에 의해 영향을 받는 실행 시간 / (100 + 영향을 받지 않는 실행 시간))으로 개산된다. ([http://ko.wikipedia.org/wiki/%EC%95%94%EB%8B%AC%EC%9D%98_%EB%B2%95%EC%B9%99 위키백과사전]) 쉽계 풀어보면.. * 전체 시스템의 task1, task2로 구성되어 있다. (task1, task2는 소프트웨어) * task1은 시스템 전체 처리비용 중 70%의 차지. * task2는 시스템 전체 처리비용 중 30%의 차지. * 가정 * task1을 2배 향상시키는데 10의 비용이 든다. * task2을 2배 향상시키는데 5의 비용이 든다. * 10의 비용을 들였을 때에 어떤 task를 향상시키는 것이 최적인가? * task1 = 1.53 = 1/((1-0.7)+(0.7/2)) * task2 = 1.29 = 1/((1-0.3)+(0.3/4)) -- 5의 비용으로 2배이므로 10의 비용은 4배 * 결론: task1 ==== 병렬처리 ==== 2개의 코어를 가진 CPU를 장착한 머신의 경우, 병렬 연산 효율 법칙에 따라 2개의 프로세서로 작업을 하는 경우 이론적으로 1.3배 정도의 향상이 있게 된다. T,,p,, = (%S + (1-%S) / N) * T,,s,, SpeedUp = T,,s,,/T,,p,, * T,,p,,: 병렬 프로세스 수행시간 * T,,s,,: 직렬 프로세스 수행시간 * %S: 직렬 프로세스 수행시간/전체 프로세스 수행시간 * 100 * N: 프로세스 개수 좀 어렵다. 어쨌든 처음에 소개했던 SpeedUp = 1 / ((1-P) + (P/S)) 공식에 대입하면 P=0.5, S=2가 된다. 즉, CPU가 2개라면 하는 일은 1/2로 줄어들었고, 처리시간이 1/2로 되었다는 소리는 CPU가 1개였을 때보다 2배의 처리량을 갖는다는 것이다. 그러므로 1.33 = 1 / ((1-0.5) + (0.5/2)) 이 된다. 이것은 작업을 CPU 2개를 모두 이용하여 각각의 CPU가 50%씩 처리된다는 가정하에서 계산된 것이다. 만약 CPU 2개를 달아도 전체의 20%만 병렬화 된다면 1.11(1 / ((1-0.2) + (0.2/2)))배 밖에 성능은 향상되지 않는다. ==== 코드 병렬화 ==== SpeedUp = 1/(P/N + S) * P=전체 코드의 병렬화 비율 * N = process의 수 * S = serial fraction ==== 참고자료 ==== * [http://www.ddj.com/architect/205900309 Break Amdahl's Law!] * [http://en.wikipedia.org/wiki/Gustafson%27s_Law 병렬처리의 또 다른 법칙 Gustafson's law] * [http://kr.sun.com/developers/tech_docs/wireless_web06/wireless03.html] * [http://devnote.net/wiki/index.php/%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%8B%9C%EB%8C%80#.EC.95.94.EB.8B.AC.EC.9D.98_.EB.B2.95.EC.B9.99 멀티프로세서 프로그래밍 시대의 개막]