nnpack_utils.cc 929 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*!
 *  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();
}

TVM_REGISTER_GLOBAL("contrib.nnpack._Config")
.set_body([](TVMArgs args, TVMRetValue *ret) {
    NNPackThreadLocalEntry *entry = NNPackThreadLocalEntry::ThreadLocal();
20
    size_t nthreads = args[0].operator uint64_t();
21 22 23 24 25 26 27 28 29 30 31
    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);
    }
  });
}  // namespace contrib
}  // namespace tvm