問題タブ [metal-performance-shaders]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
237 参照

objective-c - CIImageProcessorKernel サブクラスで Metal Compute のデバイスを指定するには?

CIFilterのサブクラスを使用して実装されたカスタムがありCIImageProcessorKernelます。カーネル自体は非常に単純です。

これは、期待される結果を生成するという点で、うまく機能します。私が抱えている問題は、2 つの GPU を搭載した MacBook Pro で統合 GPU を使用していることであり、ディスクリート GPU を使用したいと考えています。MTLCreateSystemDefaultDevice()(ディスクリート GPU)の結果を に渡すと-[MPSImageAreaMin initWithDevice:...]、アサーション エラーが発生します。

-[MTLDebugComputeCommandEncoder setComputePipelineState:] 失敗したアサーション computePipelineState が別のデバイスに関連付けられています

これはおそらく、MTLComputeCommandEncoder実行を担当する機械が内部で使用する のインスタンスが-encodeToCommandBuffer:sourceTexture:destinationTexture:、統合 GPU を使用するように設定されているためです。これは物から引っ張られた結果だと思います。commandBufferCIImageProcessorOutput

私の質問: で使用する GPU を指定することは可能-encodeToCommandBuffer:sourceTexture:destinationTexture:ですか? おそらくそれには、出力/金属コマンド バッファのカスタマイズが含まれますが、それについてはわかりません。

0 投票する
1 に答える
148 参照

ios - MPSMatrixVectorMultiplication が遅すぎる

私は、主に行列とベクトルに関連する重い数学計算を行う GPU アルゴリズムに取り組んでいます。処理時間に関してはかなりの数値を記録していますが、まだ改善の余地があると感じています。

だから私は自分でフレームワークを発見しましMetal Performance Shadersた。GPU アルゴリズムが行う数学演算用に微調整および最適化されたカーネル シェーダーを見つけることができるため、そのフレームワークの説明は私を興奮させました。

ベクトルの出力で行列をMPSMatrixVectorMultiplication大きく乗算しているため、最初に使用することにしました。11000x50011000 vector500

そういうわけで、私はそれを使用しています。s と操作自体のMPSラッパーを宣言します。MTLBuffer

これらのMPSラッパーを初期化します。

そして乗算を行います:

今、私が書いたカーネル関数は、約0.8-1.1ミリ秒でまったく同じ乗算を行います。そして、MPSMatrixVectorMultiplicationそれが18-19 ms.

それはあまりにも遅すぎて、私はそのような結果を信じることができません. 明らかに、パフォーマンスの多くを奪う小さなディテールが欠けています。

MPSパフォーマンスに敏感なコードでソリューションを使用した人はいますか? GPU ルーチンに適用できるヒントをいくつか教えていただければ幸いです。

前もって感謝します!