- 1 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 02:55:36 ]
- C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。
- 204 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 01:11:32 ]
- >>191
cygwin上のgccで試してみたけど、padding入らないよ
- 205 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:59:38 ]
- >>204
CPUによるが struct foo { char a; double b; }; でパディングが入らなかったら例外起きるだろうが。
- 206 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:41:55 ]
- 起こんねーよ、CPUによるが。
- 207 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:55:43 ]
- struct {char a, b, c;}だったらパディングなくても例外起きないよ。
コンパイラがまともなら。
- 208 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2009/01/12(月) 17:32:33 ]
- アラインメント制約の厳しいプロセッサなら、例外が起きないようにコンパイラが勝手にパディングするんじゃないかな。
しかしミスアラインメントのデータに対するロード・ストアの扱いは各CPUアーキ毎に方針が違ってて面白いな x86のSSE以降は、ミスアラインメントを許すが遅い命令と、許さないが高速な命令の2通りを用意。 対して、POWER/CellのSIMDは下位ビットを無視してロードし、プログラマが勝手にPermuteしてくれっていう扱い。
- 209 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 18:31:15 ]
- 下位ビットを無視してくれるのはわざわざAND取ってアライメントする必要がないから楽でいいよな。
- 210 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 18:38:09 ]
- 中を作る側もデコーダが軽くなるからウマー
- 211 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 01:17:59 ]
- >>205
> >>204 > CPUによるが > struct foo { > char a; > double b; > }; > でパディングが入らなかったら例外起きるだろうが。 なぜ勝手にdoubleが入ってるんだww 誰もそんな場合の話はしていない。 団子にこんな基本的なことで嘘つき呼ばわりされたが嘘じゃないってことで >>185 > struct{char value;} array[0x100];
- 212 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 01:46:59 ]
- ところでパディングの入らない環境ってどんな環境だろ?
PC用で32bitプロセッサじゃ大抵入ると思うが。 sizeof(struct{char value;})==4 見たいにね。
- 213 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 02:10:47 ]
- struct{char value;} array[0x100];
printf("%d\n", sizeof(array)); => 256 gcc-4.3.2ではこうなったけど、パディングってそもそも何だ?無効領域?
- 214 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 02:48:14 ]
- >>212
Crayだとchar=short=int=32bitとかが普通らしい。 PC用じゃないけど。
- 215 名前:デフォルトの名無しさん mailto:age [2009/01/13(火) 17:31:55 ]
- >>213
ゴメン sizeof(struct{char value;})じゃ1だね。 sizeof(struct{char v1;short v2})じゃ4になったから試さずに 書いちゃった。メンバーが同じサイズなら配列化されるっぽいね。
- 216 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 19:04:45 ]
- 1つの構造体中でサイズ違いのアクセスが発生するかどうかによって変わるのじゃない。
連続の同一単位アクセスだけなら必要ないし、むしろ最適化にも邪魔だと思うんだよね? struct{char a;} arrayo[10]; struct{char a; char b;} arrayp[10]; struct{char a; char b; char c;} arrayq[10]; struct{char a; int b;} arrayr[10]; /* inserted */ struct{int a; char b;} arrays[10]; /* interted */
- 217 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2009/01/13(火) 21:09:54 ]
- 俺的に配列は__declspec(align(32))がデフォです
- 218 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 21:34:41 ]
- 32?
16じゃないのか?
- 219 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2009/01/13(火) 23:06:38 ]
- AVX化を視野に入れてるから
- 220 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 08:14:08 ]
- Alphaには16bitレジスタなかったよん
|

|