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. Node.jsの非同期/同期
- 7. 非同期メソッド非同期に新
- 8. 非同期操作と非同期ネットワークタスク?
- 9. NodeJs - 非同期/非同期/待機中
- 10. 春非同期 - 非同期豆に
- 11. 非同期、非同期待機
- 12. 非同期/同期ループNode.js
- 13. 非同期ソケットと同期
- 14. リクエストレスポンモデル/同期/非同期/イベントドリブン
- 15. Laravelジョブクエリ非同期/同期?
- 16. 「非同期キーワード非同期」関数を「非同期キーワード非同期」関数に変換できますか?
- 17. Linuxの非同期ソケット - ポーリングとコールバックの比較
- 18. LinuxでのVimプラグインと.vimrc非同期エラー
- 19. Linuxにsendfileの非同期バージョンはありますか?
- 20. RxSwiftとの非同期ネットワークコールの同期
- 21. RxJSとの非同期アクションの同期
- 22. 同期非同期入力の処理
- 23. 非同期関数の同期例外
- 24. 同期対非同期データベースへのアクセス
- 25. リアルタイムアプリケーションの非同期対同期ソケットサーバー
- 26. 同期コードの非同期実行
- 27. 非同期マップの同期セクション
- 28. 同期と非同期のアクティビティ
- 29. ベクトル(同期)のArrayList(非同期)
- 30. ポーリングなしのLinux同期
どのプラットフォームですか?このx86ですか? –
ARM9プロセッサ、Freescale iMX233マイクロコントローラです。 – SunnyShah