문제

최근에 개발 한 알고리즘을 위해 MIPS (초당 백만 명당 지침)를 제작하라는 요청을 받았습니다. 알고리즘은 일련의 C 스타일 함수로 노출됩니다. 우리는 다른 입력 하에서 성능을 벤치마킹하기 위해 Dell Axim의 코드를 연습했습니다.

이 질문은 하드웨어 공급 업체에서 나왔지만 대부분 HL 소프트웨어 개발자이므로 요청에 어떻게 응답 해야하는지 잘 모르겠습니다. 어쩌면 HW/SW 배경이 비슷한 사람이 도움이 될 수 있습니다 ...

  1. 우리의 알고리즘은 실시간이 아니기 때문에 MIP로 정량화 할 필요는 없다고 생각합니다. 총 어셈블리 지침 수를 간단히 인용 할 수 있습니까?

  2. 1이 사실이라면 일반적으로 또는 특히 ARM/XScale에 대해 어떻게이 작업을 수행합니까 (즉, 어셈블리 지침 수를 측정하는 방법)?

  3. WM 장치 또는 vs2005에 제공된 장치 에뮬레이터를 통해 2를 수행 할 수 있습니까?

  4. 3을 자동화 할 수 있습니까?

도와 주셔서 정말로 고맙습니다. 찰스


모든 도움에 감사드립니다. S.Lott가 못을 박았다고 생각합니다. 그리고 후속 조치로서, 나는 이제 더 많은 질문이 있습니다.

5 MIP를 측정하는 방법에 대한 제안이 있습니까? 나는 우리의 알고리즘을 실행하고 dhrystone/whetstone 벤치 마크와 비교하여 MIS를 계산하는 것을 제안한 것을 들었습니다.

6 알고리즘을 실시간으로 실행할 필요가 없으므로 MIP가 실제로 유용한 측정입니까? (예 : Factorial (N)) 처리 요구 사항을 수량에 맞출 수있는 다른 방법은 무엇입니까? (나는 이미 런타임 성능을 측정했지만 만족스러운 대답은 아니었다.)

7 마지막으로, 나는 MIP가 원유 추정치이며 Dep 일 것이라고 생각합니다. 컴파일러, 최적화 설정 등으로?

도움이 되었습니까?

해결책

하드웨어 공급 업체가 얼마나 많은 MIP가 필요한지 묻습니다.

"1,000 MIPS 프로세서 또는 2,000 MIPS 프로세서가 필요합니까?"

경영진이 "얼마나 많은 MIPS"로 번역하는 것은 어느 것입니다.

하드웨어는 MIP를 제공합니다. 소프트웨어는 MIP를 소비합니다.

당신은 2 도의 자유가 있습니다.

  • 프로세서의 고유 한 MIPS 오퍼링.

  • 많은 MIP를 소비하는 초 수.

프로세서에 MIP가 충분하지 않으면 알고리즘이 "느리게"됩니다.

프로세서에 충분한 MIP가 있으면 알고리즘이 "빠른"것입니다.

"성능 요구 사항을 충족하기에 충분히 빠른"또는 "성능 요구 사항을 충족하기에는 너무 느리게"를 결정하기 위해 성능 요구 사항이 필요하기 때문에 "빠른"및 "느린"을 따옴표에 넣습니다.

2,000 MIPS 프로세서에서는 2 초가 걸릴 수 있습니다. 그러나 1,000 개의 MIPS 프로세서에서는 용납 할 수없는 4 초로 폭발합니다.


얼마나 많은 MIP가 필요합니까?

  1. 프로세서의 공식 MIP를 얻으십시오. 보다 http://en.wikipedia.org/wiki/instructions_per_second

  2. 일부 데이터에서 알고리즘을 실행하십시오.

  3. 정확한 실행 시간을 측정하십시오. 불확실성을 줄이기 위해 많은 샘플을 평균화하십시오.

  4. 보고서. 750 MIPS 프로세서의 3 초는 750mips에서 3 초입니다. MIPS는 속도입니다. 시간은 시간입니다. 거리는 속도 * 시간의 산물입니다. 750 마일에서 3 초는 750*3 백만 지침입니다.

비율을 기억하십시오 (초당 지침) * 시간 (초)은 지시 사항을 제공합니다.

3*750 마일이라고 말하지 마십시오. 그렇지 않습니다. 2 억 2 천만 건의 지침입니다.

다른 팁

