前提・実現したいこと
趣味で並列計算のプログラムを作っています
まず複数の配列を用意してその値を用いてGPUに計算をさせます
計算結果の配列を上記の配列と入れ替えていき、それをひたすら繰り返します
要はニューラルネットワークやらディープラーニング といったことの真似事をしています
発生している問題・エラーメッセージ
シェーダーにデータを渡す部分でメモリリークをしているようでメモリ使用量がどんどん増えてしまい困っています
該当のソースコード
この前後に準備や後始末のコードはありますが、それら含め以下のコードがひたすら繰り返されます
・・・
let inDataBuffer2 = device.makeBuffer(bytes: b,
length: b.count * MemoryLayout<Float>.size,
options: MTLResourceOptions.storageModeShared)
computeCommandEncoder.setBuffer(inDataBuffer2, offset : 0, index : 1)
・・・
inDataBuffer2を使用後に解放(?)するようなコードはありません
試したこと
makeBuffer(bytes:length:options)をmakeBuffer(bytesNoCopy:length:options)に置き換えてみたりもしたのですが、今度はアライメント(?)とかのエラーで落ちてしまいました
(以下は2020/2/7追記)
その後、変数にnilを代入すると解放されるという記事を読んだのでやってみましたが変化はありませんでした
結局、MTLBurrerをクラスのプロパティにして一度作成したら内容を書き換えて使い回すようにしたら少しだけ改善されました
今では、もしかしたらコマンドバッファは何万発も連続で使用するようなものではないのかなって思っています
また、いただいたコメントを読んでコマンドバッファ等解放させる方法を探したけど見つけられませんでした
意図的に解放させる方法なんてあるのかな?
そういうのを教えてもらいたくて質問したんだけど、なんだか自分で調べろ考えろみたいなコメントを一つもらっただけだったのでこのサイトはもう利用しない予定です
補足情報(FW/ツールのバージョンなど)
使用しているmacは2013年のモデルです
OSは10.15.2
XCodeのバージョンは11.3
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。