はじめに
水曜日(11/3) に Google Tensor について、ハードウェアスペックについて書き込ました。
Google Pixel 6/6 Proに搭載されているGoogle Tensor(開発コード名はGS101)というSoC。そのSoCには、EdgeTPUも載っています。 今日は、搭載されている EdgeTPU のデバイスドライバのソースコードを見つけたので、ちょっと掘ってみました。
ざっくりわかったこと
GS101のEdgeTPUのデバイスドライバのソースコードを眺めていたら、タイル数は16っぽい。かつ、アーキテクチャは 単体のEdgeTPU、Pixel 4のASICのEdgeTPUと同じっぽです。
デバイスドライバ的には、Mailbox経由でEdgeTPU側のCPUとの通信しているだけなので、EdgeTPU側で何をやってるかまでは不明です。
- Pixel 4のEdgeTPUは、darwinn
- Pixel 6のEdgeTPUは、abrolhos
ソースコードの場所
android/kernel/google-modules/edgetpu
です。
デバイス名
GS101 が Google Tensor のコード名なんでしょうね。
androidの中では、/dev/abolhos を /dev/edgetpu にシンボリックリンクしています。
static const struct of_device_id edgetpu_of_match[] = { /* TODO(b/190677977): remove */ { .compatible = "google,darwinn", }, { .compatible = "google,edgetpu-gs101", }, { /* end of list */ }, };
IOCTL
ioctl のファイルは、edgetpu.h です。
- EDGETPU_MAP_BUFFER
- EDGETPU_UNMAP_BUFFER
- EDGETPU_SET_EVENTFD
- EDGETPU_CREATE_GROUP
- EDGETPU_JOIN_GROUP
- EDGETPU_FINALIZE_GROUP
- EDGETPU_SET_PERDIE_EVENTFD
- EDGETPU_UNSET_EVENT
- EDGETPU_UNSET_PERDIE_EVENT
- EDGETPU_SYNC_BUFFER
- EDGETPU_MAP_DMABUF
- EDGETPU_UNMAP_DMABUF
- EDGETPU_ALLOCATE_DEVICE_BUFFER
- EDGETPU_CREATE_SYNC_FENCE
- EDGETPU_SIGNAL_SYNC_FENCE
- EDGETPU_MAP_BULK_DMABUF
- EDGETPU_UNMAP_BULK_DMABU
- EDGETPU_SYNC_FENCE_STATUS
- EDGETPU_RELEASE_WAKE_LOCK
- EDGETPU_ACQUIRE_WAKE_LOCK
- EDGETPU_FIRMWARE_VERSION
- EDGETPU_GET_TPU_TIMESTAMP
- EDGETPU_GET_DRAM_USAGE
- EDGETPU_ACQUIRE_EXT_MAILBOX
- EDGETPU_RELEASE_EXT_MAILBOX
- EDGETPU_GET_FATAL_ERRORS
Mailbox
ホストとEdgeTPUは、Mailbox を使って通信しています。このホスト以外にもあるようです。
/* mailbox types */ #define EDGETPU_EXT_MAILBOX_TYPE_TZ 1 #define EDGETPU_EXT_MAILBOX_TYPE_GSA 2 #define EDGETPU_EXT_MAILBOX_TYPE_DSP 3
GSAは、ホストとのMailboxです。TZとDSPは、謎です。
TZは、このファイル内の abrolhos_check_ext_mailbox_args関数では、TZを使っているようです。
おわりに
この部分に、次のようなコメントがありました。 CadenceのエミュレータPalladiumを使っていたんですね。
/* Set extra ludicrously high to 60 seconds for (slow) Palladium emulation. */