Linuxに非同期のmemcpy関数はありますか?私はそれがDMAで動作し、完了したときに私に通知したい。Linuxの非同期memcpy?
答えて
私が知る限り、CPUはそれ自体にDMAを実行できません。だから、あなたのためのトリックをするためにバス上に外部ハードウェアが必要です。
ほとんどのハードウェアはすべての物理メモリを扱うことができません。したがって、正確なmemcpyクローンは、使用例のメモリアドレス範囲の定義が非常に厳密でない限り不可能です。さもなければ、カーネルはあなた自身のメモリブロック自身にブロックをmemcpyしなければなりません。これは、最初にmemcpyをクローンする目的を殺します:)
memcpyを使わずにメモリブロックの "クローン" (DMAメモリアクセスは通常CPUよりも遅いため、やはり悪い考え方ですが)、メモリブロックをビデオカードに送り、別のバッファに戻すことができます。ブロックをビデオメモリ(putbitmap()?:)に置き、ビットマップをハードウェアで高速化してコピーを作成することもできます。
あなたの実際の目標を共有してもらえますか?おそらく人々はよりスマートで優れたトリックを思いつくことができますか?
@ssg、私の実際の目標は、最適化されたビデオプレーヤーを作成することです。その中で、自分のYUVデータをキューにコピーします。コピーに2秒かかりました。このコピーがDMAよりも起こった場合は、この時点では別のスレッドでオーディオのデコードを行うことができます。 – SunnyShah
@Sunny Shah、おそらく共有メモリを使用してゼロコピーソリューションを検討する必要がありますか?なぜあなたはそのような大きなメモリのチャンクをコピーしていますか? – Dipstick
FFMPEGはデコード関数出力としてYUVFrameを出力します。次のYUVFrameが欲しいときは、既存のYUVFrameを編集して新しいものを作成するだけです。だから私はYUVFrameをバッファのキューにコピーし、その時にキューからフレームを表示します。このコピーには処理時間の約7%がかかります。 – SunnyShah
マルチコアプロセッサまたはhyper-threadingのプロセッサであっても、通常の(同期)memcpy
を別のスレッドで実行することで、必要なものを並べ替えることができます。私は良いアイデアだと言っているわけではなく、ただのことを指摘しています。
あなたはmremapでいくつかの演劇をすることができます。 また、別のフレームに異なるバッファを使用するようにFFmpegをハックすることもできます。
- 1. CUDAの非同期memcpy中のデバイス同期
- 2. Linuxの非同期タイマー
- 3. 非同期ループ内の非同期メソッド
- 4. 非同期イベントの同期
- 5. 春非同期 - 非同期豆に
- 6. リクエストレスポンモデル/同期/非同期/イベントドリブン
- 7. 非同期ソケットと同期
- 8. Linuxの非同期ソケット - ポーリングとコールバックの比較
- 9. 同期と非同期のアクティビティ
- 10. 同期非同期入力の処理
- 11. 同期対非同期データベースへのアクセス
- 12. リアルタイムアプリケーションの非同期対同期ソケットサーバー
- 13. イメージコントロール非同期
- 14. 非同期ストアドプロシージャコール
- 15. 非同期タスク
- 16. 非同期MySQL
- 17. 非同期ログ
- 18. 非同期プロパティセッター
- 19. 非同期クエリ
- 20. 非同期ブロック
- 21. 非同期
- 22. 非同期は
- 23. 非同期プロセスコール
- 24. 非同期HttpWebRequest
- 25. 非同期アーキテクチャ
- 26. 非同期ネットワークコール
- 27. 非同期CreateProcess?
- 28. 非同期タスクデータフェッチャー
- 29. 非同期ロードジェネレータ
- 30. 非同期チュートリアル?
どのプラットフォームですか?このx86ですか? –
ARM9プロセッサ、Freescale iMX233マイクロコントローラです。 – SunnyShah