掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28294

16バイト単位のmemcpyは意味がある?
投稿者---るす(2006/10/02 00:10:47)


RISC系の64bitCPUを使用しているのですが、
既存コードにてカスタマイズした関数
memcpy4関数(4バイトのループ)
memcpy16関数(16バイト単位でループ)
が使用されていました。
4バイト単位のコピーは効率がよいのは理解できるのですが、
16バイト単位のコピーは、
RISCのようなパイプライン処理が行われる場合ではさらに効率があがるものなのでしょうか?
下記はmemcpy4とmemcpy16関数です。
memcpy4(unsigned int *pout, unsigned int *pin, unsigned int i)
{
  while(i != 0){
   *pout = *pin;
   pout++;
   pin++;
   i--;
  }
}

memcpy16(unsigned int *pout, unsigned int *pin, unsigned int i)
{
  while(i != 0){
   *pout = *pin;
   pout++;
   pin++;

   *pout = *pin;
   pout++;
   pin++;

   *pout = *pin;
   pout++;
   pin++;

   *pout = *pin;
   pout++;
   pin++;
   i--;
  }
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:16バイト単位のmemcpyは意味がある? 28295 たかぎ 2006/10/02 00:47:52


No.28295

Re:16バイト単位のmemcpyは意味がある?
投稿者---たかぎ(2006/10/02 00:47:52)
http://takagi.in/


>16バイト単位のコピーは、
>RISCのようなパイプライン処理が行われる場合ではさらに効率があがるものなのでしょうか?

RISCの場合、分岐命令のコストがCISCより大きい場合が多いので、できるだけループの回数を少なくしたかったのではないでしょうか?

ところで、どうせループを開くのであれば、こんなくそ真面目なことをしなくても、

>memcpy16(unsigned int *pout, unsigned int *pin, unsigned int i)
>{
>  while(i != 0){
>   pout[0] = pin[0];
>   pout[1] = pin[1];
>   pout[2] = pin[2];
>   pout[3] = pin[3];
>   pout+=4;
>   pin+=4;
>   i -= 4;
>  }
>}

でいいような気がします。増減演算のコストも馬鹿になりませんから。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