Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

DNN高速化ライブラリ : Demitasse




引用
llvmとispcを使い,Deep Learningの計算を高速化します.
Demitasseによれば,iOSバイス上でもGPUを使わずに数百msecの時間で,Caffe Model Zooによる画像認識を実行することができます.

にあるように、ispcを使っていると。

ispcはこのブログ、ispc v1.9リリースでも取り上げていますが、

Intel SPMD Program Compilerのことで、SIMD化をしてくれるものです。

Demitasseのispcのコードは、ここにあります。

例えば、softmaxのコードは、こんな感じ
引用

uniform float max_func(uniform int in_node, const uniform float data[]) {
  float m = 0.0f;
  foreach (i = 0...in_node) {
    m = max(m, data[i]);
  }
  return reduce_max(m);
}

uniform float all_func(uniform int in_node, uniform float m, const uniform float data[]) {
  float all = 0.0f;
  foreach (i = 0...in_node) {
    all += exp(data[i] - m);
  }
  return reduce_add(all);
}

export void ispc_softmax(uniform int in_node, uniform float a[], uniform float result[]) {
  uniform float m   = max_func(in_node, a);
  uniform float all = all_func(in_node, m, a);
  foreach (i = 0 ... in_node) {
    result[i] = exp(a[i] - m) / all;
  }
}

export void ispc_softmax_df(uniform int in_node, uniform float a[], uniform float result[]) {
  foreach (i = 0 ... in_node) {
    result[i] = a[i] * (1.0f - a[i]);
  }
}

慣れるまでは、ちょっとわかりづらいですが、

ispcはバックエンドにLLVMを使っています。