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

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

3
「as-if」ルールとは正確には何ですか?
タイトルの通り、 「as-if」ルールとは正確には何ですか? 典型的な答えは次のとおりです。 プログラムの監視可能な動作を変更しない、あらゆるコード変換を許可するルール 時々、このルールに起因する特定の実装から動作を取得し続けます。何度も間違って。だから、このルールは正確には何ですか。この規格では、この規則がセクションまたは段落として明確に言及されていないため、この規則の範囲に正確に該当するものは何ですか?私には、標準で詳細に定義されていない灰色の領域のように見えます。誰かが標準からの参照を引用して詳細を詳しく説明できますか? 注:これはCとC ++の両方としてタグ付けします。これは、両方の言語に関連するためです。
89 c++  c  optimization  c++-faq  as-if 

12
匿名関数の使用はパフォーマンスに影響しますか?
私は疑問に思っていましたが、Javascriptで名前付き関数と無名関数を使用することの間にパフォーマンスの違いはありますか? for (var i = 0; i < 1000; ++i) { myObjects[i].onMyEvent = function() { // do something }; } vs function myEventHandler() { // do something } for (var i = 0; i < 1000; ++i) { myObjects[i].onMyEvent = myEventHandler; } 1つ目は、めったに使用されない関数でコードが乱雑にならないため、より整理されていますが、その関数を複数回再宣言することは重要ですか?

1
なぜこのHaskellコードは-Oで遅くなるのですか?
このHaskellコードは、を使用すると実行速度が大幅に低下しますが-O、危険で-Oはありません。誰が何が起こったのか教えてもらえますか?それが重要な場合は、この問題を解決する試みであり、バイナリ検索と永続セグメントツリーを使用します。 import Control.Monad import Data.Array data Node = Leaf Int -- value | Branch Int Node Node -- sum, left child, right child type NodeArray = Array Int Node -- create an empty node with range [l, r) create :: Int -> Int -> Node create l r | l …

4
Haskellには末尾再帰最適化がありますか?
今日、UNIXで「time」コマンドを発見し、Haskellの末尾再帰関数と通常の再帰関数のランタイムの違いを確認するのに使用すると思いました。 私は以下の関数を書きました: --tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac' 1 y = y fac' x y = fac' (x-1) (x*y) --normal recursive facSlow :: (Integral a) => a -> a facSlow 1 = 1 facSlow x = x * …



8
なぜ演算子はメソッド呼び出しよりもはるかに遅いのですか?(構造体は古いJITでのみ遅くなります)
イントロ: 私はC#で高性能コードを書きます。はい、C ++を使用すると最適化が向上することはわかっていますが、それでもC#を使用することにしました。私はその選択について議論したくありません。むしろ、私のように、.NETFrameworkで高性能のコードを書き込もうとしている人たちから話を聞きたいと思います。 質問: 以下のコードの演算子が同等のメソッド呼び出しよりも遅いのはなぜですか? 以下のコードで2つのdoubleを渡すメソッドが、内部に2つのdoubleを持つ構造体を渡す同等のメソッドよりも速いのはなぜですか?(A:古いJITは構造体の最適化が不十分です) .NET JITコンパイラに単純な構造体を構造体のメンバーと同じくらい効率的に処理させる方法はありますか?(A:新しいJITを入手してください) 私が知っていると思うこと: 元の.NET JITコンパイラは、構造体を含むものをインライン化しませんでした。奇妙な与えられた構造体は、組み込みのように最適化されるべきであるが本当である小さな値型が必要な場合にのみ使用されるべきです。幸い、.NET3.5SP1と.NET2.0SP2では、特に構造体のインライン化の改善など、JITオプティマイザーにいくつかの改善が加えられました。(そうでなければ、彼らが導入した新しいComplex構造体がひどく実行されたので、彼らはそれをしたと思います...したがって、ComplexチームはおそらくJIT Optimizerチームをドキドキしていました。)したがって、.NET 3.5SP1より前のドキュメントはおそらくこの問題にはあまり関係ありません。 私のテストが示すこと: C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dllファイルのバージョンが3053以上であることを確認することで、新しいJITオプティマイザーがあることを確認しました。 JITオプティマイザに。しかし、それでも、私のタイミングと分解の両方が示すものは次のとおりです。 2つのdoubleを持つ構造体を渡すためのJIT生成コードは、2つのdoubleを直接渡すコードよりもはるかに効率が低くなります。 構造体メソッドのJIT生成コードは、引数として構造体を渡す場合よりもはるかに効率的に「this」を渡します。 明らかにループ内にあるため、乗数を使用しても、2つのdoubleを含む構造体を渡すよりも、2つのdoubleを渡す方が、JITのインライン化が向上します。 タイミング: 実際、逆アセンブルを見ると、ループ内のほとんどの時間はリストからテストデータにアクセスしているだけであることがわかります。ループのオーバーヘッドコードとデータへのアクセスを考慮に入れると、同じ呼び出しを行う4つの方法の違いは劇的に異なります。PlusEqual(Element)の代わりにPlusEqual(double、double)を実行すると、5倍から20倍のスピードアップが得られます。また、演算子+ =の代わりにPlusEqual(double、double)を実行する場合は10倍から40倍になります。ワオ。悲しい。 タイミングのセットは次のとおりです。 Populating List<Element> took 320ms. The PlusEqual() method took 105ms. The 'same' += operator took 131ms. The 'same' -= …

8
なぜGDBは行間を予期せずジャンプし、変数を「<valueoptimizedout>」として出力するのですか?
誰かがgdbのこの動作を説明できますか? 900 memset(&amp;new_ckpt_info,'\0',sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 …

11
符号なしバイトの飽和減算/加算
私は2つの符号なしバイトを持っている想像bしてx。bsubasb - xとbaddasを計算する必要がありb + xます。ただし、これらの操作中にアンダーフロー/オーバーフローが発生することは望ましくありません。例(擬似コード): b = 3; x = 5; bsub = b - x; // bsub must be 0, not 254 そして b = 250; x = 10; badd = b + x; // badd must be 255, not 4 これを行うための明白な方法には、分岐が含まれます。 bsub = b - min(b, x); badd …

3
最尤法で推定された係数をスターゲイザーテーブルに取得します
Stargazerは、lm(およびその他の)オブジェクト用の非常に優れたラテックステーブルを作成します。最尤法でモデルを近似したとします。スターゲイザーに見積もり用のlmのようなテーブルを作成してもらいたいのですが。これどうやってするの? 少しハッキーですが、1つの方法は、私の見積もりを含む「偽の」lmオブジェクトを作成することかもしれません。summary(my.fake.lm.object)が機能する限り、これは機能すると思います。それは簡単に実行できますか? 例: library(stargazer) N &lt;- 200 df &lt;- data.frame(x=runif(N, 0, 50)) df$y &lt;- 10 + 2 * df$x + 4 * rt(N, 4) # True params plot(df$x, df$y) model1 &lt;- lm(y ~ x, data=df) stargazer(model1, title="A Model") # I'd like to produce a similar table for the model below …
83 r  optimization  lm  stargazer 

9
Pythonジェネレーターを使用するのに適した時期ではないのはいつですか?
これは、Pythonジェネレーター関数を何に使用できるかという逆です。:Pythonジェネレーター、ジェネレーター式、およびitertoolsモジュールは、最近のpythonの私のお気に入りの機能の一部です。これらは、大量のデータに対して実行する一連の操作を設定するときに特に役立ちます。DSVファイルを処理するときによく使用します。 それで、それはいつですか 、ジェネレーター、ジェネレーター式、またはitertools関数を使用するのが適切ないのですか? ときに私が好むはずですzip()以上itertools.izip()、または range()以上xrange()、または [x for x in foo] 以上 (x for x in foo)? 明らかに、最終的にはジェネレーターを実際のデータに「解決」する必要があります。通常は、リストを作成するか、ジェネレーター以外のループでリストを反復処理します。長さを知る必要がある場合もあります。これは私が求めているものではありません。 中間データ用に新しいリストをメモリに割り当てないように、ジェネレータを使用します。これは、特に大きなデータセットに適しています。小さなデータセットにも意味がありますか?顕著なメモリ/ CPUのトレードオフはありますか? リスト内包表記のパフォーマンスとmap()およびfilter()の目を見張るような議論に照らして、誰かがこれについてプロファイリングを行った場合は特に興味があります。(代替リンク)

4
'perf stat'の結果のstalled-cycles-frontendおよびstalled-cycles-backendとは何ですか?
perf statの結果で、stalled -cycles-frontendとstalled-cycles-backendの意味を知っている人はいますか?インターネットで検索しましたが、答えが見つかりませんでした。ありがとう $ sudo perf stat ls Performance counter stats for 'ls': 0.602144 task-clock # 0.762 CPUs utilized 0 context-switches # 0.000 K/sec 0 CPU-migrations # 0.000 K/sec 236 page-faults # 0.392 M/sec 768956 cycles # 1.277 GHz 962999 stalled-cycles-frontend # 125.23% frontend cycles idle 634360 stalled-cycles-backend # 82.50% …

20
最適化が時期尚早なのはいつですか?
クヌースが言ったように、 効率が小さいこと、たとえば約97%の場合は忘れてください。時期尚早の最適化は、すべての悪の根源です。 これは、「最も効率的なループメカニズムはどれですか」、「SQL最適化手法」などの質問に対するStackOverflowの回答でよく出てくるものです。(など)。これらの最適化のヒントの質問に対する標準的な答えは、コードのプロファイルを作成し、それが最初に問題であるかどうかを確認することです。問題がない場合は、新しい手法は不要です。 私の質問は、特定の手法が異なっていても、特にあいまいまたは難読化されていない場合、それは本当に時期尚早の最適化と見なすことができるかということです。 これは、RandallHydeによるTheFallacy of PrematureOptimizationという関連記事です。

4
インラインアセンブリコメントを追加すると、GCCで生成されたコードにこのような根本的な変更が生じるのはなぜですか?
だから、私はこのコードを持っていました: constexpr unsigned N = 1000; void f1(char* sum, char* a, char* b) { for(int i = 0; i &lt; N; ++i) { sum[i] = a[i] + b[i]; } } void f2(char* sum, char* a, char* b) { char* end = sum + N; while(sum != end) { *sum++ = …

7
Java文字列からすべての印刷不可能な文字を取り除く最速の方法
StringJavaで印刷できない文字をすべて削除する最速の方法は何ですか? これまでのところ、138バイト、131文字の文字列で試して測定しました。 文字列replaceAll()-最も遅いメソッド 517009結果/秒 パターンをプリコンパイルしてから、Matcherを使用します replaceAll() 637836結果/秒 StringBufferを使用し、codepointAt()1つずつ使用してコードポイントを取得し、StringBufferに追加します 711946結果/秒 StringBufferを使用し、charAt()1つずつ使用して文字を取得し、StringBufferに追加します 1052964結果/秒 char[]バッファを事前に割り当て、charAt()1つずつ使用して文字を取得し、このバッファを埋めてから、文字列に変換し直します 2022653結果/秒 char[]古いバッファと新しいバッファの2つのバッファを事前に割り当て、を使用して既存の文字列のすべての文字を一度に取得しgetChars()、古いバッファを1つずつ繰り返し、新しいバッファを埋めてから、新しいバッファを文字列に変換します-私自身の最速バージョン 2502502結果/秒 2つのバッファを持つ同じもの-のみを使用しbyte[]、getBytes()エンコーディングを「utf-8」として指定します 857485結果/秒 2つのbyte[]バッファを持つ同じものですが、定数としてエンコーディングを指定しますCharset.forName("utf-8") 791076結果/秒 2つのbyte[]バッファを持つ同じものですが、エンコーディングを1バイトのローカルエンコーディングとして指定します(ほとんど正気ではありません) 370164結果/秒 私の最善の試みは次のとおりでした: char[] oldChars = new char[s.length()]; s.getChars(0, s.length(), oldChars, 0); char[] newChars = new char[s.length()]; int newLen = 0; for (int j = 0; j &lt; s.length(); j++) { …

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