问题标签 [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

我想测量一些应用程序使用“perf”执行的浮点和算术运算的数量,这是 linux 性能计数器子系统的新命令行接口命令。(出于测试目的,我使用了我创建的一个简单的虚拟应用程序,见下文)。

因为我找不到为测量 FP 和整数运算定义的任何“性能”事件,所以我开始挖掘原始硬件事件代码(与 -rNNN 一起使用,其中 NNN 是事件代码的十六进制值)。所以我真正的问题是,我为退役指令(INST_RETIRED)找到的代码没有区分 FP 和其他指令(X87 和 MMX/SSE)。当我尝试对特定代码使用适当的 umask 时,我发现“perf”不知何故不理解或不支持 umask 包含。我试过:

这给了我退休的指示,但是

这应该给我执行的 X87 指令说我提供了错误的参数。也许是这样,但是将原始硬件事件的 umask 与“perf”一起使用的正确方法是什么?一般来说,获得使用 perf 工具执行的程序的浮点和整数运算的确切数量的方法是什么?

非常感谢,康斯坦丁·博亚诺夫


这是我的测试应用程序:

0 投票
4 回答
3702 浏览

c++ - 为代码计算翻牌数!

这真的很花时间。我找不到一种简单的方法来估计以下代码(循环)的 FLOPS,循环的单次迭代有多少 FLOPS:

它看起来很简单,但我对前面给出的其他一些数字感到困惑,所以如果有人能给出一个确切的数字,那就太好了。

谢谢。

0 投票
1 回答
1106 浏览

optimization - 分配给 GPU 中 sqrt 的 FLOPS 以测量性能和全局效率

在 GPU 实现中,我们需要根据 GLOPS 估计其性能。代码非常基本,但我的问题是我应该给操作“sqrt”或“mad”多少 FLOPS,无论是 1 还是更多。

此外,如果 1 表示这些操作的 1 FLOP,我的代码获得 50 GFLOPS,而此 GPU 的理论最大值为 500GFLOPS。如果我用百分比表示,我会得到 10%。在加速方面,我得到了 100 倍。所以我觉得很好,但是10%的收益率好像有点低,你怎么看?

谢谢

0 投票
4 回答
84711 浏览

c++ - 如何实现每个周期 4 次 FLOP 的理论最大值?

如何在现代 x86-64 Intel CPU 上实现每个周期 4 个浮点运算(双精度)的理论峰值性能?

据我了解,在大多数现代英特尔 CPU 上,完成SSE add需要三个周期,完成一个周期需要五个周期(例如参见Agner Fog 的“指令表”)。由于流水线,如果算法具有至少三个独立的求和,则每个周期可以获得一个吞吐量。由于打包版本和标量版本都是如此,并且 SSE 寄存器可以包含两个',因此吞吐量可以高达每个周期两个触发器。muladdaddpdaddsddouble

此外,似乎(尽管我没有看到任何适当的文档)add' 和mul' 可以并行执行,理论上每个周期的最大吞吐量为四个触发器。

但是,我无法使用简单的 C/C++ 程序复制该性能。我最好的尝试导致大约 2.7 次失败/周期。如果有人可以贡献一个简单的 C/C++ 或汇编程序来展示最佳性能,那将不胜感激。

我的尝试:

编译:

在 Intel Core i5-750, 2.66 GHz 上产生以下输出:

也就是说,每个周期只有大约 1.4 次触发器。用主循环查看汇编代码 g++ -S -O2 -march=native -masm=intel addmul.cpp对我来说似乎是最佳选择。

使用打包版本 (addpdmulpd) 更改标量版本将使 flop 计数翻倍,而不会更改执行时间,因此每个周期我会得到 2.8 次 flop。有没有一个简单的例子可以实现每个周期四次翻转?

Mysticial 的小程序不错;这是我的结果(虽然只运行了几秒钟):

  • gcc -O2 -march=nocona: 10.66 Gflops 中的 5.6 Gflops (2.1 flops/cycle)
  • cl /O2, openmp 已删除:10.66 Gflops 中的 10.1 Gflops(3.8 flops/cycle)

这一切似乎有点复杂,但到目前为止我的结论是:

  • gcc -O2更改独立浮点运算的顺序,目的是 尽可能交替addpd和's。mulpd同样适用于gcc-4.6.2 -O2 -march=core2

  • gcc -O2 -march=nocona似乎保持了 C++ 源代码中定义的浮点运算的顺序。

  • cl /O2,来自SDK for Windows 7的 64 位编译器 会自动进行循环展开,并且似乎尝试并安排操作,以便三个 ' 的组与三个addpd' 交替mulpd(嗯,至少在我的系统和我的简单程序上) .

  • 我的Core i5 750Nehalem 架构)不喜欢交替使用 add 和 mul,而且似乎无法同时运行这两个操作。但是,如果将其分组为 3,它会突然像魔术一样起作用。

  • 如果其他架构(可能是Sandy Bridge和其他架构)在汇编代码中交替执行,它们似乎能够毫无问题地并行执行 add/mul。

  • 虽然很难承认,但在我的系统上,我的系统cl /O2在低级优化操作方面做得更好,并且在上面的小 C++ 示例中实现了接近峰值的性能。我在 1.85-2.01 flops/cycle 之间测量(在 Windows 中使用了 clock() 并不那么精确。我想,需要使用更好的计时器 - 感谢 Mackie Messer)。

  • 我管理的最好gcc方法是手动循环展开并以三人一组的方式安排加法和乘法。我得到 g++ -O2 -march=nocona addmul_unroll.cpp 的充其量0.207s, 4.825 Gflops相当于 1.8 次失败/周期,我现在对此非常满意。

