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

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

6
MySQLテーブルにインデックスを追加するにはどうすればよいですか?
約150,000行のデータを含む非常に大きなMySQLテーブルがあります。現在、実行してみると SELECT * FROM table WHERE id = '1'; IDフィールドがプライマリインデックスであるため、コードは正常に実行されます。しかし、プロジェクトの最近の進展のために、別のフィールドでデータベースを検索する必要があります。例えば: SELECT * FROM table WHERE product_id = '1'; このフィールドは以前に索引付けされていませんでした。ただし、1つ追加したので、mysqlはフィールドにインデックスを付けますが、上記のクエリを実行しようとすると、実行速度が非常に遅くなります。EXPLAINクエリにより、product_idフィールドに既にインデックスを追加している場合、インデックスがないことがわかります。その結果、クエリは20分から30分で1つの行を返します。 私の完全なEXPLAIN結果は次のとおりです。 | id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra | +----+-------------+-------+------+--------------+------+---------+------+-------+------------------+ | 1 | SIMPLE | table | ALL | …


20
importステートメントは常にモジュールの一番上にあるべきですか?
PEP 08の状態: インポートは常にファイルの先頭、モジュールのコメントとドキュメント文字列の直後、モジュールのグローバルと定数の前に置かれます。 しかし、インポートしているクラス/メソッド/関数がまれにしか使用されない場合、必要なときにインポートを実行する方が確かに効率的ですか? これではない: class SomeClass(object): def not_often_called(self) from datetime import datetime self.datetime = datetime.now() これより効率的ですか? from datetime import datetime class SomeClass(object): def not_often_called(self) self.datetime = datetime.now()

24
最長の固定長6整数配列
Stack Overflowの別の質問(この質問)に答えると、興味深い副問題に遭遇しました。6つの整数の配列をソートする最も速い方法は何ですか? 質問は非常に低いレベルなので: ライブラリが利用可能である(および呼び出し自体にコストがかかる)とは想定できません。プレーンなCのみです。 (コストが非常に高い)命令パイプラインが空になるのを避けるために、分岐、ジャンプ、およびその他すべての種類の制御フローの中断(&&またはのシーケンスポイントの背後にあるものなど)を最小限に抑える必要があり||ます。 部屋には制約があり、レジスタとメモリの使用を最小限に抑えることが問題です。理想的には、並べ替えが最善です。 本当にこの質問は、ソースの長さを最小化することではなく、実行時間を目標とする一種のゴルフです。マイケル・アブラッシュとその続編による『Zen of Code optimization』という本のタイトルで使用されているように、私はそれを「Zening」コードと呼んでいます。 なぜそれが興味深いのかについては、いくつかの層があります: この例はシンプルで理解しやすく、測定も簡単で、Cのスキルはそれほど必要ありません これは、問題に対して適切なアルゴリズムを選択した場合の効果だけでなく、コンパイラーと基礎となるハードウェアの効果も示しています。 これが私のリファレンス(素朴で最適化されていない)の実装とテストセットです。 #include <stdio.h> static __inline__ int sort6(int * d){ char j, i, imin; int tmp; for (j = 0 ; j < 5 ; j++){ imin = j; for (i = j + 1; i < 6 …

4
コピーの省略と戻り値の最適化とは何ですか?
コピーエリクションとは何ですか?(名前付き)戻り値の最適化とは何ですか?彼らは何を意味しますか? どのような状況で発生する可能性がありますか?制限とは何ですか? この質問を参照された場合は、おそらく導入部を探しているでしょう。 技術概要については、標準リファレンスを参照してください。 一般的なケースについては、こちらをご覧ください。

29
Javaでマップ値をインクリメントする最も効率的な方法
この質問がこのフォーラムにとってあまりにも基本的であるとは考えられないことを願っていますが、わかります。何度も実行されているパフォーマンスを向上させるために、コードをリファクタリングする方法を知りたいです。 Map(おそらくHashMap)を使用して単語頻度リストを作成しているとします。各キーは、カウントされている単語を含む文字列であり、値は、単語のトークンが見つかるたびに増加する整数です。 Perlでは、そのような値を増やすのは簡単です。 $map{$word}++; しかし、Javaでは、はるかに複雑です。ここで私が現在やっている方法: int count = map.containsKey(word) ? map.get(word) : 0; map.put(word, count + 1); もちろん、どちらが新しいJavaバージョンのオートボクシング機能に依存しています。そのような値を増やすより効率的な方法を提案できるかどうか疑問に思います。コレクションフレームワークを避け、代わりに何か他のものを使用することには、パフォーマンス上の理由さえありますか? 更新:いくつかの回答のテストを行いました。下記参照。

7
ループの順序が2D配列を反復するときにパフォーマンスに影響するのはなぜですか?
以下は、iとj変数を入れ替えた以外はほぼ同じ2つのプログラムです。どちらも異なる時間で実行されます。なぜこれが起こるのか誰かが説明できますか? バージョン1 #include <stdio.h> #include <stdlib.h> main () { int i,j; static int x[4000][4000]; for (i = 0; i < 4000; i++) { for (j = 0; j < 4000; j++) { x[j][i] = i + j; } } } バージョン2 #include <stdio.h> #include <stdlib.h> main () { int i,j; …