몇 가지 메모 :

  1. MIPS는 종종 프로세서의 일반적인 "용량"측정 값, 특히 작업으로 프로세서에 과부하하지 않도록하는 소프트 실시간/임베디드 필드에서 사용됩니다. 시간이 매우 중요하기 때문에 이것은 초당 지침입니다!

  2. 이러한 방식으로 사용되는 MIP는 비과학적입니다.

  3. 이러한 방식으로 사용되는 MIP는 여전히 시스템을 크기를 조정하고 프로세서의 속도를 결정하는 데 가장 적합한 근사치입니다. 25%씩 떨어질 수도 있지만 신경 쓰지 마세요 ...

  4. MIPS 계산에는 사용중인 제품에 가까운 프로세서가 필요합니다. 올바른 명령 세트는 사용중인 실제 컴파일러에서 실제 명령 스트림을 캡처하는 데 중요합니다.

PC에서 어떤 식 으로든이를 근사 할 수는 없습니다. 이 작업을 수행하기 위해 몇 가지 도구 중 하나를 가져와야합니다.

  1. QEMU, ARM의 자체 도구, 시놉시스, Coware, Virtutech 또는 Vast와 같은 대상 아치에 대한 명령 설정 시뮬레이터를 사용하십시오. 이것들은 빠르지 만 지침을 꽤 잘 계산할 수 있으며 올바른 명령 세트를 지원합니다. 정수 분할과 같은 고가의 지침을 막습니다 (그리고 부동 소수점이 없음).이 숫자는 유용하게 가깝습니다.

  2. 대상 프로세서 (또는 가까운)에 대한 클럭 사이클 정확한 시뮬레이터를 찾으십시오. 이는 파이프 라인 효과 등을 상당히 잘 추정 할 수 있습니다.

  3. 타겟팅하는 프로세서 패밀리 또는 IT 디자인에 가까운 ARM을위한 개발 보드를 받고 응용 프로그램을 프로파일 링하십시오. ARM9를 사용하여 ARM11에 대한 프로파일을 사용하지 않지만 ARM11은 예를 들어 ARM Cortex-A8/A9에 대한 근사치 일 수 있습니다.

MIPS 일반적으로 프로세서의 기능을 측정하는 데 사용됩니다.

알고리즘은 일반적으로 다음 중 하나를 취합니다.

  1. 일정 시간 (특정 프로세서에서 실행할 때)
  2. 특정 수의 지침 (아키텍처에 따라 다름)

초당 지침 측면에서 알고리즘을 설명하는 것은 이상한 척도처럼 보이지만 물론 알고리즘이 무엇을하는지 모르겠습니다.

의미있는 측정 값을 내놓으려면 알고리즘을 완료하는 데 걸리는 평균 시간을 측정 할 수있는 테스트를 설정하는 것이 좋습니다. 어셈블리 지침의 수는 합리적인 조치이지만 계산하기가 어려울 수 있습니다! 가장 좋은 방법은 다음과 같은 것입니다 (의사 코드) :

const num_trials = 1000000
start_time = timer()
for (i = 1 to num_trials)
{
    runAlgorithm(randomData)
}
time_taken = timer() - start_time
average_time = time_taken / num_trials

MIP는 알고리즘 성능이 아닌 CPU 속도의 척도입니다. 나는 줄을 따라 어딘가에 있다고 가정 할 수 있습니다. 누군가는 약간 혼란스러워합니다. 그들은 무엇을 알아 내려고합니까? 내가 생각할 수있는 유일한 시나리오는 프로그램을 만족스럽게 운영하기 위해 제공하는 프로세서가 얼마나 빨리 필요한지 결정하는 데 도움이되는 것입니다.

지침 수의 알고리즘을 측정 할 수 있으므로 (입력 데이터에 의존하지 않으므로, 이것은 사소한 일이 아닙니다) MIP를 얻으려면 시간이 필요합니다 (예 : 말, 말). " 초당 1000 번 호출해야합니다. " 알고리즘이 해당 특정 사례에 대해 1000 개의 지침 인 경우 다음과 같이 끝납니다.

1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.

나는 여전히 그것이 일을 시도하는 정말 이상한 방법이라고 생각하기 때문에 설명을 요청하고 싶을 수도 있습니다. 귀하의 구체적인 질문에 관해서는,이를 Visual Studio에 더 친숙한 사람에게 맡길 것입니다.

