- 1 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 09:54:14 ]
- コンパイラ性能、コンパイルオプション、コードの最適化などについて語りましょう。
主に速度面の最適化を中心としますが、サイズなどの最適化もどうぞ。 なお、OS、CPU、コンパイラなどは限定しません 前スレ C、C++の最適化について語るスレ pc11.2ch.net/test/read.cgi/tech/1084676298/
- 666 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:10:12 ]
- 特に最適化しなければ volatile だから
全て volatile なコンパイラはあっても volatile 無視するコンパイラは少なそうか?
- 667 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/05(土) 21:18:00 ]
- 元の意味が「揮発性」だっけ。
規格準拠をうたうコンパイラで、そういうのは聞いたことはない。 まあ、そういう処理系を作ろうと思えば作れるんじゃないの?
- 668 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:30:53 ]
- こうですか?
#define volatile
- 669 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/05(土) 21:35:44 ]
- __declspec(align(32)) みたいなのを規格化してほしーな
- 670 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:37:09 ]
- アラインメント関連は C++0x にもう入ってるだろ?
- 671 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/05(土) 21:44:14 ]
- どっちかというとCに入れて欲しいんだが
- 672 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:45:40 ]
- それは確かにw
- 673 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:05:57 ]
- ダンゴさんの書き込みへのレスのすばやさは宇宙一とおもわれるほどだな
- 674 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/05(土) 22:11:24 ]
- 673 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
- 675 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:14:57 ]
- メモリバリアはcpuか評価環境で変わってくるんじゃないの?
ほとんどosにそれを通知するような機構があると思うんだけど。 javaのvolatileはそれを保証するものになるらしいが。
- 676 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:14:20 ]
- 本当に意味のある最適化が仕様的に禁止されてる言語に対して何期待してるんだ?
実質的に高級アセンブラじゃん, 言語仕様が…
- 677 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:58:13 ]
- なんか、また変なのが涌いてきたぞ...
- 678 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 22:59:17 ]
- まぁマテ、じっくり話を聞いたらなんてこたぁない普通の話かもしれん。
聞きたかないが。
- 679 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 07:19:16 ]
- ポインタがあるせいで禁止される最適化の話じゃないのかな?
- 680 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 00:27:34 ]
- >>666
gccに-fvolatileと-fvolatile-globalってオプションがあったらしい。 前者はポインタからの間接参照、後者はグローバル変数の参照を 全てvolatile扱いするというもの。 見付けたドキュメントは古そうなのだったから、 最近のgccにもあるかどうかは知らないけど。
- 681 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:08:47 ]
- スレが静まり返ったな
- 682 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:27:33 ]
- 組み込み行きたい、.net開発とかいやだよもう
- 683 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:39:41 ]
- >>682
私と一緒に働きましょう! 就職フェアでお待ちしてます。
- 684 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:48:52 ]
- 後置インクリメント/デクリメントなんて消えればいいのに
- 685 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:51:04 ]
- 消えてるし
- 686 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:59:31 ]
- 後置インクリメントを使ってるソースは消えればいい
特にパラメータ化された型のインスタンスに対して使ってるやつ
- 687 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:15:41 ]
- 一時オブジェクトが必要になるしな。
- 688 名前:後置インクリメント mailto:sage [2008/04/21(月) 12:57:17 ]
- わたしのこと、そんなに嫌い・・・?
- 689 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 17:35:02 ]
- むしろ後置の動作が前置になって前置がなくなればいいと思う
- 690 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 19:52:26 ]
- それもそうだな。
- 691 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 20:20:52 ]
- >>683
もう働いてるんだって、前は自動車のOSとかやってた
- 692 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:06:12 ]
- >>691
最近だとトヨタさんががんばってるみたいだけどあれどうよ?
- 693 名前:683 mailto:sage [2008/04/22(火) 00:09:19 ]
- あー、うちの課の私の隣のチームがトヨタさんのシステムやってますね。
# 私は非組み込み。
- 694 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 20:25:12 ]
- 実際他社のそれってあんま知らない
というか正直1年もいないで他のチームいったからな あの数ヶ月は楽しかった Javaを経てそっちいって今は標準化()わらいチームだ
- 695 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:36:24 ]
- むしろ標準化の方がよっぽどいきたくないな、いい会社ならやりがいありそうではあるが・・
- 696 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 12:07:43 ]
- 自分のソースを貼ったら最適化してくれるスレってある?
- 697 名前:デフォルトの名無しさん [2008/04/27(日) 12:18:53 ]
- 張ってみ
- 698 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 14:07:48 ]
- 貼るなら普通にSourceForgeとかに置いて、
その辺のスレで添削のお願いとかした方がいいんじゃね? 運が良ければバグとか直してくれる暇人とか来るだろうし。
- 699 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 14:11:20 ]
- >>696
数学板とかいくとアルゴリズムレベルで最適化してくれるが # 早い話、俺はどこまでアフォなのかを教えてくれる
- 700 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 14:52:19 ]
- 2次元拡散方程式の最強のコードを教えてください
- 701 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:53:20 ]
- >>700
貴方がこれから知ったことをすべて教えてくれるのなら...
- 702 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:04:29 ]
- >>700
ちょっと調べて見たけど、隣り合うところとしか計算しないから 並列化することで計算速度はあがりそうに思える。 しかし単純にスレッド化しても、パフォーマンスがあがるわけではない。 なぜならCPUのキャッシュにヒットするかどうかが鍵になるので キャッシュ漏れが発生するような並列化をしてしまうと ペナルティが発生してしまうためである。 またL2キャッシュ漏れが発生して当然というぐらい大量の要素数について 計算するのであれば、並列化することで高速化は図れると思うが やってみないとわからないし、環境に依存する。 よって最強を求めるならば 要素数や初期条件で最適化は変わるのは当然なので 何がやりたいかちゃんとかかないとだめ。
- 703 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:30:26 ]
- 最強 == 汎用
汎用 != 最強
- 704 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:52:26 ]
- キャッシュ漏れってなんだ?
- 705 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:59:10 ]
- キャッシュミスのことかな?
- 706 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/30(水) 19:54:07 ]
-
- 707 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 22:42:56 ]
- >>702
「ラムダ持ち上げとかやって本当にグローバルに取らなきゃいけない変数は まとめて局所的に集約した形でヒープに、そうでない変数はスタックに取る」 とか 「計算方法と使用可能なリソースを分析して配列自体の要素のならびを スパースに取る(CPU n 個いれば, キャッシュラインサイズ * n で集めら れるように配列を配置しておいて, N スレッドに自動配分する」 ってのが、賢いコンパイラ 高級アセンブラの C とか C++ とかは上記のような最適化を許されない言語 仕様が結構あると思うんだが… # 結構がんばってるんだけどな, 大規模並列用の C コンパイラ # だけど fortran とか, チューニングされた lisp 系言語には負けてるよな
- 708 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 22:53:26 ]
- 下手に最適化しすぎるとgccに対するLinusみたいにボロクソ言われるしな。
言語仕様として低レベルと高レベルを同じ次元で扱ってるのが問題。
- 709 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 00:28:06 ]
- スピルアウト?
- 710 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 00:29:48 ]
- 誤爆
- 711 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 01:22:32 ]
- キャッシュミスのことです。L2キャッシュに乗らない場合のことね。
アセンブラ無しのCと計算目的に最適化されてる言語と比較したら Cには軍配あがらないよなー てか、それでCのほうが早かったらその言語の意味ないし。 Cにこだわらないで目的に応じたツールを使うってのは 研究者としては全然ありだと思う。 最近のコンパイラは割りと賢くなってきて、 固定値になる場合は計算した結果を使ってくれるようになったけど 基本C言語ってそういうのは実装する人が考えて実装するのであって 最適化はしてくれたらラッキーぐらいのものが多い。 あくまでもC/C++のフレームワークの範囲での最適化といったら コンパイル結果がどれぐらい小さくなるか考えたりとか、 わざとキャッシュにヒットしないようにデータを配置するとか その程度だろうし。 あとはそういう計算に向いている汎用ライブラリを使う。OpenMPとか。 で、本当の本当に最適化したかったらアセンブラになってしまい すれ違いになってしまうという。
- 712 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 01:36:27 ]
- そういうのに向いている高級言語って何?
アセンブラってマイクロレベルじゃよいと思うけど大域的には無理じゃない?
- 713 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 01:38:22 ]
- FORTRANなんか最適化に有利なんじゃないか
- 714 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 08:04:49 ]
- > 最近のコンパイラは割りと賢くなってきて、
> 固定値になる場合は計算した結果を使ってくれるようになったけど > 基本C言語ってそういうのは実装する人が考えて実装するのであって > 最適化はしてくれたらラッキーぐらいのものが多い。 いったいいつの時代の人なんだ?
- 715 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 10:28:08 ]
- VCなんかは最近はセキュリティオプション強化してるから
最適化とは逆の方向にいってるよね。 #define SECURE_SCL 0 つければ大丈夫みたいだけど、 知らないと最新の最適化するコンパイラを使っているはずなのに パフォーマンスが落ちる。 コンパイラの努力をライブラリが無駄にしてるわけですよ。 あとCの最適化って基本的に書いて見てコンパイルさせて アセンブラ見て最適化されてるか確認して初めてわかるものじゃない? バージョンがかわったりオプションかわったりすれば コードが変わるから、それが正しいかどうか判断できないし。 ちょっと上にも誰かが書いてあるけど、最適化するには条件があって その条件をちょっとでも外れると最適化されないし。 どこまで要求するかで話変わるし 最適化と一言でいっても人によって受け止め方は違うんですよ 自分は最適化してくれたらラッキーぐらいのコードを書くことが大半ですから 最適化がそのプログラムの根幹に関わるようなことはあんまりないです。 ある場合はSSEの出番だし。 自分にとっての最適化はアセンブラだし 人によってはいかにコピーを発生させないかというレベルのものだろうし 研究用との人なんかは結果が速く出れば計算機資源は関係ない人もいるだろうし ただ、下手なコード書いても速くならないこともしっている。 コンパイラも賢いからね。
- 716 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 10:32:15 ]
- コンパイラは何を使ってる?
- 717 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 11:05:25 ]
- まぁ、SSE使うのも今のコンパイラだったら当然視野に入っているしね。
一番困るのは、「forよりwhileが速い」とか「[]で書くより*で書くほうが速い」と言った古い流儀を引き摺ることだったり。 特にiccのようなコンパイラは、典型的なforの使い方をした場合により最適化するようだしね。
- 718 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 11:43:37 ]
- >>707, >>711, >>715, >>717
ネットかなんかで見たこと書いてるだけなんだろうけど、微妙に理解力が 足りない感が痛々しいな。
- 719 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 11:46:55 ]
- inline fortranはまだか
- 720 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 11:47:46 ]
- extern "FORTRAN" のほうが欲しい
- 721 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 11:59:21 ]
- >>718
どこが足りないのか指摘してください。 勉強になるんで。
- 722 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:46:37 ]
- 「微妙」とか「感」という表現からして、あんまり期待はできないかと。
自分のふとした思いつきとか、「何となくそんな気がする」というフィーリングが、 この世の何かを「ピタリ当てている」と信じたい、そういう年頃ってあるでしょ。
- 723 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:50:00 ]
- 48歳位か
- 724 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:53:26 ]
- 実際、人によっては一生モノではあるね。
- 725 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:26:25 ]
- >>718
715の最適化についてのレスを書いたのは俺だが 715はメインがSSEとかアセンブラって言ってるから的を外してないと思うぞ。 >>719, 720 俺の経験上、ベクトル化はマジ信用出来ない。 有効に働くのは全要素に単純に四則演算と超越関数を与えるときだけだから 融通のきかなさはGPU以上。 ぶっちゃけそんな単純なコードならCでfor回したって読みにくくならないし、gccもVC++もベクトル化してくれるんだよ。 ただその他のレジスタの使い方とかインライン化みたいな 帯域的な最適化は賢いから高級アセンブラとしては依然有効。 あとcomplexをベクトル化するのも面倒くさいから有効。
- 726 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:33:25 ]
- 分かりにくかったな。
俺は715じゃなくて、715が参照してる最適化についてのレスを書いた人。 んで、超越関数はgccやVC++ではベクトル化出来ないから 単純な計算式に超越関数が入ってる時はIntelのコンパイラが有効。 まあそれにしたって対象が全要素じゃない事も多いし 結局自分でSSEで書いてる。
- 727 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 18:02:55 ]
- 丁度今日はとあるメモリアクセスを伴うロジックで最適化オプションをいろいろ試してた。
-- gccのオプション→ なし -O -O2 -O3 Xeon w/icc 旧アルゴリズム(SoA) 1.06 0.71 0.82 0.98 0.05 新アルゴリズム(SoA) 0.16 0.12 0.06 0.06 0.03 新アルゴリズム(AoS) 0.42 0.10 0.03 0.02 0.02 -- 旧アルゴリズムは何故かO2以降で遅くなるし、 新アルゴリズムは最適化しない場合を除きAoSの方が速いし。 最後のXeonを除くと、他はPen4なのでその所為なのかも知れず。 つーか、折角の新アルゴリズムの効果がXeonだとあんまり目立たないのねん。
- 728 名前:デフォルトの名無しさん [2008/05/01(木) 19:11:21 ]
- Xeonだからって10倍も速くなるものだらうか。
gcc/icc の違いによるのではないだらうか。
- 729 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/01(木) 19:47:09 ]
- ベクトル化でうまくはまれば10倍も十分ありうる。
- 730 名前:727 mailto:sage [2008/05/01(木) 21:56:39 ]
- 新アルゴリズムはgccとiccの(時間的な)差は出ませんでしたね。
結論から言えば、CPUをWoodcrestXeonにしてiccをv10にして-Xtにすればもう少し速くなるのだけれど。
- 731 名前:デフォルトの名無しさん [2008/05/02(金) 08:00:07 ]
- 超越関数ってexpとか?
- 732 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 09:14:14 ]
- 超越数でぐぐれ
- 733 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 09:35:06 ]
- キャッシュのヒット率大きいんじゃあないか
- 734 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 12:20:26 ]
- キャッシュベンチしてもねえ
- 735 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 12:34:02 ]
- キャッシュにヒットするようにコンパクトにするっていうのも
最適化の一つだけどね。 ベンチが自分のやりたいことにあってるかどうかが重要。
- 736 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 14:00:19 ]
- キャッシュサイズがどんどん大きくなってるから
そういうチューンは無駄かも
- 737 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/02(金) 14:52:38 ]
- L1は増えない
- 738 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 17:56:58 ]
- 何でAMDは、Intel C++ Compilerみたいなの出さないのかなぁ・・・。
- 739 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:23:18 ]
- ライフがすでにマイナスだから(笑)
- 740 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:01:04 ]
- 2のベキ乗間隔でメモリアクセスするとキャッシュミスヒットしやすいと、RS6000だかの説明にあった。
- 741 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:11:24 ]
- うん、キャッシュラインが上書きされる可能性が高くなって、キャッシュに存在する可能性が下がって効率が悪くなるからだね。
- 742 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:48:56 ]
- 結論: メモリアクセスは素数間隔で行うべし
- 743 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:58:27 ]
- 系)配列のサイズ(一番下)を2の冪にしてはいけない
- 744 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 22:10:12 ]
- そうは言ってもループバッファとか扱ってると余りは求めたくないしねえ。
- 745 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 22:13:08 ]
- ループ?
全部展開しろカス
- 746 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 22:14:31 ]
- リングバッファって言えばいいか。
- 747 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 22:24:15 ]
- 2のべき乗の配列を取りたいなら、
セットのサイズ(キャッシュサイズをセット数で割った数)の倍数のアクセスが増えると効率が悪くなるので、計算順序を変えるとかでそれを外せばOK。 セットのサイズに満たない配列は気にする必要はないかな。
- 748 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:43:03 ]
- >>747
セットってのは, コンパレータの個数で ok? でもって、ラインサイズと素な数で戦えば ok と言ってる?
- 749 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:45:49 ]
- 間違ってた
ラインサイズxコンパレータ数と素な数
- 750 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 09:40:56 ]
- >>748
下の絵でアドレスでコーダがセットのライン数になる upload.wikimedia.org/wikipedia/ja/d/d2/Read_4waycache.png 素因数にラインサイズxライン数が含まれると効率が下がる。 でもラインサイズに合わせるのは正解なので、ラインサイズx素数または、ラインサイズx(ライン数を因数として含まない数)がいいんじゃないかな。
- 751 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:37:21 ]
- int[][]こんな感じのデータ構造に対する
効率化の手法まとめたページどこにいったっけ?
- 752 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:48:51 ]
- if(n % 2 == 0) n / 2
if(n % 2 == 1) n * 3 + 1
- 753 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/23(金) 21:03:06 ]
- int *[]にして列を都度割り当てすれば・・・
- 754 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:58:30 ]
- ダンゴさんの書き込みでスレがdat落ちの危機に瀕したな。
- 755 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:13:09 ]
- ダンゴさん兄弟
- 756 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:20:12 ]
- やはり皆、半月以上レスが無くてもスレ見てるんだなw
- 757 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:23:33 ]
- 専ブラ使っているんで、レスがあれば一目で分かります。
- 758 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:26:11 ]
- 風呂から出てチンチンブラブラしてますたー
- 759 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:26:30 ]
- それは非専ブラ組の発想ではないかな。
専ブラ組からすれば、新着レスのあるスレを一覧上部に集めて順に見ていく作業の一過程。 つまりdat削除しない限り、忘れてても縁は切れない。新着レスがあるたび、こうして思い出すことになるw
- 760 名前:126 mailto:sage [2008/05/24(土) 01:27:29 ]
- う、かぶった。
実際、専ブラによって色々とスタイル変わってくるよね。 ・・・良いんだか悪いんだかわからないけどw
- 761 名前:759=760 mailto:sage [2008/05/24(土) 01:29:48 ]
- ごめん、名前間違えた。
これも専ブラならではか?(マウスホイールしちゃって、前回別の場所で使った名前が出た)。
- 762 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:34:00 ]
- ずっともぐってたスレが一度あがって半端におちてると見失うw
- 763 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 08:35:41 ]
- そういう時は履歴!
- 764 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 14:05:25 ]
- 代々木の
カレーライスうまいよね
- 765 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:36:24 ]
- uint64_tの値を
16bitずつ小分けに取得したいのですが 何型にキャストするのが正しいのですか?
- 766 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:16:39 ]
- uint16_t でええんちゃう?
そもそも、質問の意図が、そう言う話とはちゃってる?
- 767 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:24:12 ]
- union知らんのって話でしょ
- 768 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:25:12 ]
- >>765
キャストは最後の手段にしようぜ。 ふつうに u64 & 0xffff, (u64 >> 16) & 0xffff, .... でいいでしょ。
- 769 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:49:17 ]
- ここは最適化のスレだから、一番最適化がかかりそうな
方法を聞いているに違いない。 配列としてアクセスするのが一番期待できるかな?
- 770 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:55:12 ]
- >>769
動作保証が無けりゃ問題外でしょ。ビットシフトで取り出すように書いとけば、 コンパイラが勝手に 16 ビットずつメモリから読み出すように最適化することも できるだろうし。むしろメモリへのアクセスを陽に書かないほうが早い可能性もある。
- 771 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 03:03:50 ]
- union
- 772 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:12:11 ]
- >>767,771
エンディアンに依存したらダメじゃね?
- 773 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:14:54 ]
- そんなあなたに #if
- 774 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:18:29 ]
- 最適化するんだからマシン固有の癖(エンディアン)に
依存する問題まで考えて移植性を重視する必要ねーだろ
- 775 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:19:09 ]
- それぞれの環境ごとに最適化すればいい
- 776 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2008/06/14(土) 00:43:50 ]
- pextrwで(ry
- 777 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:49:04 ]
- bswapも(ry
- 778 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:34:01 ]
- 小分けしたいだけなんだからエンディアン考えなくてもいいんじゃないかと思う
- 779 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 22:31:12 ]
- union 使うなら考えんといかんだろ?
そもそも今時のプロセサならバレルシフタぐらいは積んでるだろうから、 >>768 で十分だと思うが。
- 780 名前:デフォルトの名無しさん [2008/06/17(火) 08:53:09 ]
- ビット演算だけで、剰余を求める方法を教えてください
- 781 名前:デフォルトの名無しさん [2008/06/17(火) 08:58:26 ]
-
646 名前:デフォルトの名無しさん[] 投稿日:2008/01/23(水) 21:06:35 割り算を掛け算とビットシフトに置き換える計算式求めるプログラムできた #include <iostream> using namespace std; main(){ unsigned int N,n,k; for(N=2; N<65000 ; N++){ for(n=0; (1<<n)<N ; n++); n+=15; double X=(pow(2,n)/N); unsigned int Y=(unsigned int)X; unsigned int d=0; if(X-Y<=Y+1-X)d=(unsigned int)(pow(2,n)- (N-1)*Y)-1; else Y++; printf("x /%5d = ( x * %5d + %5d ) >> %2d",N,Y,d,n); for(k=1; k<(1<<16) ; k++) if(k/N != ((k*Y+d)>>n))break; if(k==(1<<16))printf(" OK\n"); else printf(" ERR\n"); }} 647 名前:646[] 投稿日:2008/01/24(木) 15:42:18 64bit機か、内部で64bitまで計算結果を保持しているなら 32bitの割り算も出来るけど646は16bit同士です
- 782 名前:デフォルトの名無しさん [2008/06/17(火) 08:59:56 ]
- 2^n の剰余 とそれに近い数の剰余は簡単にも止まる。
- 783 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:37:14 ]
- 止めんなw
- 784 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:51:07 ]
- >>780
あらかじめ除数がわかってないと>>781は使えないよ。
|

|