タグ付けされた質問 「optimization」

最適化とは、方法または設計を改善することです。プログラミングでは、最適化は通常、アルゴリズムの速度を上げるか、必要なリソースを減らすという形を取ります。最適化のもう1つの意味は、機械学習で使用される数値最適化アルゴリズムです。


8
パフォーマンスの観点からstd :: memcpy()またはstd :: copy()を使用する方が良いですか?
memcpy以下に示すように使用する方が良いstd::copy()ですか、それともパフォーマンスの観点から使用する方が良いですか?どうして? char *bits = NULL; ... bits = new (std::nothrow) char[((int *) copyMe->bits)[0]]; if (bits == NULL) { cout << "ERROR Not enough memory.\n"; exit(1); } memcpy (bits, copyMe->bits, ((int *) copyMe->bits)[0]);

7
Rubyで文字列を作成するときに、シャベル演算子(<<)が正等号(+ =)よりも優先されるのはなぜですか?
私はRuby Koansに取り組んでいます。 about_strings.rbのtest_the_shovel_operator_modifies_the_original_stringKoanには、次のコメントが含まれています。 Rubyプログラマーは、文字列を作成するときに、プラスの等号演算子(+ =)よりもシャベル演算子(&lt;&lt;)を優先する傾向があります。どうして? 私の推測では速度が関係していると思いますが、ショベルオペレーターの速度を上げるフードの下での動作は理解できません。 誰かがこの設定の背後にある詳細を説明できますか?

3
std :: stringの文脈での頭字語SSOの意味
では、最適化とコードのスタイルについてC ++質問、いくつかの答えは、のコピーを最適化する文脈で「SSO」を参照しましたstd::string。そのコンテキストでSSOはどういう意味ですか? 明らかに「シングルサインオン」ではありません。「共有文字列の最適化」でしょうか。
155 c++  string  optimization 

20
一方(1)対 for(;;)速度の違いはありますか?
ロングバージョン... より速いwhile (1)Perlスクリプトでの私の使用を見て、同僚が今日主張しましたfor (;;)。インタプリタが違いを最適化することを期待して、それらは同じであるべきだと私は主張しました。ループの反復と同じ数のwhileループで1,000,000,000を実行し、その間の時間を記録するスクリプトを設定しました。それほど大きな違いはありませんでした。私の同僚は、教授がwhile (1)比較1 == 1をしているfor (;;)ので、そうではないと彼が言ったと言った。C ++での100倍の反復回数で同じテストを繰り返しましたが、違いはごくわずかでした。ただし、これは、スクリプト言語と比較してコンパイルされたコードがどれだけ高速になるかを示すグラフィックの例でした。 短縮版... 抜け出すために無限ループが必要な場合に、while (1)よりも優先する理由はありますfor (;;)か? 注:質問から明確でない場合。これは、友人同士での純粋に楽しい学術的な議論でした。これは、すべてのプログラマーが悩むべき超重要な概念ではないことを認識しています。私(そして他の人も)がこの議論からいくつかのことを学んだ素晴らしい答えをすべてありがとう。 更新:前述の同僚は、以下の返答を検討しました。 埋もれる場合に備えて、ここに引用されています。 AMDアセンブリプログラマからのものです。彼は、Cプログラマ(人々)は自分のコードが非効率であることを理解していないと述べました。彼は本日言ったが、gccコンパイラーは非常に優れており、彼のような人々を廃業させた。たとえば彼は言って、while 1vs について教えてくれましたfor(;;)。私は今それを習慣から使用していますが、gccと特にインタープリターは最適化されているため、これらの両方の日に同じ操作(プロセッサーのジャンプ)を実行します。

30
その行または列に0が含まれている場合、行列のすべてのセルを0に設定します。
この投稿を改善してみませんか?この質問に対する詳細な回答を提供します。これには、引用と、回答が正しい理由の説明が含まれます。詳細が不十分な回答は編集または削除される場合があります。 0と1を持つNxN行列が与えられます。含まれているすべての行を設定し0、すべてに0Sをし、含まれているすべての列セット0すべてに0秒。 例えば 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 結果は 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 …

