問題タブ [loop-unrolling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
46945 参照

performance - ループのアンローリングがまだ役に立つのはいつですか?

私は、パフォーマンスが非常に重要なコード (モンテカルロ シミュレーション内で何百万回も呼び出されているクイック ソート アルゴリズム) をループ展開によって最適化しようとしています。高速化しようとしている内部ループは次のとおりです。

私は次のようなものに展開しようとしました:

これはまったく違いがなかったので、より読みやすい形式に戻しました。ループのアンローリングを試みたときも、同様の経験がありました。最新のハードウェアの分岐予測子の品質を考えると、ループの展開が依然として有用な最適化になるのはいつですか?

0 投票する
6 に答える
713 参照

c++ - 部分的に特殊化されたC++のテンプレートを使用してループを展開する

次のように、テンプレートを使用してC++でループを展開しようとしています。

Cygwinでg++3.4.4をコンパイルすると、次のエラーが発生します。

tmp.cpp:12:エラー:タイプT' of template argument0'はテンプレートパラメータに依存します

私は何が間違っているのですか?タイプTであることを示すために、どういうわけか0に注釈を付ける必要がありますか?

前もって感謝します。

0 投票する
1 に答える
180 参照

performance - BASIC でのループ展開

BASIC (Parallax BASIC Stamp) の縮小バージョンを実行している組み込みプロセッサがあります。ループでは、SPI バス経由で 1024 個の値を書き込んでいます。

コンパイルされた言語では、ループをアンロールすることで速度を上げることができます (ループにより多くのステートメントを入れて、オーバーヘッドとステートメントの比率を減らします)。ただし、BASIC は解釈型言語であり、各ステートメントは実行前に解釈されるため、よくわかりません。

利用可能なピンを見つけてそれにパルスを書き込んでから、オスコープで測定する必要があるため、プロファイリングは困難です。

理論的な観点から、BASIC でのループのアンローリングには速度の利点がありますか?

0 投票する
2 に答える
614 参照

gcc - x86 上の SPARC v8 用にコンパイルされたベンチマークのプロファイリング

私は学術的な演習のために leon3 プロセッサ (命令セットは SPARC v8) に (小さな) 改良を加えようとしています。何を改善するかを決める前に、改善を調整したいいくつかのベンチマーク プログラムのプロファイルを作成したいと思います。

SPARC v8 マシンにアクセスできません。

現在、機能レベルでプロファイリングを行う 'tsim' (leon3 シミュレーター) の評価版を使用しています。これは実際にはそれほど役に立ちません。

ループのアンロールを有効にしてコンパイルし、アセンブリ コード内の興味深い命令をカウントするなどの奇妙なことを試しましたが、gcc はループのアンロールを拒否しました。

理想的には、私が探しているのは、ベンチマークを実行し、それを命令レベルでプロファイリングする SPARC v8 シミュレーターです (「smul」が x 回実行されたようなもの)。もちろん、プロファイラーでなくてもこれを行うことができる他の方法があれば、気にしません。

何か案は?

0 投票する
3 に答える
2637 参照

c++ - コンパイル時に展開された for ループ内のテンプレート引数?

ウィキペディア (ここ) は、for ループのコンパイル時のアンロールを提供します........内部のテンプレート ステートメントで同様の for ループを使用できるかどうか疑問に思っていました...たとえば...

次のループは有効ですか

SubDomain は、テンプレート パラメーター int を受け取るクラスであり、ここでは Device クラスのメンバーである引数を使用して構築されています。

答えてくれてありがとう...私が欲しいものを知ったので...とにかく私がやりたいことを達成できますか??

私はついに欲しいものを手に入れました........ forループを直接使用する代わりに...代わりにBoost::MPL for_eachコンストラクトを使用できます。私はまだそれを実装していませんが、これは私が望んでいたことを行う方法を提供すると推測しています.....

ここで別のスタックオーバーフローの質問から回答を取りました...ただし、同じ質問へのコメントは、非常に遅くなるため(もちろん大きなforループの場合)、その使用を非難しています...しかし..大きくないforループi膨満感があるべきではないと思います...コードを試して、結果をお知らせします....

使用法は例でよく説明されています

0 投票する
2 に答える
4185 参照

java - Java JIT ループ展開ポリシー?

JIT のループ展開ポリシーとは何ですか? または、それに対する簡単な答えがない場合、ループのアンローリングがループ内でいつどこで実行されているかを確認する方法はありますか?

基本的に、静的な反復回数 (8 回) を持つ上記のコードがあり、for ループをそのままにしておくとうまくいきません。しかし、ループを手動で展開すると、大幅に改善されます。JIT が実際にループをアンロールするかどうか、またそうでない場合はその理由を知りたいと思っています。

0 投票する
1 に答える
1265 参照

cuda - ループ展開中に「リソース不足」エラーが発生しました

カーネルで展開ループを 8 から 9 に増やすと、out of resourcesエラーで中断します。

リソース不足による CUDA の起動失敗を診断するにはどうすればよいですか?を読みました。パラメータの不一致とレジスタの使いすぎが問題になる可能性がありますが、ここではそうではないようです。

n私のカーネルは、点と重心の間の距離を計算し、m各点について最も近い重心を選択します。8 次元では機能しますが、9 次元では機能しません。dimensions=9距離計算のために 2 行を設定してコメントを外すと、pycuda._driver.LaunchError: cuLaunchGrid failed: launch out of resources.

この動作の原因は何だと思いますか? out of resources*の原因となるその他の iusses は何ですか?

Quadro FX580 を使用しています。これが最小限の(っぽい)例です。実際のコードで展開するには、テンプレートを使用します。

0 投票する
4 に答える
3112 参照

c++ - 最適化コンパイラは、ループを展開するタイミングと量をどのように決定しますか?

コンパイラがループ展開の最適化を実行する場合、ループを展開する要因、またはループ全体を展開するかどうかによって、どのように決定されますか?これはスペースとパフォーマンスのトレードオフであるため、プログラムのパフォーマンスを向上させる上で、この最適化手法は平均してどの程度効果的ですか。また、どのような条件下でこの手法(つまり、特定の操作または計算)を使用することが推奨されますか?

これは、特定のコンパイラに固有である必要はありません。これは、この手法の背後にある考え方と実際に観察されたことの概要を説明するものであれば何でもかまいません。

0 投票する
1 に答える
162 参照

objective-c - 1 つのファイルでループを展開する

私はLLVMでObjective-Cコードを書いています。非常にパフォーマンスが重要なコードでいっぱいのファイルが 1 つあります。プロジェクト全体の値を設定せずに、この 1 つのファイルに対してのみコンパイラの最適化 (具体的にはループ展開) を有効にすることはできますか?

0 投票する
1 に答える
1840 参照

performance - カーネルを最適化するためにPTXを調べる必要がありますか?もしそうなら、どのように?

カーネルをさらに最適化するために、カーネルのPTXコードを読むことをお勧めしますか?

一例:自動ループ展開が機能したかどうかをPTXコードから確認できることを読みました。そうでない場合は、カーネルコードでループを手動で展開する必要があります。

  • PTXコードの他のユースケースはありますか?
  • PTXコードを調べますか?
  • CUDAがカーネル用に生成したPTXコードを読み取る方法はどこで確認できますか?