nnpack_utils.cc 952 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*!
 *  Copyright (c) 2017 by Contributors
 * \file Use external nnpack library call.
 */
#include "./nnpack_utils.h"

namespace tvm {
namespace contrib {
using namespace runtime;

typedef dmlc::ThreadLocalStore<NNPackThreadLocalEntry> NNPackThreadLocalStore;

NNPackThreadLocalEntry* NNPackThreadLocalEntry::ThreadLocal() {
  return NNPackThreadLocalStore::Get();
}

17 18 19 20 21 22 23 24 25 26 27 28 29 30
bool NNPackConfig(uint64_t nthreads) {
  NNPackThreadLocalEntry *entry = NNPackThreadLocalEntry::ThreadLocal();
  if (entry->threadpool != NULL &&
      pthreadpool_get_threads_count(entry->threadpool) != nthreads) {
    pthreadpool_destroy(entry->threadpool);
    entry->threadpool = NULL;
  }
  if (entry->threadpool == NULL) {
    entry->threadpool = pthreadpool_create(nthreads);
  }
  return true;
}


31 32
TVM_REGISTER_GLOBAL("contrib.nnpack._Config")
.set_body([](TVMArgs args, TVMRetValue *ret) {
33
    CHECK(NNPackConfig(args[0]));
34 35 36
  });
}  // namespace contrib
}  // namespace tvm