5
もしあれば、C ++コンパイラーが末尾再帰の最適化を行いますか?
CとC ++の両方で末尾再帰の最適化を行うことは完全にうまくいくように思えますが、デバッグ中は、この最適化を示すフレームスタックが表示されないようです。スタックが再帰の深さを教えてくれるからです。ただし、最適化も同様によいでしょう。 C ++コンパイラーはこの最適化を行いますか?どうして?何故なの? コンパイラーに指示する方法を教えてください。 MSVCの場合:/O2または/Ox GCCの場合:-O2または-O3 コンパイラが特定のケースでこれを行ったかどうかを確認するのはどうですか? MSVCの場合、PDB出力がコードをトレースできるようにしてから、コードを検査します GCC ..? 特定の関数がコンパイラーによってこのように最適化されているかどうかを判断する方法については引き続き提案します(Konradがそれを想定するように指示していることを確信しているにもかかわらず) 無限再帰を行って無限ループまたはスタックオーバーフローが発生するかどうかを確認することで、コンパイラーがこれを実行するかどうかを常に確認することができます(GCCでこれを実行し、それで-O2十分であることがわかりました)。とにかく終了することがわかっている特定の機能をチェックできます。これをチェックする簡単な方法が欲しいです:) いくつかのテストの後、デストラクタがこの最適化を行う可能性を台無しにしていることを発見しました。特定の変数と一時オブジェクトのスコープを変更して、return-statementが始まる前にスコープから外れるようにすることは、価値がある場合があります。 末尾呼び出しの後にデストラクタを実行する必要がある場合、末尾呼び出しの最適化は実行できません。

7
ブラウザタブにフォーカスがあるかどうかを検出する
タブにフォーカスがあることを検出する信頼できるクロスブラウザーの方法はありますか? このシナリオでは、株価を定期的にポーリングするアプリケーションがあり、ページにフォーカスがない場合、ポーリングを停止して、特に人々がさまざまなポートフォリオで複数のタブを開くことのファンである場合に、トラフィックノイズを節約できます。 であるwindow.onblurとwindow.onfocus、このためのオプション?

8
「Else」のないJavaScriptの三項演算子
私はいつもnull何もないelse条件を置かなければなりませんでした。とにかく周りにありますか?例えば condition ? x = true : null; 基本的に、行う方法はありますか: condition ? x = true; 今度は構文エラーとして表示されます 参考までに、ここにいくつかの実際のサンプルコードがあります: !defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;


