プログラムで次のようなものを作成したい:
a = (_vec, T.set_subtensor(_vec[0], _init[0]))[1]
b = (a, T.set_subtensor( a[1], a[0] * 2))[1]
c = (b, T.set_subtensor( b[2], b[1] * 2))[1]
vec_update = (c, T.set_subtensor(c[3], c[2] * 2))
test_vector = function([], outputs=vec_update)
subt = test_vector()
a = (_vec, T.set_subtensor(_vec[0], _init[0]))[1]
そのステートメント全体がそうです。これはまだ何もしていません。次に、b = (a, T.set_subtensor( a[1], a[0] * 2))[1]
依存しているものがa
あり、別のステートメント自体があります。これは まで続きvec_update
ます。見た目が悪いことはわかっていますが、次のようなベクトルcol[n] = col[n-1] * 2
をcol[0] = 1
返すように、ベクトルの列を更新するだけです。
[[ 1. 2. 4. ..., 32. 64. 128.]]
今、これを何千回もやりたいと想像してみてください..したがって、簡単なパターンに従うので、そのようなステートメントを生成できるかどうか疑問に思っています。
これらの「連結された」ステートメントは、
test_vector = function([], outputs=vec_update)
これは、それらがコンパイルされているときでありCUDA-code
、
subt = test_vector()
すべてを実行します。