ESP32の演算速度メモ

現在、音声認識の基礎や色々な手法の勉強をしつつ、PC上でシミュレータを作成し、独自アルゴリズムを検討しています。

その結果、「うえ、した、ひだり、みぎ」のような簡単な単語であれば、認識できそうな感じになってきました。

ただし、私の声の特徴量でしか見ていないのですが…。

事前に声の特徴量を取得する「音声登録モード」みたいなものを作れば、他の人の声でもいけるかもしれませんね。

んまぁでも、私の声でドロイド君が反応してくれたら、それだけで結構感動しちゃう気もします。
(満足げ)

さて、今回の音声認識で重要なポイントは「なるべく軽いアルゴリズム」であること、です。

リソースの限られたESP32で、リアルタイムに音声認識を行いたいので、なるべく単純になるよう設計しています。

これと並行して、そもそものESP32のCPUの演算能力を測ってみたので、以下にメモしておきます。

ESP32演算速度

100万回ループ比較(Iはint, Fはfloat演算)
演算内容 時間(us) 比率
AddI 33,602 x1.0
MultI 33,601 x1.0
DivI 37,801 x1.1
AddF 37,602 x1.1
MultF 37,601 x1.1
DivF 231,045 x6.9
LogF 1,226,282 x36.5

「比率」は、AddIの計算時間を1としたとき、他の演算で相対的にどれくらいかかるか、を示しています。

intの加算とfloatの乗算の演算速度がほぼ同じなので、ESP32のCPUに浮動小数点用の乗算器が乗ってるってことでしょうか。

これはうれしい誤算でした。安価なマイコンだってのに、最近はすごいですね。というか、まずアルゴリズム検討前に測っときなさいよ。基本の「き」ですよ。ですよね~。

(追記: 2018/6/17)
ちゃんと、ESP32の仕様書に「float演算用ユニットあるよ」って書いてありました。

また、こちらのサイトで、floatとdoubleの演算比較をやっているようです。興味深い。

初心者向けの解説

まず用語の説明として、intは整数のみ(12とか)、floatは小数(12.3とか)も扱える、数字の箱のことです。

また、Addは加算(足し算)、Multは乗算(かけ算)、Divは除算(わり算)を表しています。

一般的には、同じ足し算でも、整数(int)のみの演算よりも、小数(float)のほうが難しいです。

また、人間と似ていて「加算/減算 ⇒ 乗算 ⇒ 除算」の順番に難しくなっていきます。

これらを踏まえた上で、上記の表の1行目(AddIの行)は「100万回の整数の足し算を、33,602(us)で出来たよ」ということを意味しています。

つまり「1秒間に2976万回の足し算ができるよ」ということです。

さらに、MultF(=小数の乗算)の行を見てみると、AddIの計算時間とあまり変わらないことがわかります。

なので、このCPUには、苦手克服用として、小数乗算の専用回路が入っているのかもしれません。

まったく、小数の掛け算なんて、1秒に1回だって難しいのに!ここら辺の計算力は、人間には到底勝てない分野ですよね。

さて、次はついに実機への実装です。もうすぐドロイド君で音声認識ができるようになるかも!
ということで、また次回をお楽しみに。