問題タブ [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.
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:ですか? おそらくそれには、出力/金属コマンド バッファのカスタマイズが含まれますが、それについてはわかりません。
ios - MPSMatrixVectorMultiplication が遅すぎる
私は、主に行列とベクトルに関連する重い数学計算を行う GPU アルゴリズムに取り組んでいます。処理時間に関してはかなりの数値を記録していますが、まだ改善の余地があると感じています。
だから私は自分でフレームワークを発見しましMetal Performance Shadersた。GPU アルゴリズムが行う数学演算用に微調整および最適化されたカーネル シェーダーを見つけることができるため、そのフレームワークの説明は私を興奮させました。
ベクトルの出力で行列をMPSMatrixVectorMultiplication大きく乗算しているため、最初に使用することにしました。11000x50011000 vector500
そういうわけで、私はそれを使用しています。s と操作自体のMPSラッパーを宣言します。MTLBuffer
これらのMPSラッパーを初期化します。
そして乗算を行います:
今、私が書いたカーネル関数は、約0.8-1.1ミリ秒でまったく同じ乗算を行います。そして、MPSMatrixVectorMultiplicationそれが18-19 ms.
それはあまりにも遅すぎて、私はそのような結果を信じることができません. 明らかに、パフォーマンスの多くを奪う小さなディテールが欠けています。
MPSパフォーマンスに敏感なコードでソリューションを使用した人はいますか? GPU ルーチンに適用できるヒントをいくつか教えていただければ幸いです。
前もって感謝します!