問題タブ [flops]

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 投票する
2 に答える
5964 参照

c - Linux perf ツールを使用したアプリケーションの FLOP の測定

Linuxパフォーマンスカウンターサブシステムへの新しいコマンドラインインターフェイスコマンドである「perf」を使用して、アプリケーションによって実行される浮動小数点および算術演算の量を測定したいと考えています。(テスト目的で、私が作成した単純なダミー アプリを使用します。以下を参照してください)。

FP および整数演算を測定するために定義された「perf」イベントが見つからなかったため、未加工のハードウェア イベント コード (-rNNN で使用するため、NNN はイベント コードの 16 進値) を調べ始めました。したがって、私の本当の問題は、廃止された命令 (INST_RETIRED) で見つけたコードが、FP と他の命令 (X87 および MMX/SSE) を区別しないことです。特定のコードに適切な umask を使用しようとしたときに、どういうわけか「perf」が umask の組み込みを理解またはサポートしていないことがわかりました。私は試しました:

これにより、引退した指示が表示されますが、

これにより、実行された X87 命令に、間違ったパラメーターを指定したことが示されます。そうかもしれませんが、「perf」で生のハードウェア イベントの umask を使用する正しい方法は何ですか? 一般に、perf ツールを使用してプログラムが実行した浮動小数点演算と整数演算の正確な数を取得する方法は何ですか?

どうもありがとう、コンスタンティン・ボヤノフ


ここに私のテストアプリがあります:

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

c++ - コードのフロップを数える!

これは本当に時間がかかっています。次のコード(ループ)のFLOPSを推定する簡単な方法が見つかりませんでした。ループの1回の反復でのFLOPSの量は次のとおりです。

見た目はシンプルですが、先ほどの数字と混同してしまいましたので、正確な数字を教えていただければ幸いです。

ありがとう。

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

optimization - パフォーマンスと全体的な効率を測定するために GPU の sqrt に割り当てられた FLOPS

GPU 実装では、そのパフォーマンスを GLOPS で見積もる必要があります。コードは非常に基本的なものですが、私の問題は、操作「sqrt」または「mad」に 1 かそれ以上の FLOPS を与える必要があるかどうかです。

さらに、この GPU の理論上の最大値は 500GFLOPS ですが、これらの操作で 1 FLOP と言うと、コードで 50 GFLOPS が得られます。パーセンテージで表すと10%になります。スピードアップに関しては、100倍になります。ですから素晴らしいと思いますが、10% は利回りが少し低いように思えますが、どう思いますか?

ありがとう

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

c++ - サイクルあたり理論上の最大4FLOPを達成するにはどうすればよいですか?

最新のx86-64IntelCPUで、サイクルごとに4つの浮動小数点演算(倍精度)の理論上のピークパフォーマンスをどのように達成できますか?

私が理解している限り、最新のIntel CPUのほとんどでSSE addが完了するまでに3サイクル、aが完了するまでに5サイクルかかりmulます(たとえば、Agner Fogの「InstructionTables」を参照)。addパイプライン処理により、アルゴリズムに少なくとも3つの独立した合計がある場合、サイクルごとに1つのスループットを得ることができます。addpdこれは、パックバージョンとスカラーバージョンの両方に当てはまりaddsd、SSEレジスタには2つdoubleの'を含めることができるため、スループットは1サイクルあたり最大2フロップスになる可能性があります。

さらに、(これに関する適切なドキュメントは見ていませんが)addmulは並行して実行でき、1サイクルあたり4フロップの理論上の最大スループットが得られるようです。

ただし、単純なC /C++プログラムではそのパフォーマンスを再現できませんでした。私の最善の試みは、約2.7フロップ/サイクルでした。誰かがピークパフォーマンスを示す単純なC/C ++またはアセンブラプログラムを提供できるなら、それは大いにありがたいです。

私の試み:

コンパイル済み:

Intel Core i5-750、2.66GHzで次の出力を生成します。

つまり、1サイクルあたり約1.4フロップスです。メインループでアセンブラコードを見るのは、 g++ -S -O2 -march=native -masm=intel addmul.cpp私にはちょっと最適なようです。

パックバージョン(addpdおよびmulpd)でスカラーバージョンを変更すると、実行時間を変更せずにフロップカウントが2倍になるため、サイクルあたり2.8フロップに満たないことになります。サイクルごとに4フロップを達成する簡単な例はありますか?

Mysticialによる素敵な小さなプログラム。これが私の結果です(数秒間だけ実行します):

  • gcc -O2 -march=nocona:10.66Gflopsのうち5.6Gflops(2.1フロップス/サイクル)
  • cl /O2、openmpが削除されました:10.66Gflopsのうち10.1Gflops(3.8フロップ/サイクル)

