1 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 02:55:36 ] C++やインラインアセンブラ、SSEなどによる高速化の手法 について語りましょう。
367 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 02:33:02 ] >>365 Core2とi7を比較すると、とりあえずメモリが速いのと、デュアルコア*2からクアッドコアになったという利点が あるのはわかる i5はコア間でのやりとりがずいぶん遅いらしいので、場面によっては結構な影響を与えそう iシリーズになって各命令が要するクロックとかパイプライン周りは変わってないの?
368 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 03:50:34 ] >>367 >iシリーズになって各命令が要するクロックとかパイプライン周りは変わってないの? そのあたりは余り変わっていないと思われるが、大きく変わっているのはSSE4.2?(4.3だったか?)になっている。 メモリ周りと、キャッシュ周りが大きく変わっているので、iシリーズ用に最適化すると早くなるかもしれない。 iシリーズはQPIが速いので、Core2シリーズよりマルチプロセッサになったとき速い。 いずれにしてもメモリ帯域がボトルネックになりそうなプログラムを書くなら、 iシリーズを使った方がパフォーマンスが出る。 キャッシュに収まるレベルで、SSEの新機能を使わなければあまり変わらない。 今からならCore2Quadよりもi5の方がいいと思う。
369 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 04:17:10 ] i7って64bit時のパフォーマンスはどうなの?Core2より良いという話を聞くけど。
370 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 06:03:53 ] 良いと言われる理由は、Core 2と違ってMacro-Op Fusionが64ビットでも使えることだったと思う。
371 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 17:21:56 ] 2のx乗(xはfloat、絶対値が100未満)を、テーブル参照やFPUなしで、SSEで4並列処理できませんか? 精度は6bit程度で十分なんですが
372 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 20:19:58 ] 無理ぽ
373 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 20:23:04 ] jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html
374 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/09/09(水) 22:32:19 ] 整数乗なら簡単 指数部に加算するだけですむからな
375 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:51:39 ] お前ら文盲か? 可能なら方法を書け。 できないならできないと書く。 わからないなら黙って首吊って死ね。
376 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:56:14 ] で、それは4並列可能なの?
377 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/09/09(水) 23:12:26 ] 整数+小数点以下にわけて 整数部は指数部直接操作 あと小数点以下はpshufbで勝つる
378 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:19:12 ] 釣りにすらならねえ。。。
379 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 00:03:24 ] >>373 これ凄いですね VS2005では_mm_castがないようなので、*(__m128i*)&に直してコンパイルを通しました 自前で用意した64kBのテーブルがばっさり不要になりました log10を求める処理もあるので、log2のソースと底の変換を使うことでこのテーブルもなくなりました 書き忘れでSSE2までという条件がありましたが、これも満たしていました 完璧です。ありがとうございました
380 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 00:11:34 ] あれ。Debugだと上手くいきますが、Releaseだと0とか負の無限大になってしまいますね 直接アセンブラに落として使います
381 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 00:34:34 ] 連カキ失礼します Releaseだと、__m128への代入の時点でスタックが何バイトがずれるようです この後でカウンタを1加算する処理がありますが、0に1を足して1になるはずが-2になっていてびっくりしました _m128をグローバル変数に置いたら直ったので、とりあえずこれで誤魔化します
382 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 00:35:11 ] おい!テーブル使わん言ったじゃねえかよ。死ねカス。
383 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 01:30:43 ] >>382 >>373 > Polynomial
384 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 08:35:36 ] >>382 は本当にカスだな
385 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 01:21:58 ] >>382 テーブルと多項式の比較だから、下の方を見てみよう。
386 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 03:31:44 ] 頻繁に整数を6で割った余りを使うプログラムなんですが、 除算が1回40クロック以上もかかると聞いて以下のようなロジック組んでみました。 試してみると若干早くなってるような気もしますが、 これは効率的って言えますかね?
387 名前:デフォルトの名無しさん [2009/10/08(木) 03:33:43 ] unsigned int mod6(unsigned int m){ unsigned int a = 0; static unsigned int x[] = {0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4}; __asm{ mov eax, m test eax, 1 jz Mod3 inc a Mod3: shr eax, 1 lea ebx, x mov edx, eax and eax, 0000ffffh shr edx, 16 add eax, edx mov edx, eax and eax, 0000003fh mov ecx, edx and edx, 00000fffh shr ecx, 12 shr edx, 6 add eax, ecx add eax, edx mov edx, eax and eax, 0000000fh shr edx, 4 add eax, edx mov edx, x[eax*4] add a, edx } return a; }
388 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 03:38:11 ] 条件分岐入れるくらいなら素直に割れ。
389 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 03:47:13 ] 考え方としては、偶数ビットシフトしても3で割った余りは変わらない (ただしシフトして消える部分に立ってるビットがない場合のみ)のを利用します。 まず2の剰余を取った後、値を半分にして6の剰余から3の剰余の問題に変えます。 上位16ビットと下位16ビットを加算して17ビットに落とし、 6ビット/6ビット/5ビットに分割して加算して8ビットに落とし、 上位4ビットと下位4ビットに分割して加算して5ビットに落とし、 最後にテーブル参照して、その時点の3の剰余の2倍の値に変換して 最初の2で割った余りを足します。
390 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 03:59:17 ] >>388 条件分岐ダメですか? もう一個レジスタ使って mov edi, eax and edi, 00000001h … add edx, edi mov a, edx ってやり方にもできますが。
391 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 04:44:47 ] x[]を読みに行く方が遅い説
392 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 07:17:20 ] ・6割り算は本当にボトルネックか。 他にどうしようもなく遅い処理があるなら6割り算は無視していいはず。 6割り算だけする関数を作ってそれを呼ぶようにし、インライン展開を抑制してプロファイルを取るくらいはすべき。 ・6割り算の代わりに6掛け算は使えないか。 つまり、データの持ち方を工夫して高速化したい処理全体で6で割った商と余りを利用するようにすれば割り算は無視できるはず。 余りも要らないなら、メモリコストも増えないだろう。 ・値域はどのくらいか。配列参照で代用できないか。 値域が16ビット程度なら高高数十キロのメモリしか使わないで実現できる。巧くキャッシュに乗れば、速いかもしれない。
393 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 08:35:44 ] 実に適切なレスだな、感動した
394 名前:デフォルトの名無しさん [2009/10/08(木) 09:07:56 ] 結論 人間よりコンパイラの方が賢い
395 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 09:18:27 ] コンパイラを作ってる人たちより賢いユーザは極少数
396 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 12:56:15 ] とも限らない
397 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 14:35:29 ] ゆとりはRDTSCの使い方も知らんのか
398 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 14:50:11 ] ちょっと面倒
399 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:58:42 ] 逆数乗算で商を求めて元の値から引いたほうが速い 今のCore MAでは整数乗算は浮動小数除算機と兼用してて 非除数 − (除数×小数点以下切り捨てた商) まあベンチ取ってみればわかるがコンパイラの吐くコードにも勝てんと思う
400 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:59:25 ] 整数 ×乗算は ○乗算は 浮動小数除算機と兼用してて
401 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:45:39 ] static const int rcp6 = 1.0 / 6.0 * std::pow(2.0,16.0); int x = 255 - ((255 * rcp6) >> 16) * 6; 確かにこれで十分な気がするし、>>387 より速そうだ。
402 名前: ◆0uxK91AxII mailto:sage [2009/10/08(木) 18:41:36 ] 結果を使う40clk程度過去に除算を投げておくとか:b
403 名前:387 mailto:sage [2009/10/08(木) 21:02:29 ] 申し訳ないけど俺のレベルが低すぎてまったく理解できん。 >>399 その「小数点以下切り捨てた商」はどうやって出したらいいの? >>401 … 考え方だけでも教えて欲しい。
404 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:55:29 ] ここはアホしかいないからビット演算スレで適当に質問した方がいいよ
405 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:57:06 ] >>403 x / 6 = x * 1 / 6 これで、除算がなくなる。 ただ、1/6は小数点数になるから、整数演算じゃ表現出来ない。 >>399 は、整数演算も少数演算もコストは同じだから少数でやれと。 >>401 は、一時的に2^16倍してるだけ。 >その「小数点以下切り捨てた商」はどうやって出したらいいの? std::floor(x * 1.0 / 6.0)
406 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:29:32 ] 手持ちのコンパイラで int hoge(int a) { return a % 6; } をコンパイルしてasm吐かせてみてよ div使われてないと思うよ
407 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:14:01 ] VC9だとこうなった。 // const int x = argc%6; mov ecx, DWORD PTR _argc$[esp-4] mov eax, 715827883 ; 2aaaaaabH imul ecx mov eax, edx shr eax, 31 ; 0000001fH add eax, edx lea eax, DWORD PTR [eax+eax*2] add eax, eax mov edx, ecx sub edx, eax ↓このブロックでargc/6を計算しているようだが、意味不明w mov eax, 715827883 ; 2aaaaaabH imul ecx mov eax, edx shr eax, 31 ; 0000001fH add eax, edx つーか、eax * 3を計算するのに、LEAを使うのか。すげーなオイ。
408 名前:387 mailto:sage [2009/10/08(木) 23:24:00 ] VC6だと確かにDIV使ってたんですが… 今VS2008インストールしてみたら確かに>>407 みたいな感じでした。 符号なしの場合で、一部整理すると(popとかも省略) __asm{ mov ecx, DWORD PTR [m] mov eax, 0aaaaaaabH mul ecx mov eax, ecx shr edx, 2 lea ecx, [edx+edx*2] add ecx, ecx sub eax, ecx ret 0 } ぐはっ、まったく意味がわかりません!
409 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:45:46 ] VC5あたりで整数定数除算は掛け算になってたはず 剰余は確かめたことないな・・・ 意味だけど、64bit固定小数点数で、小数点が32bit位置にあると考えると (0x1_0000_0000 / 6) を掛けることは 6 で割ることになるでしょ んでもって6掛けて元の数から引けば剰余になる leaの計算は3倍してて、その後自身とのaddで2倍、都合6倍 >コンパイラを作ってる人たちより賢いユーザは極少数 ときどきasm吐かせてみたりしないと浦島太郎になるね。
410 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:50:55 ] mingw32 gcc 4.4.0 _hoge: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl $6, %edx movl %edx, %ecx cltd idivl %ecx movl %edx, %eax leave ret あれ?
411 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:53:54 ] マヌケなコンパイラだと大変ですね(^^)
412 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/09(金) 00:08:33 ] 64ビット整数の3の剰余を分岐も乗算使わずにハイパー高速に求めるアルゴリズム n ^= n >> 32; n ^= n >> 16; n ^= n >> 8; n ^= n >> 4; n ^= n >> 2; n &= 3; n ^= ((n&1) << 1) | (n >> 1); 後半はLUT使ったほうが速いかもな
413 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/09(金) 00:15:01 ] んで6の剰余ってこれでいいよな? mod3(n >> 1) * 2 + (n & 1)
414 名前:デフォルトの名無しさん [2009/10/09(金) 01:24:41 ] >>387 inline unsigned int mod6(unsigned int a){ unsinged int b = (a >> 3) + (a >> 5); // /6 unsinged int c = (b << 1) + (b << 2); // *6 return a - c; }
415 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 01:49:37 ] >>414 mod6 : 65536 % 6 = 4096 C : 65536 % 6 = 4 mod6の/6が0.15625と、精度が悪いせいか?
416 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/09(金) 02:02:30 ] その通り
417 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/09(金) 02:09:39 ] でもまあショートカットとしては十分優秀だよ SSEを用いた3の剰余のショートカット方法 movq xmm0, rcx pxor xmm1, xmm1 psadbw xmm0, xmm1 movd ecx, xmm0 これで64ビットが11ビットくらいに縮まる
418 名前:414 [2009/10/09(金) 02:22:00 ] >>415 //もうすこし高精度版 inline unsigned int mod6(unsigned int a){ unsigned int b = a >> 1; unsigned int c = b + (b >> 2); unsigned int d = c + (c >> 4); unsigned int e = d + (d >> 8); unsigned int a_div6 = e + (e >> 16) - b; unsigned int a_div6_mul6 = (a_div6 << 1)+(a_div6 << 2); return a - a_div6_mul6; }
419 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 02:33:18 ] あんたらよくやるよ templateで、任意除数版を作ってくれたら 俺様のライブラリに加えてやってもよいぞよ
420 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 02:34:59 ] >>419 コードが膨らんでキャッシュの効きが悪くなりそう
421 名前:,,・´∀`・,,)っ-○○○ [2009/10/09(金) 03:27:52 ] >>417 GCC4.4で-O3 -march=core2でコンパイルして なぞの某パイプラインシミュレータ通したらトータルレイテンシ20サイクル, スループット10サイクルって出た 俺の>>412-413 使った方法だとレイテンシ18と6 後半テーブル化すればもう少し減りそう 0, 1, 2, 3になったときに3だけを0に丸めるためだけにあほなビット演算やってるが なんとかならんかな
422 名前:-〇〇〇 mailto:sage [2009/10/09(金) 10:10:58 ] >>412 は嘘ですたorz シフト+加算ならいけるんだが
423 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:19:23 ] 団子かわいいよ団子
424 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:26:12 ] signedだが 妙に凝ったことやるよりこれが一番速いだろ inline int mod6(int n) { return n - (_mm_cvttsd_si32(_mm_mul_sd(_mm_set_sd(n), _mm_set_sd(1.0/6))) * 6); }
425 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:44:48 ] mm...mmmとか読みにくくてかなわん DirectXみたいなセンスが欲しい
426 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:05:31 ] ……?
427 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:56:58 ] これがエスパー戦争の始まりである
428 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:59:45 ] 結論 inline int mod6(unsigned int n) { return n%6; } でおk
429 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/11(日) 03:12:20 ] unsignedだとLSB保存して1ビット右シフトすればsignedで扱える あとは>>424 の方法でmod3を求めて2倍してLSB足せばOK 整数ベースでやるにはレイテンシ1の命令だけでなんとか工夫しないと ちなみにpsadbwはレイテンシ3だからイマイチ 解説してなかったけどpsadbwが使える理由は mod3(A * 2^24 + B * 2^16 + C * 2^8 + D) = mod3(A + B + C + D) だから。 A * 256 + B = (A * 255) + A + B
430 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/11(日) 04:20:21 ] まあしかし、6の剰余程度だといずれの方法も大した意味は無いな www.wikihouse.com/x86clocker/index.php?div%CC%BF%CE%E1%A4%CE%A5%EC%A5%A4%A5%C6%A5%F3%A5%B7
431 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 05:07:16 ] CedarMillの88クロックってひどいな。
432 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:07:44 ] AMDがいきなりパなしてきたが・・・ ttp://developer.amd.com/CPU/LIBRARIES/LIBM/Pages/default.aspx
433 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/12(月) 21:27:20 ] この手のはIntelコンパイラに標準で付いてきてるんだがな。まあ有償だが。 どのみちプロプライエタリならGPL/LGPLには組み込めん。
434 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:23:36 ] >>432 こういうのはコンパイラがチート使ってくれなきゃ 威力半減な気がするんだが、どうなのかね?
435 名前:デフォルトの名無しさん [2009/10/12(月) 23:26:12 ] それをするのがコンパイラの仕事だろ
436 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/12(月) 23:28:45 ] AMDは自社コンパイラを持ってないからな(あのお粗末なAMD Stream SDK以外)
437 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 22:23:37 ] スカラなんかどうでもいいよ。 SIMDをどうにかしろバカIntel。
438 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/14(水) 23:00:54 ] SIMDでどうにかしろ
439 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:11:17 ] SIMDとか用語が嫌になる しむど! かっこわるー
440 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/16(金) 01:12:15 ] ネイティブはシムディーって言ってるぞ
441 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:27:21 ] MMX むむっくす! かっこわるー ネイティブでは?
442 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:21:57 ] えめめくす
443 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:57:46 ] かっこわるー
444 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 04:41:05 ] はいはい無限再帰無限再帰 66 e8 fc ff
445 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:55:00 ] かっこいいと思った用語 XMS EMS VMS なんと!最後にMSが付く・・・・
446 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:58:17 ] あっちがっ・モビルスーツ!だからね! まい・・・・じゃないんだからね! 誤解しないでよね! ↓死ねよガンオタしないでよね!!
447 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/10/18(日) 00:00:55 ] >>445 腹筋運動マシン?
448 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 00:15:39 ] XMS EMS VMS IMS OMS UMS SMS
449 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:55:15 ] Large Middle Small
450 名前: ◆0uxK91AxII mailto:sage [2009/10/20(火) 22:20:34 ] Long, Middle, Short corn.
451 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:58:29 ] CMS忘れるなよ Chinko Manko, Sexだけどな
452 名前:237 mailto:sage [2009/10/21(水) 21:12:39 ] 久しぶりにスレをのぞいてみたら、昔の自分のスレを発見。 そういや、こんなことしてたな。 団子さん、その節はお世話になりました。 あれからマシンもcore i7に代えたのでせっかくだからSSE4.2をためしてみた。 当たり前だけどやっぱり専用命令は速いね。 ところで_mm_popcnt_u32は使えたのに_mm_popcnt_u64はnot declared in this scopeって言われちゃった。 OSとかgccが32bitなのがいけないのかしら?
453 名前:,,・´∀`・,,)っ-○◎○ mailto:sage [2009/10/21(水) 21:18:27 ] 64bit専用です
454 名前:237 mailto:sage [2009/10/21(水) 21:28:49 ] func = reference :clock = 14540000 func = bit32 :clock = 1710000 func = bit64 :clock = 4620000 func = sse :clock = 680000 func = dango-sse :clock = 430000 func = sse42:clock = 270000 文字数制限うぜぇ。削るのに手間取っちまった。しかも微妙にずれてるし。
455 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 21:32:01 ] >>453 どもです。 世間がwindows 7 で64bitへ本格的に移行してくれることを期待してまつ。
456 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:07:47 ] C/C++でメモリプール(int, doubleなど様々な型が共存)を作り、 メモリプール内部でメモリの詰め直しを行って最適化しようと試みています。 入門書+α(boostがわかるぐらい)なので、 キャッシュやメモリに関する特殊なことは全然わかりません。 何か気をつけなければならないことや忠告があれば教えてください。
457 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:23:42 ] >>456 メモリのことを知らずにどうやって最適化する気なのかね?
458 名前:456 mailto:sage [2009/10/22(木) 04:45:35 ] 高速化が必要というわけではなくて、ガベージコレクションの宣伝文を見て 興味本位に詰め直しをやってみようと思いました。 空き領域を整えるだけでなく、アドレス配置を上手くソートすれば キャッシュヒット率の向上ができると思いますが、それは難しいので 今回はプール内の空き領域を整えることだけに目的を留めて置きます。 プールはchar型の配列で確保し、memmove()でclassやプリミティブを 移動させる予定です。何か規則に反することなどがあれば教えてください。
459 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 05:00:47 ] そんな無駄な事をする意味がわからない
460 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 05:32:17 ] メモリコンパクションを実装するということは、 生ポインタから、ハンドル経由のアクセスに切り替えることになると思うけど
461 名前:456 mailto:sage [2009/10/22(木) 06:01:05 ] >>460 自作のスマートポインタを利用してアクセスを管理する予定になっています。 スマートポインタとコンパクションが同一のスレッドになければ危険ですが。
462 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 03:31:47 ] やってみりゃいいんじゃないの
463 名前: ◆0uxK91AxII mailto:sage [2009/10/23(金) 04:39:52 ] 下手の考え休むに似たり。
464 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 04:48:37 ] バウンダリに気を付けろよ
465 名前:456 mailto:sage [2009/10/23(金) 17:53:10 ] アライメント(構造体のサイズをバイトorワード境界に調整)はsizeof(...)使えば済むと思う。 でも開始アドレスもバイトorワード境界に調整する(これがバウンダリ?)のは知らなかった。
466 名前:456 mailto:sage [2009/10/24(土) 01:53:17 ] いや、アライメントを制御することをバウンダリと呼ぶという記事を見つけた。 だとすれば開始アドレスは特に気をつけることはないはず……。
467 名前:デフォルトの名無しさん [2009/10/24(土) 02:02:00 ] 他人に伝わらず、自分もよくわからない言葉を使うのは、とりあえずやめよう