30
N以下のすべての素数をリストする最速の方法
これは私が思いつく最高のアルゴリズムです。 def get_primes(n): numbers = set(range(n, 1, -1)) primes = [] while numbers: p = numbers.pop() primes.append(p) numbers.difference_update(set(range(p*2, n+1, p))) return primes >>> timeit.Timer(stmt='get_primes.get_primes(1000000)', setup='import get_primes').timeit(1) 1.1499958793645562 さらに速くできますか? このコードには欠陥があります。numbersは順序付けられていないセットであるnumbers.pop()ため、セットから最小数を削除する保証はありません。それにもかかわらず、それはいくつかの入力番号に対して(少なくとも私にとっては)機能します: >>> sum(get_primes(2000000)) 142913828922L #That's the correct sum of all numbers below 2 million >>> 529 in get_primes(1000) False >>> 529 in …

4
Intel SandybridgeファミリCPUのパイプライン用のプログラムの最適化解除
私はこの割り当てを完了するために一週間頭を悩ませてきました、そして私はここの誰かが正しい道に向かって私を導くことを望んでいます。インストラクターの指示から始めましょう: あなたの割り当ては、素数プログラムを最適化することでした最初のラボの割り当ての逆です。この割り当ての目的は、プログラムを悲観的にすること、つまりプログラムの実行を遅くすることです。これらは両方ともCPUを集中的に使用するプログラムです。ラボPCでの実行には数秒かかります。アルゴリズムを変更することはできません。 プログラムを最適化解除するには、Intel i7パイプラインの動作方法に関する知識を活用してください。WAR、RAW、およびその他の危険性を導入するために命令パスを並べ替える方法を想像してみてください。キャッシュの効果を最小限に抑える方法を考えてください。悪魔のような能力がない。 この割り当てでは、砥石またはモンテカルロのプログラムを選択できました。キャッシュ効果のコメントは、ほとんどがWhetstoneにのみ適用されますが、私はモンテカルロシミュレーションプログラムを選択しました。 // Un-modified baseline for pessimization, as given in the assignment #include <algorithm> // Needed for the "max" function #include <cmath> #include <iostream> // A simple implementation of the Box-Muller algorithm, used to generate // gaussian random numbers - necessary for the Monte Carlo method below …


5
Vimを遅くしているプラ​​グインを確認するにはどうすればよいですか?
Vimプラグインをプロファイルする方法はありますか? 大きなものを開くと、MacVimが次第に遅くなります.py。すべてのプラグインの選択を解除し、1つずつ再選択して、どのプラグインが原因であるかを確認できることはわかっていますが、もっと速い方法はありますか? 私のdotvimはここにあります:https : //github.com/charlax/dotvim


8
glibcのstrlenをすばやく実行するには、なぜ複雑にする必要があるのですか?
ここでstrlenコードを調べていて、コードで使用されている最適化が本当に必要かどうか疑問に思っていましたか?たとえば、次のようなものが同等以上に機能しないのはなぜですか? unsigned long strlen(char s[]) { unsigned long i; for (i = 0; s[i] != '\0'; i++) continue; return i; } より単純なコードは、コンパイラーが最適化するのに優れていたり、簡単だったりしませんか? strlenリンクの背後にあるページのコードは次のようになります。 /* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn Granlund (tege@sics.se), with …


4
むかしむかしに>が<よりも速いとき…ちょっと待って、何?
私は読んでいます 素晴らしいOpenGLチュートリアルをいます。それは本当に素晴らしいです、私を信頼してください。私が現在取り組んでいるトピックはZバッファです。それが何であるかを説明するだけでなく、著者は、GL_LESS、GL_ALWAYSなどのカスタム深度テストを実行できることを述べています。深度値の実際の意味(上と下ではない)も可能であることも説明しています。カスタマイズ。私はこれまで理解しました。そして、著者は信じられないようなことを言っています: 範囲zNearは、範囲zFarより大きくすることができます。そうである場合、ウィンドウ空間の値は、ビューアから最も近いまたは最も遠いものを構成するものに関して逆になります。 以前は、ウィンドウ空間のZ値0が最も近く、1が最も遠いと言われていました。ただし、クリップ空間のZ値を無効にすると、深度1はビューに最も近く、深度0は最も遠くなります。ただし、深度テストの方向を逆にしても(GL_LESSからGL_GREATERなど)、まったく同じ結果が得られます。だから、それは本当に単なる慣習です。実際、Zの符号と深度テストを反転させることは、かつて多くのゲームにとって重要なパフォーマンス最適化でした。 私が正しく理解していれば、パフォーマンスに関して、Zの符号と深度テストを反転させることは、&lt;比較を比較に変更することに他なりません&gt;。だから、私が正しく理解していて、作者が嘘をついていたり、物事を構成していなかったりした場合は、重要な最適化に変更&lt;する&gt;、多くのゲームでした。 著者は、物事を作っている私が何かを誤解していますか、それはかつての場合、確かである&lt;(遅かった極めてよりも、著者が言うように、) &gt;? このかなり興味深い問題を明確にしてくれてありがとう! 免責事項:アルゴリズムの複雑さが最適化の主な原因であることを十分に承知しています。さらに、今日は間違いなく何の違いもないだろうと私は疑っています。これを最適化するように求めているわけではありません。私は非常に、苦痛に、おそらく法外に好奇心が強いのです。
280 c  optimization  opengl  cpu  gpu 

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