t_wの輪郭

Feedlyでフォローするボタン
WebGPUで遺伝的プログラミング1070 TiはCUDA Coreが2432基正気か?WebGPUの制約令和やぞSIMD
  • 一つのBufferが128MBまでしか作れない。
    • Deviceの取得時にmaxBufferSizeとか設定すれば限定解除できそうな雰囲気があるが、やり方がわからない
      • というかやってみたけど(RequiredLimitsを設定)Deviceが取得できなくなった
  • Shaderの中で宣言したarrayは添え字が定数でしか取得できない
    • for(var i=0u; i<10u; i++ ){let val = arr[i]}みたいなことができない
    • 正気か?
  • 関数の再帰呼び出しは不可
    • SIMDやぞ」ということで、まあわからなくはない
    • 「Stackを作って関数の再帰呼び出しをfor文で再現」と思うも、「Shaderの中で宣言したarrayは添え字が定数でしか取得できない」
  • 関数型がなさそう
    • 「配列に関数を入れて処理を出しわける」みたいなことができない
    • 無理やりやるとif文のお化けになってしまう
      • SIMDでif文めっちゃ使うのはなんかヤダ

然るに

  • 遺伝的プログラミングで生成したProgramを構成するNode群を実行できない
    • NodeからNodeを呼び出したい
      • → 「関数の再帰呼び出しは不可」
    • Node群を入力側から順次実行し、Nodeの出力値をNodesOutputみたいなarrayに格納
      • → 「Shaderの中で宣言したarrayは添え字が定数でしか取得できない」
    • StorageBufferは変数の添え字が使えるので、それでNodesOutputを作る
      • → 「一つのBufferが128MBまでしか作れない」
        • 並列処理の数だけNodesOutputが必要なので、1GBぐらいほしい
          • 手元にある1070 TiはCUDA Coreが2432基あるので
    • 並列処理したい数だけStorageBufferを作る(シェーダーを自動生成する)
      • → 処理が複雑過ぎて3日もたてば何やってるかわからないコードになる
  • どれか一つでも制約をなんとかできれば遺伝的プログラミングはできそう。

きえええええええええええええぇぇぇぇぇ


GPGPUあるあるの制約なのかもしれないが、世の機械学習ライブラリはこういう制約をどう御しているのか。
なぜこんな古生代みたいな制約があるのか。令和やぞ。

一部WGSLの制約かもしれない。

あれあれ

あれ

2023/7/11 13:32:00

WGSLからはSRIP−Vに変換されるので、これを直接生成すればいいじゃんという厄介な案が浮かぶ。

WebGPU-nativeのgo版ではGLSLが使える雰囲気あったので試そうかと思ったが、GLSLも関数の再帰呼び出しや、変数での配列の値取得はできないらしい。

腹くくってSRIP-Vしか無いのか。

あれ

2023/7/9 14:24:00

Shaderの中で宣言したarrayは添え字が定数でしか取得できない

「arrayが使えないのなら線形リストを作ればいいじゃない!」
ひいいいいいいいい

シェーダーの中で線形リストを実装するのは悪夢すぎる
デバッグができる気がしない