Android 애플리케이션의 전체 기계 명령어 수를 찾고 싶습니다. Android SDK의 Debug.InstructionCount 클래스를 살펴 보았지만 Dalvik VM 명령어 (실제로 프로세서에서 실행되는 머신 레벨 명령어가 아닌)의 정보를 제공한다고 생각합니다. 고정 된 주파수를 사용하여 특정 프로세서에서 Android 애플리케이션을 실행하는 데 필요한 시간을 예상하려면이 정보가 필요합니다. 다른 유형의 명령어가 계산주기를 정확하게 예측할 수 없기 때문에 변수주기를 사용한다는 사실을 알고 있지만 여전히 실험을하고 싶습니다. 감사합니다.프로그램의 총수 지침을 찾는 방법은 무엇입니까?
답변
내 솔루션에는 명령어 세트 시뮬레이터 작성, 앱 실행 및 지침 계산이 포함됩니다. 이미 오픈 소스 avr 시뮬레이터가 있습니다.
이 작업을 수행하려면 지시 흐름을 따라야합니다. 따라서 실제로 시뮬레이션을하면 자동으로 코드가 실제로 반복문을 통과하는 횟수가 자동으로 해결됩니다. 디스어셈블러 (시뮬레이터의 절반)이며 기본적으로 실행 순서에 따라 코드 흐름을 따르지만 (실제로는 전체 디스어셈블러 또는 시뮬레이터보다 훨씬 간단합니다), 다른 경로를 찾고 개수를 계산할 때 모든 가능한 코드 경로와 루프를 처리해야합니다 다른 길. 최소한의 작업으로 최단 경로를 찾아 내고 코드가 결코 그보다 빠를 수 없다는 것을 알 수 있습니다.
예, 시뮬레이션은 실제 하드웨어 지연과 관련된 루프를 통해 실제 횟수를 처리해야합니다. –
+1 시도 중입니다. * Avr * 또는 * ARM *? :). 불행히도 시뮬레이터의 명령어 카운트는 데이터에 따라 다를 수 있습니다. 이것은 Java/Davlik에서 특히 중요합니다. 일부 지침은 다른 것보다 훨씬 비싸기 때문입니다. 또한 하나의 명령어가 다음 명령어의 실행 속도에 영향을 줄 수 있습니다. [Objdump and ARM cycles] (http://stackoverflow.com/questions/14942436/post-process-objdump-disassemble-with-arm-cycle- 카운트), 당신은 반대편을했다. 한계를 아는 것은 항상 도움이됩니다. –
LOL, 나는 안드로이드를 읽고 Arduino를 생각했지만, 실행중인 명령의 수 (실행 순서를 의미)가 얼마나 많은지 알고 싶다면 실행 순서대로 계산해야합니다. arm, avr, mips, java 바이트 코드, llvm 비트 코드, pascal pcode 등을 카운트하려면 동일한 프로세스가 필요합니다. –
왜 특정 장치에서이 장치를 실행하지 마십시오. 그러면 다른 장치를 사용할 수있는 시간을 예측할 수 있습니까? – auselen