7

Linuxに非同期memcpy関数はありますか?DMAで動作し、完了したら通知してほしい。

4

3 に答える 3

8

私の知る限り、CPUはそれ自体に対してDMAを実行しません/実行できません。したがって、トリックを実行するには、バス上に外部ハードウェアが必要です。

ただし、ほとんどのハードウェアはすべての物理メモリをアドレス指定できないため、ユースケースでメモリアドレス範囲を非常に厳密に定義しない限り、正確なmemcpyクローンを作成することはできません。そうしないと、カーネルはブロックを自分のメモリブロック自体にmemcpyする必要があり、そもそもmemcpyのクローンを作成する目的が失われます:)

ただし、me​​mcpyを使用せずにメモリブロックの「クローン」を作成する場合(DMAメモリアクセスは通常CPUよりも遅いため、これは悪い考えです)、メモリブロックをビデオカードに送信してプルバックできます。別のバッファに。ブロックをビデオメモリに入れ(putbitmap()?:))、ハードウェアアクセラレーションされたbitblt()を実行して、その場でコピーを作成することもできます。

人々がより賢く/より良いトリックを思い付くことができるように、あなたの実際の目標を共有してもよろしいですか?

于 2009-11-25T16:26:42.370 に答える
4

マルチコアプロセッサ、またはハイパースレッディングを備えたプロセッサでさえ、別のスレッドで通常の(同期)を実行することで、必要なものを並べ替えることができますmemcpy。私はそれが良い考えだと言っているのではなく、明白なことを指摘しているだけです。

于 2009-11-25T16:54:06.793 に答える
1

あなたはmremapでいくつかの遊びをすることができます。または、FFmpegをハックして、フレームごとに異なるバッファーを使用することもできます。

于 2010-03-03T08:40:33.013 に答える