0
A
答えて
1
チゼルは行列操作をサポートしていません。このような操作を実装するハードウェアジェネレータを書くためのDSLです。特殊な数学ハードウェアジェネレータの例については、Hwacha: A hardware vector unitとDspTools: a set of math tools
0
はい、ベクトルの助けを借りてChiselで行列演算を行うことができます。私が思いついたコードは以下の通りです(入力行列のサイズは3x5と5x2です)。
package matrixmult
import chisel3._
import chisel3.iotesters.{PeekPokeTester, Driver}
import scala.collection.mutable.ArrayBuffer
class MatMult extends Module {
val io = IO(new Bundle {
val matA = Input(Vec(15, UInt(32.W)))
val matB = Input(Vec(10, UInt(32.W)))
val load = Input(Bool())
val matC = Output(Vec(6, UInt(32.W)))
val valid = Output(Bool())
})
var sum = UInt(32.W)
val matC = new ArrayBuffer[UInt]()
for(i <- 0 until 6) {
matC += 0.asUInt(32.W)
}
when (io.load) {
for(i <- 0 until 3) {
for(j <- 0 until 2) {
sum = 0.asUInt(32.W)
for(k <- 0 until 5)
{
sum = sum + matA(i*5+k)*io.matB(k*2+j)
}
matC(i*2 + j) = sum
}
}
io.valid := true.B
} .otherwise {
io.valid := false.B
}
val outputMat = Vec(matC)
io.matC := outputMat
}
関連する問題
- 1. Chiselで算術シフト演算子を使用する方法
- 2. 並列処理、疎演算、GPU計算の行列演算
- 3. Scala/Chiselの型パラメータを持つOveride/Overload演算子
- 4. 行列演算は
- 5. scipy.sparse行列のブール演算
- 6. Matlabの行列演算子
- 7. CUDAのスパース行列演算
- 8. 行列演算(三のJS)
- 9. 擬似逆行列演算
- 10. 行列のリストのRコロン演算子
- 11. C++:行列テンプレートの+ =演算子のオーバーロード
- 12. pysparkで算術演算を行った後の列の追加
- 13. ループなしの行列演算
- 14. C++演算子+行列のオーバーロード
- 15. 行列演算のモジュロ誤差
- 16. 演算子のオーバーロード:マルチプル化行列
- 17. 配列演算
- 18. GPUでの整数演算とビット演算の実行
- 19. R:行列演算[新しいバージョン]
- 20. Pythonで行列のパワー演算を行う
- 21. GLSLでこれらの行列演算を行うには?
- 22. 演算子のオーバーロードを使用した行列の加算
- 23. ビット単位の演算子による行列乗算
- 24. numpyでコンボリューション行列演算を行うには?
- 25. <<演算子とC++の文字列のオーバーロード+演算子
- 26. タイムスタンプ列のLIKE演算子
- 27. 演算子と列の間(+)
- 28. bashの配列演算
- 29. 列内の算術演算子
- 30. 配列要素の算術演算(Sum)