DMAコマンドのfence修飾とbarrierコマンドを知る
出典: PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう
[編集]
フェンス修飾
MFCではDMAキューに16本までのDMA転送コマンドを保持し順不同に実行できます。 従ってDMAコマンドは発行した順に実行されるとは限りません。 順序を保障したいときにはDMAコマンドにfence修飾をつけます。 例えば2つのDMA_PUT_CMDを送りたいときに、後続のDMAコマンドをfenceで修飾しDMA_PUTF_CMDとします。こうすることで後続のDMAコマンドは、それ以前に発行された同じタググループのDMAコマンドより早く実行されることはありません。 なおfence修飾は後に発行されたDMAコマンドが、それより早く実行される事は禁止しません。 これを禁止したい場合はfence修飾ではなく、後述するバリアコマンドを使用してください。 なおfenceは独立したDMAコマンドではなく、他のDMAコマンドを修飾する接尾語です。
[編集]
バリアコマンド
バリアコマンドはそれより後に発行された同じタググループのDMAコマンドが、バリアコマンドより早く実行される事を禁止します。バリアは独立したコマンドとして発行するか、他のDMAコマンドの修飾子として使います。
[編集]
サンプルコード
フェンス修飾とバリアコマンドを使ったサンプルを置いておきます。 ただし順序を保証したDMA転送を行っているだけで、ほとんど意味のないコードです。
Media:Dma_fence_and_barrier.tar.gz


