问题标签 [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.
performance - 使用 OpenCL 计算 GPU 的最大失败次数
我正在编写一个简单的 OpenCL 应用程序,它将计算目标 GPU 设备的最大实验 FLOPS。我决定让我的 cl 内核尽可能简单。这是我的 OpenCL 内核和主机代码。内核代码是:
主机代码是:
解释代码,在内核代码中我实际上做了一个浮点运算,这意味着每一个任务都将在 FOPS 上完成。在主机代码中,我首先检索 GPU 的最大全局内存大小,分配它的一部分(for 循环定义它的多少),然后将数据和内核执行推入其中。我将测量 clEnqueueNDRangeKernel 的执行时间,然后计算应用程序的 GFLOPS。在我当前的实现中,无论 cl_mem 的大小是多少,我都能获得大约 0.28 GFLOPS 的性能,这比宣传的功率要低得多。我假设我在这里做的具体事情效率低下。或者总的来说,我计算 GPU 性能的方法是不正确的。有谁可以告诉我应该对代码进行哪些更改?
performance - 两个几乎相同的 OpenCL 内核之间的性能差距
我有两个几乎相同的 OpenCL 内核,我想计算它们在 GFLOPS 中的性能。内核 #1 是:
第二个内核是:
正如您在代码中看到的,我使用的流大小为 16。每个内核都有 500 行操作,其中每个内核只执行一个浮点操作。我还总共部署了大约 1048576 个内核,因此我将有大约 1048576 个工作项并行执行。
为了计算我所做的翻牌:
不幸的是,对于第一个内核,我得到了大约 1.4 TFLOP,但对于第二个内核,我得到了 38 GFLOP。我无法解释这个巨大的差距。使用 temp 向量而不是单个 temp 似乎很重要。似乎真正的应用程序大多像第二个内核。第一个内核对于真正的应用程序来说太简单了。
谁能帮助我了解这里到底发生了什么以及第二个内核性能如何达到第一个?一般来说,如果我要对我的设备进行基准测试,我是否应该期望看到接近理论值的性能?
PS 我知道我需要将 rands 复制到 __local 内存中,但现在让我们跳过它。
deep-learning - 计算 Caffe CNN 架构中的乘加运算 (MAC) 的数量
最近我一直在对一些 CNN 进行关于时间、乘加运算 (MAC) 数量、参数数量和模型大小的基准测试。我已经看到了一些类似的 SO 问题(here和here),在后者中,他们建议使用Netscope CNN Analyzer。这个工具允许我通过输入我的 Caffe 网络定义来计算我需要的大部分东西。
但是,我在论文和互联网上看到的某些架构的乘加操作的数量与 Netscope 输出的不匹配,而其他架构则匹配。我总是将 FLOPs 或 MAC 与 netscope 中的 MACC 列进行比较,但在某些时候我忘记了大约 10 倍的因素(查看下表了解更多详细信息)。
Netscope 中有关GoogLeNet macc 编号和VGG16 macc 编号的参考。
使用该工具的人是否可以指出我在阅读 Netscope 输出时犯了什么错误?
performance - 如何在非统一着色器系统上测量 GPU GFLOPS?
我的问题是因为有一些旧的 GPU 确实有顶点着色器和像素着色器,我不知道如何用这种 GPU 测量 GFLOPS。我知道您可以使用 Core Speed x ALUs x 2 来测量 GFLOPS(我不知道这个“2”是什么,如果有人也能回答这个问题,那就太好了!)。但是对于没有统一着色器的 GPU,我该如何测量呢?提前致谢。
performance - 更好的管道利用率会导致 GPU 的性能下降
我正在开发一个简单的 OpenCL 内核,它只进行计算,根本没有内存访问。这是我们在 GPU 上执行的内核类型:
“FMA操作”的总数约为1024。基于内核,由于存在数据依赖性,每条指令都需要先完成前一条指令。我试图优化上述内核的执行,但利用更多的临时变量来增加数据相关操作之间的差距,如下所示:
执行并计算两个内核的总 GFLOPs(虽然两者的操作总数相同),第一个内核给出了大约 1186.17 GFLOPs,第二个内核给出了大约 600.58 GFLOPS,这完全违背了我的第一个假设。由于我已经完全推出了内存访问,我无法对这个数字提出另一种解释。
所以我想知道是否有人知道在执行这些内核时设备级别发生了什么。
tensorflow - tfprof(tensorflow profiler)模型分析报告中的b flops是什么?
例如:
是什么b flops
意思?我猜的m flops
意思mega flops
。但是,是什么'b' flops
意思?显然,b flops
比m flops
我知道模型分析报告按降序打印触发器值更大。
linux - 使用 Intel Advisor XE 报告 FLOP
我在 Linux CentOS 7.4 上使用 Intel Advisor 2018(内部版本 523188)来分析一组基准(我想将它们全部绘制在一个 Roofline 图中),并且我正在使用命令行工具 advixe-cl 来收集调查,每个基准测试的行程计数和失败信息。
但是,我找不到使用命令行界面以 FLOPs(每个循环或函数甚至整个程序)报告测量性能的方法。我正在查看的文档可在此处找到https://software.intel.com/en-us/advisor-help-lin-command-line-interface-reference,但我认为它不完整,例如选项 -flops -and-masks 和 -no-tip-counts 没有在任何地方提及。
您知道是否有任何方法可以通过命令行界面报告测量的触发器?或者你知道我在哪里可以找到 advixe-cl 的完整文档吗?
machine-learning - tensorflow 的 tfprof 输出理论 FLOPS 吗?
我使用 tfprof 来分析机器学习算法。这是示例输出:==================模型分析报告======================节点名称| # float_ops _TFProfRoot (--/3163.86b flops) InceptionResnetV2/InceptionResnetV2/Mixed_6a/Branch_1/Conv2d_0b_3x3/convolution (173.41b/173.41b flops) InceptionResnetV2/InceptionResnetV2/Conv2d_4a_3x3/convolution (167.2/167.2)
在这里,在“167.25b/167.25b flops”中,第二个 167.25b 表示什么?是理论上的失败吗?
matlab - 时序实验 - 矩阵
确定可以轻松放入可用 RAM 的矩阵大小。例如,如果您有一台 4 GB 的机器,您应该能够轻松地存储一个占用大约 800 MB 的矩阵。将此值存储在变量
Mb
中。使用以下信息计算可以存储在 Mb 兆字节内存中的最大矩阵维度 N。
一兆字节有
1024
千字节一千字节是
1024
字节一个浮点数是
8 bytes
。
N × N
矩阵包含N^2
浮点数。调用您计算的 N
nmax
。(b) 创建两个随机矩阵
A
,B
每个矩阵的大小为Nmax × Nmax
。使用 MATLAB 函数tic
和toc
,确定计算乘积 所需的时间(秒)AB
。Nmax × Nmax
确定计算矩阵-矩阵乘积所需的浮点运算(加法和乘法)(2/3)n^3.
的数量 使用此数字来估计您的计算机每秒可以执行的浮点运算(“触发器”)的数量。跟注这个翻牌率flops
。
一切运行良好,但我觉得我没有为值A
和B
. 我究竟做错了什么?
deep-learning - 如何在 Keras 中计算 Mobilenet FLOPs
当我运行上面的代码时,我得到了以下结果
这与论文中描述的失败不同。
手机网: https ://arxiv.org/pdf/1704.04861.pdf
ShuffleNet:https ://arxiv.org/pdf/1707.01083.pdf
如何计算论文中描述的准确翻牌?