19
スタックサンプリングを超えて:C ++プロファイラー
ハッカーの物語 日付は12/02/10です。クリスマスの前の日々がどんどんどろどろになっていて、私はWindowsプログラマーとして大部分の主要な障害にぶつかりました。私はAQTimeを使用しており、眠くて、光沢があり、非常に眠いので、VTuneをインストールしています。私はVS2008プロファイラーを使用しようとしましたが、積極的に罰せられているだけでなく、多くの場合無意味です。私はランダムな一時停止テクニックを使用しました。呼び出しツリーを調べました。関数のトレースを開始しました。しかし、悲しいことに、私が使用しているアプリは100万行を超えるコードであり、おそらく数百万行に相当するサードパーティのアプリが含まれています。 より良いツールが必要です。 私は他のトピックを読みました。 各トピックにリストされている各プロファイラーを試しました。単にこれらのジャンキーで高価なオプションよりも優れたもの、またはほとんど利益が得られない途方もない量の作業でなければなりません。問題をさらに複雑にするために、コードは大量にスレッド化され、いくつかのQtイベントループを実行します。それらのループの一部は非常に壊れやすく、タイミングの遅延が原因で重いインスツルメンテーションの下でクラッシュします。複数のイベントループを実行している理由を聞かないでください。誰にも言えません。 Windows環境でValgrindに沿ったオプションはありますか? 私がすでに試した長い壊れた道具よりも良いものはありますか? Qtと統合するために設計されたものはありますか、おそらくキュー内のイベントの便利な表示と一緒ですか? 私が試したツールの完全なリスト、およびイタリックで本当に役立つツール: AQTime:かなり良いです!深い再帰には問題がありますが、コールグラフはこれらの場合に正しく、混乱を解消するために使用できます。完璧なツールではありませんが、試してみる価値はあります。それはあなたのニーズに合うかもしれません、そしてそれは確かに私にとってほとんどの場合十分でした。 デバッグモードでのランダムな一時停止攻撃:十分な情報が不足しています。 優れたツールですが、完全なソリューションではありません。 Parallel Studios: 核となるオプション。目障りで、奇妙で、とてつもなく強力です。30日間の評価を上げて、適切かどうかを判断する必要があります。それもすごくかっこいいです。 AMD Codeanalyst: 素晴らしい、使いやすく、クラッシュしやすいですが、それは環境問題だと思います。無料なので試してみることをお勧めします。 ルーク・スタックウォーカー:小さなプロジェクトでうまく機能します。それを私たちのプロジェクトで機能させるのは少し困難です。しかし、いくつかの良い結果があり、それは間違いなく私の個人的な仕事のためのスリーピーを置き換えます。 PurifyPlus: Win-x64環境はサポートされません。最も目立つのはWindows 7です。それ以外は優れています。他の部門の多くの私の同僚はそれを誓います。 VS2008プロファイラー:関数トレースモードで必要な解像度で100ギグ以上の範囲の出力を生成します。プラス面では、確かな結果が得られます。 GProf:GCCが適度に効果的であることを要求します。 VTune:VTuneのW7は犯罪者の国境をサポートしています。そうでなければ優れている PIN:自分のツールを改造する必要があるので、これは最後の手段です。 Sleepy \ VerySleepy:小さいアプリに便利ですが、ここでは失敗します。 EasyProfiler:インストルメントする場所を示すために手動で挿入されたコードを少しでも気にしなければ問題ありません。 Valgrind:* nixのみですが、その環境では非常に優れています。 OProfile:Linuxのみ。 プロフィール:彼らは野生の馬を撃ちます。 私が試していない推奨ツール: XPerf: グローコード: Devpartner: 注: 現在のところIntel環境。VS2008、ブーストライブラリ。Qt 4+。そして、それらすべての惨めなhumdinger:trolltechによるQt / MFC統合。 現在:ほぼ2週間後、私の問題は解決したようです。リストにあるほぼすべてのものや、いくつかの個人的なトリックなど、さまざまなツールのおかげで、主要なボトルネックが見つかりました。ただし、新しいプロファイラと新しい技術のテスト、調査、試行を続けます。どうして?君たちが借りているからだ、君たちがロックしているから。タイムラインが少し遅くなりますが、私は新しいツールを試し続けることに非常に興奮しています。 概要 他の多くの問題の中で、最近、多くのコンポーネントが誤ったスレッドモデルに切り替わり、その下にあるコードが突然マルチスレッドでなくなったために深刻なハングアップが発生しました。私のNDAに違反しているのでこれ以上は言えませんが、これは何気ない検査や通常のコードレビューによってさえ発見されなかったと言えるでしょう。プロファイラー、コールグラフ、ランダムな一時停止を併用しなくても、美しい空の青い円弧に怒りを叫び続けます。ありがたいことに、私は今まで会ったことのない最高のハッカーと仕事をしており、素晴らしい「素晴らしいツールと素晴らしい人々でいっぱいの詩」にアクセスできます。 ジェントルフォーク、私はこれを非常に感謝しています。そして、私があなた一人一人に報奨金を報いるほどの担当者がいないことを後悔しているだけです。これは、SOでこれまでに得たものよりも良い答えを得るための重要な質問であるとまだ思います。 その結果、次の3週間は毎週、私ができる最大の報奨金を上げて、常識ではないと思う最高のツールを使って回答にそれを与えます。3週間後、私の罰を許していただければ、プロファイラーの明確なプロファイルが蓄積されていると思います。 テイクアウト プロファイラーを使用します。それらはリッチー、カーニハン、ベントレー、クヌースにとって十分なものです。私はあなたがあなたが誰だと思うかは気にしません。プロファイラーを使用します。あなたが持っているものが機能しない場合は、別のものを見つけてください。見つからない場合は、コーディングしてください。コードを作成できない場合や、ちょっとした電話が切れた場合、または行き詰まった場合は、ランダムな一時停止を使用してください。他のすべてが失敗した場合、プロファイラーを強打するためにいくつかの大学院生を雇います。 …

30
あなたが見た中で最もばかげた悲観論は何ですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 早すぎる最適化はすべての悪の根源であることは誰もが知っています。さらに悪いのは悲観化です。誰かが「最適化」を実装すると、それはより高速になると考えられますが、遅くなり、バグが多く、メンテナンスが困難になります。 ?

5
(a%256)が(a&0xFF)と異なるのはなぜですか?
私が(a % 256)書い(a &amp; 0xFF)たかのように、オプティマイザを実行すると自然に効率的なビット単位の演算が使用されるといつも思っていました。 コンパイラエクスプローラgcc-6.2(-O3)でテストする場合: // Type your code here, or load an example. int mod(int num) { return num % 256; } mod(int): mov edx, edi sar edx, 31 shr edx, 24 lea eax, [rdi+rdx] movzx eax, al sub eax, edx ret そして、他のコードを試すとき: // Type your code here, …
145 c++  optimization 

12
シールドクラスは本当にパフォーマンス上のメリットを提供しますか?
パフォーマンスをさらに向上させるには、クラスをシール済みとしてマークする必要があるという、多くの最適化のヒントを見つけました。 パフォーマンスの違いを確認するためにいくつかのテストを実行したところ、何も見つかりませんでした。私は何か間違ったことをしていますか?密封されたクラスがより良い結果をもたらすケースを見逃していますか? 誰かがテストを実行して違いを見ましたか? 学ぶのを手伝ってください:)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.