14290


golangで,内部で生成された行列の逆行列を生成するプログラムを書いています.LU分解をしている関数を並列化してchannelで同期させたいのですが,行列の次元数が90を超えると,タイトルのメッセージのように

> channel element type too large (>64kB)

が表示されます.

私はこの問題を解決して行列の次元数をあげたいのですが,どのように変更すれば良いのでしょうか？

ソースは以下のリンクを見て下さい.

[matrix_inverse_program](https://github.com/yutatouyama/Parallel_distributed_processing/blob/master/inverse3.2.1.go)

上のリンクの92~100行目に当たる所です.

煩雑なプログラムで申し訳ないですが,宜しくお願い致します.


CC BY-SA 3.0
2015-08-11T13:40:23.190
14288
2015-08-11T14:10:36.350
2015-08-11T13:49:26.160
10883
10883
question
go
golang - channel element type too large (>64kB)


大きな `Matrix` をそのまま `chan` に入れていることが、その問題の原因のようです。

代わりにポインタ `*Matrix` を入れるのはどうでしょう。以下のように修正してみてください。

  * [92行目](https://github.com/yutatouyama/Parallel_distributed_processing/blob/master/inverse3.2.1.go#L92) を `a := make(chan *Matrix, 4)` に変更
  * [97行目](https://github.com/yutatouyama/Parallel_distributed_processing/blob/master/inverse3.2.1.go#L97) を `a <- &R` に変更。
  * [99行目](https://github.com/yutatouyama/Parallel_distributed_processing/blob/master/inverse3.2.1.go#L99) を `LUM = *(<-a)` に変更


CC BY-SA 3.0
2015-08-11T14:10:36.350
14290
2015-08-11T14:10:36.350
208
14288
answer