diff --git a/amexec/build.sh b/amexec/build.sh index d6052fd..3399fa8 100755 --- a/amexec/build.sh +++ b/amexec/build.sh @@ -1,7 +1,7 @@ rm -rf build mkdir -p build/intermediates/host cd build/intermediates/host -cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE +cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE make cd ../../../out mv main amexec diff --git a/amexec/inc/utils.h b/amexec/inc/utils.h index f5d8d2c..6fc942c 100755 --- a/amexec/inc/utils.h +++ b/amexec/inc/utils.h @@ -70,6 +70,8 @@ public: static double printDiffTime(time_t begin, time_t end); static double InferenceTimeAverage(double *x, int len); + + static double InferenceTimeAverageWithoutFirst(double *x, int len); }; #pragma once diff --git a/amexec/out/amexec b/amexec/out/amexec index 2f4ccb0..6673ffb 100755 Binary files a/amexec/out/amexec and b/amexec/out/amexec differ diff --git a/amexec/src/model_process.cpp b/amexec/src/model_process.cpp index 4f01763..8711298 100755 --- a/amexec/src/model_process.cpp +++ b/amexec/src/model_process.cpp @@ -260,11 +260,21 @@ void ModelProcess::OutputModelResult(std::string& s,std::string& modelName,size_ aclDataType datatype = aclmdlGetOutputDataType(modelDesc_, i); void *dims = nullptr; aclmdlIODims *dim = nullptr; - aclError ret = aclrtMallocHost(&dims, sizeof(aclmdlIODims)); - if (ret != ACL_ERROR_NONE) { - ERROR_LOG("aclrtMallocHost failed, ret[%d]", ret); - return; - } + aclError ret = ACL_ERROR_NONE; + if (!g_isDevice) { + ret = aclrtMallocHost(&dims, sizeof(aclmdlIODims)); + if (ret != ACL_ERROR_NONE) { + ERROR_LOG("aclrtMallocHost failed, ret[%d]", ret); + return; + } + } + else { + ret = aclrtMalloc(&dims, sizeof(aclmdlIODims), ACL_MEM_MALLOC_NORMAL_ONLY); + if (ret != ACL_ERROR_NONE) { + ERROR_LOG("malloc device buffer failed, ret[%d]", ret); + return; + } + } dim = reinterpret_cast(dims); ret = aclmdlGetOutputDims(modelDesc_, i, dim); if (ret != ACL_ERROR_NONE) { diff --git a/amexec/src/sample_process.cpp b/amexec/src/sample_process.cpp index cbdc214..4186c29 100755 --- a/amexec/src/sample_process.cpp +++ b/amexec/src/sample_process.cpp @@ -64,7 +64,7 @@ Result SampleProcess::InitResource() // get run mode aclrtRunMode runMode; - ret = aclrtGetRunMode(&runMode); + ret = aclrtGetRunMode(&runMode); if (ret != ACL_ERROR_NONE) { ERROR_LOG("acl get run mode failed"); return FAILED; @@ -151,7 +151,10 @@ Result SampleProcess::Process(vector& params, vector& input_file } double infer_time_ave = Utils::InferenceTimeAverage(inference_time, loop); printf("Inference average time: %f ms\n", infer_time_ave); - + if (loop > 1){ + double infer_time_ave_without_first = Utils::InferenceTimeAverageWithoutFirst(inference_time, loop); + printf("Inference average time without first time: %f ms\n", infer_time_ave_without_first); + } processModel.DestroyInput(); // release model input buffer diff --git a/amexec/src/utils.cpp b/amexec/src/utils.cpp index 2941a9c..528c64d 100755 --- a/amexec/src/utils.cpp +++ b/amexec/src/utils.cpp @@ -51,6 +51,7 @@ void* Utils::ReadBinFile(std::string fileName, uint32_t &fileSize) return nullptr; } } + binFile.read(static_cast(binFileBufferData), binFileBufferLen); binFile.close(); fileSize = binFileBufferLen; @@ -180,7 +181,7 @@ double Utils::printDiffTime(time_t begin, time_t end) { double diffT = difftime(begin, end); printf("The inference time is: %f millisecond\n", 1000*diffT); - return diffT*1000; + return diffT * 1000; } double Utils::InferenceTimeAverage(double *x, int len) @@ -188,5 +189,16 @@ double Utils::InferenceTimeAverage(double *x, int len) double sum = 0; for (int i = 0; i < len; i++) sum += x[i]; - return sum/len; + return sum / len; +} + +double Utils::InferenceTimeAverageWithoutFirst(double *x, int len) +{ + double sum = 0; + for (int i = 0; i < len; i++) + if (i !=0){ + sum += x[i]; + } + + return sum / (len - 1); }