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

コードおよびアプリケーション効率の測定または改善に関する質問。

8
XMLでのAndroidonClickとOnClickListener
以前にも同じような言葉で質問されたことがあると思いますが、これは違います。私はAndroidアプリの開発にかなり慣れていないので、android:onclick=""XML属性とsetOnClickListenerメソッドの違いについて3つの質問があります。 2つの違いは何ですか?2つの実装の違いは、コンパイル時または実行時、あるいはその両方で見つかりますか? どのユースケースがどの実装に有利ですか? Androidでフラグメントを使用すると、実装の選択にどのような違いがありますか?

4
Rでループが遅いのはなぜですか?
ループが遅いので、R代わりにベクトル化された方法で物事を実行しようとする必要があることを私は知っています。 しかし、なぜ?ループが遅くてapply速いのはなぜですか?applyいくつかのサブ関数を呼び出します-それは速くはないようです。 更新:申し訳ありませんが、質問は不適切でした。ベクトル化とを混同していましたapply。私の質問は、 「なぜベクトル化が速いのですか?」
86 performance  r  apply 

3
列の共通値に基づいて、大きなデータフレームをデータフレームのリストに分割します
「ユーザー」のアクションを収集する10列のデータフレームがあり、列の1つにID(一意ではなく、ユーザーを識別する)が含まれています(列10)。データフレームの長さは約750000行です。単一のアクターのアクションを分離するために、「ユーザー」識別子を含む列で分割された個々のデータフレームを抽出しようとしています(データフレームのリストまたはベクトルを取得します)。 ID | Data1 | Data2 | ... | UserID 1 | aaa | bbb | ... | u_001 2 | aab | bb2 | ... | u_001 3 | aac | bb3 | ... | u_001 4 | aad | bb4 | ... | u_002 結果として list( ID | …

10
MySQLでのUUIDパフォーマンス?
MySQLデータベースの主キーとしてUUID値を使用することを検討しています。挿入されるデータは、数十、数百、または数千ものリモートコンピューターから生成され、1秒あたり100〜40,000の挿入速度で挿入され、更新は行われません。 データベース自体は通常、データのカリングを開始する前に約5,000万レコードに達するため、大規模なデータベースではありませんが、小規模でもありません。また、InnoDBで実行することも計画していますが、実行していることに対してより優れたエンジンがあれば、それを変更することもできます。 Javaのタイプ4UUIDを使用する準備ができましたが、テストでは奇妙な動作が見られました。1つは、varchar(36)として格納しているため、binary(16)を使用した方がよいことに気付きましたが、どれだけ良いかはわかりません。 より大きな問題は、5,000万件のレコードがある場合、このランダムデータがインデックスをどれほどひどく台無しにするかということです。たとえば、左端のビットにタイムスタンプが付けられたタイプ1 UUIDを使用した方がよいでしょうか?または、UUIDを完全に破棄して、auto_increment主キーを検討する必要がありますか? MySQLにインデックス/主キーとして格納されている場合のさまざまなタイプのUUIDのパフォーマンスに関する一般的な考え/ヒントを探しています。ありがとう!

8
Javaスイッチの場合:中括弧の有無は?
中括弧を付けた次の2つのスニペットについて考えてみます。 switch (var) { case FOO: { x = x + 1; break; } case BAR: { y = y + 1; break; } } 中括弧なし: switch (var) { case FOO: x = x + 1; break; case BAR: y = y + 1; break; } 中かっこ付きのスニペットでは、各ケースを中かっこで囲むことによって新しいスコープが作成されることを知っています。ただし、各ケースに新しいスコープが必要ない場合(つまり、変数名が再利用されていない場合)、ケースで中括弧を使用すると、パフォーマンスが低下しますか?

3
CとC ++のほぼ同一のコード間の実行時間の大きな違い(x9)
私はwww.spoj.comからこの演習を解決しようとしていました:FCTRL-階乗 あなたは本当にそれを読む必要はありません、あなたが興味を持っているならそれを読んでください:) 最初に私はそれをC ++で実装しました(これが私の解決策です): #include <iostream> using namespace std; int main() { unsigned int num_of_inputs; unsigned int fact_num; unsigned int num_of_trailing_zeros; std::ios_base::sync_with_stdio(false); // turn off synchronization with the C library’s stdio buffers (from https://stackoverflow.com/a/22225421/5218277) cin >> num_of_inputs; while (num_of_inputs--) { cin >> fact_num; num_of_trailing_zeros = 0; for (unsigned int fives …
85 c++  c  performance  gcc  iostream 

11
x + =はx = x + aよりも速いですか?
私はStroustrupの「C ++プログラミング言語」を読んでいました。彼は、変数に何かを追加する2つの方法のうちの1つだと言っています。 x = x + a; そして x += a; 彼は+=それがよりよく実行される可能性が高いので好む。彼はそれもより速く動くことを意味すると思います。 しかし、それは本当にですか?コンパイラなどに依存する場合、どうすれば確認できますか?