또한 다양한 컴파일러와 컴파일러 옵션이 큰 차이를 만듭니다. 동일한 소스 코드는 여러 속도로 실행될 수 있습니다. 따라서 2MIPS 프로세서를 구입하는 대신 1/2MIPS 프로세서를 사용하고 컴파일러 옵션을 사용할 수 있습니다. 또는 더 나은 컴파일러에 돈을 쓰고 저렴한 프로세서를 사용하십시오.

벤치마킹은 기껏해야 결함이 있습니다. 취미로서 나는 동일한 하드웨어에 대해 다양한 공급 업체의 다양한 컴파일러에서 동일한 dhrystone (및 whetstone) 코드를 컴파일하는 데 사용했으며 숫자는 모든 곳에서 몇 배에 달했습니다. 동일한 소스 코드 동일한 프로세서 인 Dhrystone은 기준선으로 유용하지 않은 것을 의미하지 않았습니다. 벤치마킹에서 중요한 것은 알고리즘이 얼마나 빨리 실행되는지, 필요한 것보다 빠르거나 빠른 것이 더 좋았습니다. 결승선에 얼마나 가까운 지에 따라 많은 슬로프를 허용합니다. 초기에는 프로젝트가 끝날 때까지 필요한 것보다 적어도 약간 빠를 수 있도록 필요한 것보다 5 또는 10 또는 100 배 더 빨리 달리기를 원할 것입니다.

S. Lott가 말하는 것에 동의합니다. 이것은 모든 영업 및 마케팅 및 관리 대화입니다. 경영진이 암석과 어려운 곳 사이에 놓은 사람이기 때문에 당신이해야 할 일은 다채로운 파이 차트와 그래프를 기반으로하고 싶은 가장 빠른 프로세서와 최고의 도구를 구입하는 것입니다. 정당화로 얇은 공기에서 생성하십시오. 도로 끝 근처에서 성능을 충족시키지 못하면 StackoverFlow로 돌아갈 수 있지만 동시에 관리는 거의 모든 가격 또는 스왑 프로세서에서 다른 툴체인을 구입하고 보드를 응답해야합니다. 그때까지 당신은 당신이 목표에 얼마나 가까운 지 알아야합니다. 1.0이 필요하며 우리가 구입 한 것보다 두 배 빠른 프로세서를 구매하면 1.25입니다.

이런 종류의 물건을 자동화 할 수 있는지 또는 시뮬레이션 할 수 있는지 여부는 도구에 따라 다릅니다. 때로는 예, 때로는 아니요. 나는 당신이 말하는 도구에 익숙하지 않으므로 직접 말할 수 없습니다.

이 응답은 질문에 직접 답변하기위한 것이 아니라이 질문이 왜 요청되는지에 대한 추가 맥락을 제공합니다.

알고리즘의 MIP는 필요한 시간 내에 이벤트에 응답 해야하는 알고리즘과 관련이 있습니다.

예를 들어, 풍속을 감지하도록 설계된 컨트롤러를 고려하고 풍속이 시간당 25 마일 이상 건너면 1 초 이내에 액추에이터를 움직입니다. 풍속을 임계 값과 계산하고 비교하는 데 1000 개의 지침이 필요하다고 가정 해 봅시다. 이 알고리즘에 대한 MIPS 요구 사항은 초당 1 킬로의 지침 (KIPS)입니다. 컨트롤러가 1 MIPS 프로세서를 기반으로하는 경우 컨트롤러에 다른 기능을 추가 할 주스가 더 많다고 편안하게 말할 수 있습니다.

컨트롤러에 어떤 다른 기능을 추가 할 수 있습니까? 이는 추가 할 함수/알고리즘의 MIP에 따라 다릅니다. 1 초 이내에 100,000 개의 지침을 수행 해야하는 또 다른 기능이있는 경우 (예 : 100 KIP), 우리는 여전히이 새로운 기능을 수용 할 수 있으며 다른 기능을 추가 할 공간이 여전히 있습니다.

첫 번째 추정의 경우 PC의 벤치 마크가 유용 할 수 있습니다.

그러나 특정 장치 및 시계 주파수를 최대한 활용하기 전에 ARM 대상 아키텍처에 대한 개발자 보드 (또는 일부 PDA?)를 가져 와서 벤치마킹해야합니다.

오늘날의 기계 (캐싱, 파이프 라인, 다른 명령 세트 등)의 속도에 영향을 미치는 많은 요소가 있으므로 PC의 벤치 마크가 팔에서 벗어날 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top