提交 0e5f81a0 编写于 作者: B Bin Li

- return SetThreadAffinity result instead of abort

- change android demo min sdk to 19
- fix android demo cp error on MacOS
上级 07a33cd5
......@@ -253,9 +253,12 @@ int Main(int argc, char **argv) {
mace::DeviceType device_type = ParseDeviceType(FLAGS_device);
// config runtime
mace::SetOpenMPThreadPolicy(
MaceStatus ret = mace::SetOpenMPThreadPolicy(
FLAGS_omp_num_threads,
static_cast<CPUAffinityPolicy >(FLAGS_cpu_affinity_policy));
if (ret != MACE_SUCCESS) {
LOG(WARNING) << "Set openmp or cpu affinity failed.";
}
#ifdef MACE_ENABLE_OPENCL
if (device_type == DeviceType::GPU) {
mace::SetGPUHints(
......
......@@ -77,14 +77,19 @@ int GetCPUMaxFreq(int cpu_id) {
return freq;
}
void SetThreadAffinity(cpu_set_t mask) {
MaceStatus SetThreadAffinity(cpu_set_t mask) {
#if defined(__ANDROID__)
pid_t pid = gettid();
#else
pid_t pid = syscall(SYS_gettid);
#endif
int err = sched_setaffinity(pid, sizeof(mask), &mask);
MACE_CHECK(err == 0, "set affinity error: ", strerror(errno));
if (err) {
LOG(WARNING) << "set affinity error: " << strerror(errno);
return MACE_INVALID_ARGS;
} else {
return MACE_SUCCESS;
}
}
} // namespace
......@@ -129,7 +134,7 @@ MaceStatus GetCPUBigLittleCoreIDs(std::vector<int> *big_core_ids,
return MACE_SUCCESS;
}
void SetOpenMPThreadsAndAffinityCPUs(int omp_num_threads,
MaceStatus SetOpenMPThreadsAndAffinityCPUs(int omp_num_threads,
const std::vector<int> &cpu_ids) {
#ifdef MACE_ENABLE_OPENMP
VLOG(1) << "Set OpenMP threads number: " << omp_num_threads
......@@ -146,17 +151,23 @@ void SetOpenMPThreadsAndAffinityCPUs(int omp_num_threads,
for (auto cpu_id : cpu_ids) {
CPU_SET(cpu_id, &mask);
}
#ifdef MACE_ENABLE_OPENMP
std::vector<MaceStatus> status(omp_num_threads);
#pragma omp parallel for
for (int i = 0; i < omp_num_threads; ++i) {
VLOG(1) << "Set affinity for OpenMP thread " << omp_get_thread_num()
<< "/" << omp_get_num_threads();
SetThreadAffinity(mask);
status[i] = SetThreadAffinity(mask);
}
for (int i = 0; i < omp_num_threads; ++i) {
if (status[i] != MACE_SUCCESS)
return MACE_INVALID_ARGS;
}
return MACE_SUCCESS;
#else
SetThreadAffinity(mask);
MaceStatus status = SetThreadAffinity(mask);
VLOG(1) << "Set affinity without OpenMP: " << mask.__bits[0];
return status;
#endif
}
......@@ -191,8 +202,8 @@ MaceStatus SetOpenMPThreadsAndAffinityPolicy(int omp_num_threads_hint,
omp_num_threads_hint > static_cast<int>(use_cpu_ids.size())) {
omp_num_threads_hint = use_cpu_ids.size();
}
SetOpenMPThreadsAndAffinityCPUs(omp_num_threads_hint, use_cpu_ids);
return MACE_SUCCESS;
return SetOpenMPThreadsAndAffinityCPUs(omp_num_threads_hint, use_cpu_ids);
}
MaceStatus SetOpenMPThreadPolicy(int num_threads_hint,
......@@ -202,7 +213,8 @@ MaceStatus SetOpenMPThreadPolicy(int num_threads_hint,
return SetOpenMPThreadsAndAffinityPolicy(num_threads_hint, policy);
}
void SetOpenMPThreadAffinity(int num_threads, const std::vector<int> &cpu_ids) {
MaceStatus SetOpenMPThreadAffinity(int num_threads,
const std::vector<int> &cpu_ids) {
return SetOpenMPThreadsAndAffinityCPUs(num_threads, cpu_ids);
}
......
......@@ -25,7 +25,7 @@ namespace mace {
MaceStatus GetCPUBigLittleCoreIDs(std::vector<int> *big_core_ids,
std::vector<int> *little_core_ids);
void SetOpenMPThreadsAndAffinityCPUs(int omp_num_threads,
MaceStatus SetOpenMPThreadsAndAffinityCPUs(int omp_num_threads,
const std::vector<int> &cpu_ids);
MaceStatus SetOpenMPThreadsAndAffinityPolicy(int omp_num_threads_hint,
......
......@@ -18,6 +18,7 @@
#include "mace/core/testing/test_benchmark.h"
#include "mace/public/mace.h"
#include "mace/public/mace_runtime.h"
#include "mace/utils/logging.h"
DEFINE_string(filter, "all", "op benchmark regex filter, eg:.*CONV.*");
DEFINE_int32(gpu_perf_hint, 3, "0:DEFAULT/1:LOW/2:NORMAL/3:HIGH");
......@@ -33,9 +34,12 @@ int main(int argc, char **argv) {
gflags::ParseCommandLineFlags(&argc, &argv, true);
// config runtime
mace::SetOpenMPThreadPolicy(
mace::MaceStatus status = mace::SetOpenMPThreadPolicy(
FLAGS_omp_num_threads,
static_cast<mace::CPUAffinityPolicy >(FLAGS_cpu_affinity_policy));
if (status != mace::MACE_SUCCESS) {
LOG(WARNING) << "Set openmp or cpu affinity failed.";
}
mace::SetGPUHints(
static_cast<mace::GPUPerfHint>(FLAGS_gpu_perf_hint),
static_cast<mace::GPUPriorityHint>(FLAGS_gpu_priority_hint));
......
......@@ -4,7 +4,7 @@ android {
compileSdkVersion 26
defaultConfig {
applicationId "com.xiaomi.mace.demo"
minSdkVersion 23
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
......
......@@ -34,7 +34,7 @@ public class InitData {
public InitData() {
model = MODELS[0];
ompNumThreads = 2;
cpuAffinityPolicy = 1;
cpuAffinityPolicy = 0;
gpuPerfHint = 3;
gpuPriorityHint = 3;
device = DEVICES[0];
......
......@@ -5,8 +5,8 @@ set -e -u -o pipefail
pushd ../../../
python tools/converter.py build --config=docs/getting_started/models/demo_app_models.yaml
cp -r builds/mobilenet/include/ mace/examples/android/macelibrary/src/main/cpp/
cp -r builds/mobilenet/lib/ mace/examples/android/macelibrary/src/main/cpp/
cp -r builds/mobilenet/include mace/examples/android/macelibrary/src/main/cpp/
cp -r builds/mobilenet/lib mace/examples/android/macelibrary/src/main/cpp/
popd
......
......@@ -9,7 +9,7 @@ android {
}
defaultConfig {
minSdkVersion 23
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
......
......@@ -125,7 +125,8 @@ MaceStatus SetOpenMPThreadPolicy(int num_threads_hint,
// affinity to offline cores may run very slow or unexpectedly. In such cases,
// please use SetOpenMPThreadPolicy with default policy instead.
__attribute__((visibility("default")))
void SetOpenMPThreadAffinity(int num_threads, const std::vector<int> &cpu_ids);
MaceStatus SetOpenMPThreadAffinity(int num_threads,
const std::vector<int> &cpu_ids);
// Get ARM big.LITTLE configuration.
//
......
......@@ -198,9 +198,12 @@ bool RunModel(const std::string &model_name,
const std::vector<std::vector<int64_t>> &output_shapes) {
DeviceType device_type = ParseDeviceType(FLAGS_device);
// config runtime
mace::SetOpenMPThreadPolicy(
MaceStatus status = mace::SetOpenMPThreadPolicy(
FLAGS_omp_num_threads,
static_cast<CPUAffinityPolicy >(FLAGS_cpu_affinity_policy));
if (status != MACE_SUCCESS) {
LOG(WARNING) << "Set openmp or cpu affinity failed.";
}
#ifdef MACE_ENABLE_OPENCL
if (device_type == DeviceType::GPU) {
mace::SetGPUHints(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册