9
64ビットプログラムは32ビットバージョンよりも大きくて高速ですか?
私はx86に焦点を合わせていると思いますが、一般的に32ビットから64ビットへの移行に興味があります。 論理的には、定数とポインタが大きくなる場合があるため、プログラムが大きくなる可能性が高いことがわかります。また、効率を上げるために単語の境界にメモリを割り当てたいという要望は、割り当て間の空白を増やすことを意味します。 また、x86の32ビットモードでは、4Gアドレス空間が重複している可能性があるため、コンテキスト切り替え時にキャッシュをフラッシュする必要があると聞いています。 では、64ビットの本当の利点は何ですか? そして補足的な質問として、128ビットはさらに良いでしょうか? 編集: 最初の32/64ビットプログラムを作成しました。それは16バイト(32bバージョン)または32バイト(64bバージョン)オブジェクトのリンクリスト/ツリーを作成し、stderrに多くの印刷を行います-本当に便利なプログラムではなく、典型的なものではありませんが、それは私の最初のものです。 サイズ:81128(32b)v 83672(64b)-それほど大きな違いはありません 速度:17s(32b)v 24s(64b)-32ビットOS(OS-X 10.5.8)で実行 更新: 64bであるが32bポインターを使用する新しいハイブリッドx32ABI(アプリケーションバイナリインターフェイス)が開発されていることに注意してください。一部のテストでは、32bまたは64bよりもコードが小さく、実行が高速になります。 https://sites.google.com/site/x32abi/

1
Rustのオプションタイプのオーバーヘッドは何ですか?
Rustでは、参照がnullになることはないため、リンクリストなど、実際にnullが必要な場合は、次のOptionタイプを使用します。 struct Element { value: i32, next: Option<Box<Element>>, } 単純なポインタと比較して、メモリ割り当てと逆参照の手順に関して、これにはどのくらいのオーバーヘッドが含まれますか?コンパイラ/ランタイムに、同じ構造を使用して非コアライブラリに自分でOption実装Optionしたりenum、ポインタをベクトルでラップしたりする場合よりも、コストをかけずに、またはコストを抑えた「魔法」がありますか?

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' -= …


4
jdk1.6以降のHashMapsがmulti = threadingで問題を引き起こすことを考えると、コードを修正するにはどうすればよいですか?
私は最近stackoverflowで質問をし、その答えを見つけました。最初の質問は、ミューテックスまたはガベージコレクション以外のどのメカニズムがマルチスレッドJavaプログラムを遅くする可能性があるかということでした。 恐ろしいことに、HashMapがJDK1.6とJDK1.7の間で変更されていることに気づきました。これで、HashMapを作成するすべてのスレッドを同期させるコードのブロックができました。 JDK1.7.0_10のコード行は次のとおりです。 /**A randomizing value associated with this instance that is applied to hash code of keys to make hash collisions harder to find. */ transient final int hashSeed = sun.misc.Hashing.randomHashSeed(this); どちらが呼び出すことになります protected int next(int bits) { long oldseed, nextseed; AtomicLong seed = this.seed; do { oldseed = seed.get(); …

1
Cコードループのパフォーマンス[続き]
この質問は、ここでの私の質問に続きます(Mysticalのアドバイスに基づいて): Cコードループのパフォーマンス 私の質問を続けると、スカラー命令の代わりにパック命令を使用すると、組み込み関数を使用するコードは非常によく似たものになります。 for(int i=0; i<size; i+=16) { y1 = _mm_load_ps(output[i]); … y4 = _mm_load_ps(output[i+12]); for(k=0; k<ksize; k++){ for(l=0; l<ksize; l++){ w = _mm_set_ps1(weight[i+k+l]); x1 = _mm_load_ps(input[i+k+l]); y1 = _mm_add_ps(y1,_mm_mul_ps(w,x1)); … x4 = _mm_load_ps(input[i+k+l+12]); y4 = _mm_add_ps(y4,_mm_mul_ps(w,x4)); } } _mm_store_ps(&output[i],y1); … _mm_store_ps(&output[i+12],y4); } このカーネルの測定されたパフォーマンスは、サイクルあたり約5.6 FP操作ですが、スカラーバージョンのパフォーマンスの正確に4倍、つまりサイクルあたり4.1,6 = 6,4 FPopsであると予想されます。 重み係数の動きを考慮に入れると(それを指摘してくれてありがとう)、スケジュールは次のようになります。 movssスカラーの重み値をXMMレジスタに移動し、shufpsこのスカラー値をベクトル全体にコピーするために使用する操作の後に追加の命令がありますが、スケジュールは変更されていないようです。mulps負荷から浮動小数点ドメインへの切り替え待ち時間を考慮に入れると、重みベクトルをしばらくの間使用する準備ができているようです。したがって、これによって余分な待ち時間が発生することはありません。 …

9
x << 1またはx << 10のどちらが速いですか?
私は何も最適化したくありません、私は誓います、私は好奇心からこの質問をしたいだけです。ほとんどのハードウェアには、単一のコマンドであるビットシフトのアセンブリコマンド(たとえばshl、shr)があることを私は知っています。ただし、シフトするビット数は重要ですか(ナノ秒単位、またはCPUタクト単位)。言い換えれば、次のいずれかがどのCPUでも高速ですか? x &lt;&lt; 1; そして x &lt;&lt; 10; そして、この質問で私を憎まないでください。:)
83 c++  c  performance  cpu  low-level 

3
ネットワークパネルのGoogleChromeのタイムラインでの時間はどういう意味ですか?
Google Chromeのネットワークパネルを使用してパフォーマンスのトラブルシューティングを行うと、さまざまな時間が表示され、それらが何を意味するのか疑問に思うことがよくあります。 誰かが私がこれらを正しく理解していることを検証できますか? ブロッキング:同じドメイン制限に対するブラウザの複数のリクエストによってブロックされた時間(???) 待機中:サーバーからの接続を待機中(???) 送信:サーバーからブラウザにファイルを転送するために費やされた時間(???) 受信:ブラウザがファイルを分析およびデコードするために費やした時間(???) DNSルックアップ:ホスト名の解決に費やされた時間。 接続:ソケット接続の確立に費やされた時間。 では、誰かが長いブロッキング時間をどのように修正するでしょうか? では、誰かが長い待ち時間をどのように修正するでしょうか?

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