Linuxに非同期memcpy関数はありますか?DMAで動作し、完了したら通知してほしい。
3 に答える
私の知る限り、CPUはそれ自体に対してDMAを実行しません/実行できません。したがって、トリックを実行するには、バス上に外部ハードウェアが必要です。
ただし、ほとんどのハードウェアはすべての物理メモリをアドレス指定できないため、ユースケースでメモリアドレス範囲を非常に厳密に定義しない限り、正確なmemcpyクローンを作成することはできません。そうしないと、カーネルはブロックを自分のメモリブロック自体にmemcpyする必要があり、そもそもmemcpyのクローンを作成する目的が失われます:)
ただし、memcpyを使用せずにメモリブロックの「クローン」を作成する場合(DMAメモリアクセスは通常CPUよりも遅いため、これは悪い考えです)、メモリブロックをビデオカードに送信してプルバックできます。別のバッファに。ブロックをビデオメモリに入れ(putbitmap()?:))、ハードウェアアクセラレーションされたbitblt()を実行して、その場でコピーを作成することもできます。
人々がより賢く/より良いトリックを思い付くことができるように、あなたの実際の目標を共有してもよろしいですか?
マルチコアプロセッサ、またはハイパースレッディングを備えたプロセッサでさえ、別のスレッドで通常の(同期)を実行することで、必要なものを並べ替えることができますmemcpy
。私はそれが良い考えだと言っているのではなく、明白なことを指摘しているだけです。
あなたはmremapでいくつかの遊びをすることができます。または、FFmpegをハックして、フレームごとに異なるバッファーを使用することもできます。