すべてが少し複雑に見えますが、これまでの私の結論は次のとおりです。

  • gcc -O2addpd可能な場合はとを交互に使用することを目的として、独立した浮動小数点演算の順序を変更し mulpdます。同じことが。にも当てはまりますgcc-4.6.2 -O2 -march=core2

  • gcc -O2 -march=noconaC++ソースで定義されている浮動小数点演算の順序を維持しているようです。

  • cl /O2SDK for Windows 7の64ビットコンパイラは 自動的にループ展開を行い、3つaddpdのグループが3つと交互になるように操作を調整しているようですmulpd(少なくとも私のシステムと私の単純なプログラムでは) 。

  • 私のCorei5750Nehalemアーキテクチャ)は、addとmulを交互に使用するのが好きではなく、両方の操作を並行して実行できないようです。ただし、3つにグループ化すると、突然魔法のように機能します。

  • 他のアーキテクチャ(おそらくSandy Bridgeなど)は、アセンブリコードで交互になっている場合、問題なくadd/mulを並行して実行できるようです。

  • 認めるのは難しいですが、私のシステムでcl /O2は、システムの低レベルの最適化操作ではるかに優れた仕事をし、上記の小さなC++の例でピークに近いパフォーマンスを達成しています。私は1.85-2.01フロップ/サイクルの間で測定しました(Windowsではclock()を使用しましたが、これはそれほど正確ではありません。おそらく、より良いタイマーを使用する必要があります-Mackie Messerに感謝します)。

  • 私が管理しgccた最善の方法は、手動でループ展開し、加算と乗算を3つのグループに配置することでした。g++ -O2 -march=nocona addmul_unroll.cpp せいぜい0.207s, 4.825 Gflops1.8フロップ/サイクルに相当するものが得られますが、これは今では非常に満足しています。

forC ++コードでは、ループを次のように置き換えました。

そして、アセンブリは次のようになります。

0 投票する
5 に答える
22308 参照

c++ - FLOPS の測定方法

FLOPSまたはIOPSを測定するにはどうすればよいですか? 普通の浮動小数点の足し算・掛け算の時間を計ったらFLOPS相当ですか?

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

c++ - 以下のコードで浮動小数点演算を最小限に抑える方法

次のコードでフロップの総数を最小限に抑える必要があります。だれか簡単に見て、どこに力を注ぐべきか教えてもらえますか? いくつかのパフォーマンス アナライザーを試しましたが、結果は適切ではありませんでした..

ありがとう、チョー

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

c# - C# アプリが使用する FLOPS を測定するにはどうすればよいですか?

Microsoft の Parallel Programming ホワイトペーパーでは、さまざまな FLOPS しきい値の下で最適な状況が説明されており、FLOPS レートは、特定の実装をいつ使用する必要があるかを決定するポイントであると説明されています。

アプリケーションで FLOPS を測定するにはどうすればよいですか?

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

cpu - 最新の FPGA のパフォーマンスは、CPU と比較して、絶対的に (GFlops/GIops) でどのくらいですか?

最新の FPGA の CPU に対するパフォーマンスは絶対 (GFlops/GIops) で、FPGA で 1 秒あたり 10 億の整数演算のコストはどれくらいですか? また、現在 FPGA を使用するメリットがあるのはどのタスクですか? 私はそれを見つけただけです: http://www.hpcwire.com/hpcwire/2010-11-22/the_expanding_floating-point_performance_gap_between_fpgas_and_microprocessors.html

そして古い記事: http://www.mouldy.org/fpgas-in-cryptanalysis.pdf

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

python - PythonFLOPS計算

Python分散処理プログラムを実装したすべてのコンピューターで、標準化されたFLOPSの推定値を取得しようとしています。私は現在、パイストーンを非常に細かく計算できますが、パイストーンは特によく知られていないため、実際にどれほど正確であるかは完全にはわかりません。

したがって、さまざまなCPUなどを搭載している可能性のあるさまざまなマシンでFLOPSを計算する方法(またはすでに実行しているモジュール)が必要です。Pythonはインタプリタ言語であるため、実行にかかる時間をカウントするだけです。設定された数の操作は、たとえばLinpackのレベルでは実行されません。ベンチマークで有名な「名前」の1つとまったく同じ見積もりをする必要は特にありませんが、少なくとも適度に近いものにしたいと思います。

したがって、FLOPSを取得できるようにする方法または既存のモジュールはありますか?そうでなければ、私の唯一の選択はCythonにコンパイルするか、CPUクロック速度に基づいて機能を推定しようとすることです...

0 投票する
7 に答える
5117 参照

c++ - How to compare performance of two pieces of codes

I have a friendly competition with couple of guys in the field of programming and recently we have become so interested in writing efficient code. Our challenge was to try to optimize the code (in sense of cpu time and complexity) at any cost (readability, reusability, etc).

The problem is, now we need to compare our codes and see which approach is better comparing to the others but we don't know any tools for this purpose.

My question is, are there some (any!) tools that takes a piece of code as input and calculates the number of flops or cpu instructions necessary for running it? Is there any tool can measure the optimacy of a code?

P.S. The target language is c++ but would be nice to know if such tools exists also for java.