在 C++ 代码中,我将for循环替换为:

程序集现在看起来像:

0 投票
5 回答
22308 浏览

c++ - 如何测量 FLOPS

如何测量FLOPSIOPS?如果我测量普通浮点加法/乘法的时间,它是否等同于 FLOPS?

0 投票
1 回答
149 浏览

c++ - 如何在以下代码中最小化浮点运算

我需要最小化以下代码中的失败总数,任何人都可以快速查看并告诉我在哪里努力?我尝试了几种性能分析仪,但结果无关紧要..

谢谢,赵

0 投票
1 回答
1305 浏览

c# - 如何测量我的 C# 应用程序使用的 FLOPS?

Microsoft 的并行编程白皮书描述了在各种 FLOPS 阈值下最佳的情况,并且 FLOPS 率是何时应使用特定实现的决策点。

如何在我的应用程序中测量 FLOPS?

0 投票
1 回答
3354 浏览

cpu - 现代 FPGA 的性能相对于 CPU 和绝对值(GFlops/GIops)有多少?

现代 FPGA 相对于 CPU 的性能是多少,绝对以 (GFlops/GIops) 为单位,FPGA 上每秒 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 - Python FLOPS 计算

我一直试图在我已经实现 Python 分布式处理程序的所有计算机上获得 FLOPS 的标准化估计。虽然我目前可以很好地计算 pystones,但 pystones 并不是特别为人所知,而且我不完全确定它们的准确度。

因此,我需要一种方法来计算(或已经完成它的模块)在各种机器上的 FLOPS,这些机器可能有任何种类的 CPU 等。因为 Python 是一种解释性语言,只需计算它所花费的时间一定数量的操作不会在例如 Linpack 的级别上执行。虽然我并不特别需要与基准测试中的大“名字”之一完全相同的估计,但我希望它至少相当接近。

因此,有没有办法或预先存在的模块让我获得 FLOPS?否则,我唯一的选择是编译成 Cython,或者尝试根据 CPU 时钟速度估计功能......

0 投票
7 回答
5117 浏览

c++ - 如何比较两段代码的性能

我与编程领域的几个人进行了一场友好的竞争,最近我们对编写高效的代码非常感兴趣。我们的挑战是不惜一切代价(可读性、可重用性等)尝试优化代码(在 CPU 时间和复杂性方面)。

问题是,现在我们需要比较我们的代码,看看哪种方法比其他方法更好,但我们不知道任何用于此目的的工具。

我的问题是,是否有一些(任何!)工具将一段代码作为输入并计算运行它所需的触发器或 cpu 指令的数量?有什么工具可以衡量代码的优化吗?

PS 目标语言是 c++,但很高兴知道这些工具是否也适用于 java。