由於 LLVM / Clang 14.0 發佈的接近, 近日就花了點時間看一下對於 vector extension 是否有相關的更新. 目前在 Clang 官方網站文件上已經可以看到.
Clang 14.0 中最令人振奮的莫過於新增的兩個部份
- Vector Builtins
- Matrix Types
Vector Builtins
vector builtins 主要能提供 compiler 明確使用對應指令來加速, 而這些不容易透過 C operator 來表示, builtins 分為兩類 elementwise builtins 與 reduction builtins
Fig. 1 - Elementwise Builtins 列表 |
Elementwise Builtins 本質上就是 Per-lane operation, 像是 __builtin_elementwise_max, 事實上透過先前分享過的 Clang ternary operator 就可以實作, 也就是說下列的 ternary operation:
vc = va > vb ? va : vb;
基本上等同於:
vc = __builtin_elementwise_max(va, vb);
事實上 elementwise builtins 並不限定於套用在 vector type, 基本的 scalar types 也可以.
Fig. 2 - Reduction Builtins 列表 |
Reduction Builtins 主要用在可以快速從 vector 中算出單一數值的結果, 舉凡像是總和(sum), 最大值(max)與最小值(min) 等等. 在 Clang 中還有特別的 - 所謂水平方向 AND / OR / XOR. 這對一些特別的應用很有幫助.
Matrix Types
由於現今新一代的 CPU 都加入了對於 matrix 操作加速的指令(Intel 的 AMX, ARM 的 SVE Matrix Extension 與 SME), 因此 Clang 加入 matrix type 也有助於更有效去使用這些.
在 Clang 中可以透過下列方式定義與使用 Matrix:
Fig. 3 - Clang Matrix Type 定義與使用範例 |
透過定義 Matrix Type, 能夠直接支援基本運算操作. 目前官方說明與範例中並沒有顯示與 vector 的互動. 但以目前的型態撰寫相關應用已便利不少.
沒有留言:
張貼留言