[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 04/29 12:09 / Filesize : 46 KB / Number-of Response : 221
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C++】高速化手法【SSE】



1 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 02:55:36 ]
C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。

191 名前:,,・´∀`・,,)っ-●◎○ [2009/01/11(日) 06:05:36 ]
>>189
構造体やその配列の場合、パディングが入る。
デフォルトが4バイト単位だったかな?

192 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 10:18:30 ]
おまえほんとにだんごか?
デフォルトなんて決まってるわけ無いだろ

193 名前:,,・´∀`・,,)っ-●◎○ [2009/01/11(日) 10:25:51 ]
まあデフォルト値は処理系依存だな。

>>189の言ってることが嘘ってことで。
少なくともパディングが入らない保障はない。

194 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 10:51:19 ]
コンパイラ依存だよな。
歴史的な理由で当時の最長のレジスタがdoubleだからCPUのアライメントが8byte推奨で、コンパイラも8byteに詰めてた気が。
もしかしたらx86じゃなくてPowerPCかも知れん。

195 名前:デフォルトの名無しさん [2009/01/11(日) 14:47:57 ]
VCやGCC辺りはパディングが入る。
Bitmapヘッダをそのまま構造体で読み取ろうとして引っかかった
やつも少なくない筈。(VCならpragmaを使えばパディングを消すことができる)
一応32bitCPUならVC、GCC共にcharもshortも32bitで確保される。
64bitなら64bitで確保されるとか聞いたことがあるが真偽は不明。
蛇足だが、VCでchar array[5];などと確保すると確保した容量+3
の領域が確保される。

196 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 15:41:20 ]
kikyou.info/diary/?200812#i24_1
> つまり最大でポインタ二つ分のデータを保持しています。LP64の場合は128bitとなります。ILP32の場合は64bitとはならず、パディングの関係でLP64と同じく128bitとなります。
8byte?

197 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 15:44:14 ]
将来AVXの1024bit SIMDが使えるようになった際に、128byteにパディングされるとかなるとイヤだな。
その頃にはメモリは数十GBで128byteなんてゴミみたいなもんだろうけど。

198 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2009/01/11(日) 15:47:54 ]
その頃までにSIB.scaleのビット拡張してほしいね。1ビット増やせばx16, x32, x64, x128になるのに。

199 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 15:59:23 ]
\  \\       ____         // / /
<           _-=≡:: ;;   ヾ\            >
<         /          ヾ:::\           >
<         |            |::::::|          >
<        ミ|-=≡、 ミ≡==- 、 |;;;;;/          >
<         || <・>| ̄| <・> |── /\         >
<         |ヽ_/  \_/    > /         >
<        / /(    )\      |_/          >
<        | |  ` ´        ) |           >
<        | \/ヽ/\_/  /  |           >
<        \ \ ̄ ̄ /ヽ  /  /           >
<          \  ̄ ̄   /  /       \    >
  / /        ̄ ̄ ̄ ̄ ̄ ̄ ̄     \\ \ \
     ___
   / ―\ ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウ
 /ノ  (@)\ ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョウホウレンゲッキ
.| (@)   ⌒)\ ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョウホウレンゲッ
.|   (__ノ ̄|  |   ///;ト,  ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョ
 \   |_/  / ////゙l゙l;  ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョ
   \     _ノ   l   .i .! |  ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョ
   /´     `\ │   | .|  ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョ
    |       | {   .ノ.ノ  ナンミョウホウレンゲッキョウナンミョウホウレンゲッキョウナンミョ
    |       |../   / . ナンミョウホウレンゲッキョウ




200 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:40:28 ]
パディングってむやみに入れるとキャッシュヒット率悪くなってかえって効率落ちたりしないんだろか


201 名前:,,・´∀`・,,)っ-●◎○ [2009/01/12(月) 00:42:04 ]
逆にキャッシュラインを跨ぐと効率悪くなるんだよ


202 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:44:50 ]
>>200-201
どっちも一般論だー

場合によるでしょ

203 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:58:25 ]
実測すれば済む話

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レジスタなかったよん






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<46KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef