@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそ、すべては、SystemC v0.9公開から始まった
TensorFlow Hexagon Delegateに続き、
TVMでもQualcomm Hexagon runtime がサポートされたので、
PyTorchはどうかな?と思って調べていたら、ちょっと気になったコードを発見。
PyTorch、実際には Caffe2 の CPU の ThreadPool のコード => ここ。
結構細かく判断していて、最大でも4コアになっている。
size_t getDefaultNumThreads() {
CAFFE_ENFORCE(cpuinfo_initialize(), "cpuinfo initialization failed");
int numThreads = cpuinfo_get_processors_count();
bool applyCap = false;
#if defined(C10_ANDROID)
applyCap = FLAGS_caffe2_threadpool_android_cap;
#elif defined(C10_IOS)
applyCap = FLAGS_caffe2_threadpool_ios_cap;
#endif
if (applyCap) {
switch (numThreads) {
#if defined(C10_ANDROID) && (CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64)
case 4:
switch (cpuinfo_get_core(0)->midr & UINT32_C(0xFF00FFF0)) {
case UINT32_C(0x51002110): /* Snapdragon 820 Kryo Silver */
case UINT32_C(0x51002010): /* Snapdragon 821 Kryo Silver */
case UINT32_C(0x51002050): /* Snapdragon 820/821 Kryo Gold */
/* Kryo: 2+2 big.LITTLE */
numThreads = 2;
break;
default:
/* Anything else: assume homogeneous architecture */
numThreads = 4;
break;
}
break;
#endif
case 5:
/* 4+1 big.LITTLE */
numThreads = 4;
break;
case 6:
/* 2+4 big.LITTLE */
numThreads = 2;
break;
case 8:
/* 4+4 big.LITTLE */
numThreads = 4;
break;
case 10:
/* 4+4+2 Min.Med.Max, running on Med cores */
numThreads = 4;
break;
default:
if (numThreads > 4) {
numThreads = numThreads / 2;
}
break;
}
}
return numThreads;
}