我們正在創造一個Android應用程序來比較ART和本地代碼之間的執行時間。我們正在使用Android Studio和CMake編譯C/C++。CMAKE_BUILD_TYPE發佈:奇怪的結果
當CMakeList.txt我們設置標誌
set(CMAKE_BUILD_TYPE Release)
在一些算法(素性測試和斐波那契)的執行時間急劇下降爲0ms所有不同的輸入。
這裏的本地庫
bool flag = false;
extern "C" JNIEXPORT void JNICALL Java_javacpp_cmr_com_sdkvsndk_MainActivity_cancel(JNIEnv *env, jobject obj) {
flag = true;
}
extern "C" JNIEXPORT jlong JNICALL Java_javacpp_cmr_com_sdkvsndk_MainActivity_primalityTest(JNIEnv *env, jobject obj, jlong r) {
if(r < 0) return -1L;
timeval start, stop;
long long t;
gettimeofday(&start, NULL);
bool prime = true;
unsigned long long sr = (unsigned long long) sqrt(r);
for (unsigned long long i = 2; (i < sr) && prime; i++) {
if (flag) return -1;
if (r % i == 0) prime = false;
}
gettimeofday(&stop, NULL);
t = (stop.tv_sec - start.tv_sec) * 1000;
t += (long long) ((stop.tv_usec - start.tv_usec)/1000)
return (jlong) t;
}
標誌是,當我們終止執行該算法的AsyncTask被設置爲true的標誌。
我不知道這是如何可能的。任何建議?謝謝。
因爲優化的?查看生成的(彙編)代碼以查看它的功能。 –
優化...你沒有使用循環的計算結果,所以編譯器擺脫它 – Selvin
這是有道理的,謝謝。有一種方法可以告訴編譯器該標誌可以在外部修改嗎?所以它必須進入循環,因爲它可以返回-1 –