シンセ・アンプラグド RSSフィード

2018-04-17

ESP32 の命令実行サイクル数 (1)

gcc のインライン・アセンブラを使って Xtensa LX6 の「MAC16 拡張命令」を記述し、実行サイクル数の削減を試みていますが、次の 2 つの理由で成功していません。

  • インライン・アセンブラを利用すると、「ハードウェア・ループ命令」が使われなくなり、通常通りのループカウンタ・デクリメント + 条件ジャンプの組み合わせでループが構成され、5 サイクルのオーバーヘッドが生じる
  • MAC16 拡張命令の実行ではパイプライン・ストールが生じ、1 命令 1 サイクルとはならない

続きを読む

2018-04-06

新版FM音源プログラム (29)

Cortex-M シリーズを離れて、Espressif Systems 製の ESP-WROOM-32 モジュール (Cadence/Tensilica の Xtensa LX6 デュアル・コア内蔵) に対してプログラムを作成し、所要サイクル数を測定してみました。

具体的には、ハードウェアとしては「ESP32-DevKitC ESP-WROOM-32 開発ボード」(秋月通販コード M-11819 →こちら)、開発環境としては Esspressif が提供する「ESP-IDF」を使用しています。

ESP-WROOM-32 は WiFi / Bluetooth を内蔵していることが大きな特長ですが、ここでは単に 240 MHz クロックの RISC プロセッサとして利用しているだけです。

Xtensa LX6 は「ガチ」な RISC であり、そのアーキテクチャに不慣れなこともあり、無理にアセンブリ言語プログラムを書いてもパイプラインをストールさせずに高速化できるかどうか不明なため、C 言語で記述することにしました。

アキュムレータ機能組み込みの acc_calc_slot() 関数のソース・リストを下に示します。

続きを読む

2018-04-04

新版FM音源プログラム (28)

gcc の「インライン・アセンブラ」で書いた ARMv7E-M (Cortex-M4) 版の acc_calc_slot() 関数のリストを下に示します。 「中身」は armcc 版と同等です。

続きを読む

2018-03-31

新版FM音源プログラム (27)

gcc の「インライン・アセンブラ」で書いた ARMv7-M (Cortex-M3) 版の acc_calc_slot() 関数のリストを下に示します。 「中身」は armcc 版と同等です。

続きを読む

2018-03-30

新版FM音源プログラム (26)

gcc の「インライン・アセンブラ」で書いた ARMv6-M (Cortex-M0) 版の acc_calc_slot() 関数のリストを下に示します。 「中身」は armcc 版と同等です。

続きを読む

2018-03-25

新版FM音源プログラム (25)

armcc のエンベデッド・アセンブリ関数で書いた「アキュムレータ機能」付きのスロット計算関数「acc_calc_slot()」の Cortex-M0 版のリストを下に示します。

続きを読む

2018-03-23

新版FM音源プログラム (24)

armcc のエンベデッド・アセンブリ関数で書いた「アキュムレータ機能」付きのスロット計算関数「acc_calc_slot()」の Cortex-M3 版のリストを下に示します。

続きを読む