估计 GPU 的 FLOPS 效率(CUDA 示例)

2024-03-21

在我看来,我并不完全理解 FLOPS 的概念。在CUDA SAMPLES中,有矩阵乘法示例(0_Simple/matrixMul)。在此示例中,每个矩阵乘法的 FLOP(浮点运算)数量通过以下公式计算:

 double flopsPerMatrixMul = 2.0 * (double)dimsA.x * (double)dimsA.y * (double)dimsB.x;

所以,这意味着,为了将矩阵相乘A(n x m) over B(m x k),我们需要做:2*n*m*k与浮点运算。

然而,为了计算结果矩阵的 1 个元素C (n x k),一个人必须执行m乘法和(m-1)加法运算。因此,操作总数(计算n x k元素),是m*n*k乘法和(m-1)*n*k补充。

当然,我们可以设置添加的数量m*n*k以及,操作总数将是2*n*m*k,其中一半是乘法,一半是加法。

但是,我猜乘法比加法的计算成本更高。为什么这两种类型的操作会混合在一起?计算机科学中总是这样吗?如何考虑两种不同类型的操作?

对不起我的英语不好)


简短的回答是,是的,他们计算乘法和加法。尽管大多数浮点处理器具有融合乘法/加法运算,但它们仍然将乘法和加法算作两个单独的浮点运算。

这就是为什么人们几十年来一直抱怨 FLOPs 基本上是一个毫无意义的衡量标准。即使是一点点,您几乎需要指定一些特定的代码体来测量 FLOP(例如,“Linpack gigaflops”)。即使如此,您有时也需要对诸如允许哪些编译器优化之类的事情进行相当严格的控制,以确保您测量的是真正的机器速度,而不是编译器简单地消除某些操作的能力。

最终,正是出于诸如此类的担忧,人们成立了一些组织来制定基准以及如何运行这些基准和报告结果的规则(例如 SPEC)。否则,可能很难确定您看到的两个不同处理器报告的结果在任何有意义的方面确实具有可比性。即使有了它,比较也可能很困难,但如果没有这些东西,它们就几乎毫无意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

估计 GPU 的 FLOPS 效率(CUDA 示例) 的相关文章

随机推荐

  • Jenkins:动态作业创建引发“管道 CPS 方法不匹配”错误

    我正在尝试从应并行运行的管道作业之一创建多个动态作业 我希望我的詹金斯管道脚本根据用户输入下载并安装我的软件二进制文件 以下是我的示例阶段 第 1 阶段 将下载构建版本 第 2 阶段 获取参数并安装软件的 云 部分 第 3 阶段 将接受用户
  • Mongoose populate() 返回空数组

    所以我已经花了大约4个小时 阅读了几次文档 但仍然无法找出我的问题 我正在尝试对我的模型执行一个简单的 populate 我有一个用户模型和商店模型 用户有一个 favoriteStores 数组 其中包含商店的 id 我正在寻找的是这个数
  • SQL查询where参数为null不为null

    我正在尝试执行 SQL 查询并根据参数是否为空或否动态构建 where 条件 我有这样的事情 SELECT tblOrder ProdOrder tblOrder Customer FROM tblOrder CASE WHEN Order
  • 找不到模块“内部/错误”离子

    我正在尝试创建新的离子项目 然后它显示以下错误 我已经删除了nodejs npm ionic并再次重新安装 但再次出现相同的错误 Terminal https i stack imgur com vLP7J png Error Error
  • 使用 Ajax 加载用户控件

    我试图找到使用 Ajax 加载用户控件的最佳实践 我的第一种方法是简单地使用 UpdatePanel 并在 ajax 回发上使用 LoadControl 弹出它 但这会在同一 UpdatePanel 中重新呈现其他加载的用户控件 另外 我无
  • cassandra 节点限制

    我正在寻找 cassandra 是否有节点硬件规格的限制 例如如果存在任何此类限制 每个节点的最大存储可能是多少 我打算使用几个节点 每个节点具有 48TB 存储 2TB X 24 硬盘驱动器 7200rpm 并配有一些良好的双 Xeon
  • SMTP 验证错误“发送邮件失败”

    如果满足某些条件 我将尝试从我的 ASP NET 网页发送电子邮件 这是我的代码 SmtpClient smtpClient new SmtpClient NetworkCredential basicCredential new Netw
  • 如何找到 Homebrew 的可安装软件包列表?

    最近我安装了Brew https brew sh 如何检索要安装的可用brew 软件包的列表 brew help将显示可用命令的列表 brew list将显示已安装软件包的列表 您还可以附加公式 例如brew list postgres会告
  • 当请求为 POST 时,在 Apigee HTTPTargetConnection 上调用 GET

    我需要调用使用 GET 的旧版 API 我的 API 代理使用 POST 我尝试使用AssignMessage
  • 将一个字符串更改为另一个字符串的简单突变数量?

    我相信你们都听说过 文字游戏 在这种游戏中 您试图通过一次更改一个字母来将一个单词更改为另一个单词 并且只浏览有效的英语单词 我正在尝试实现一个 A 算法来解决它 只是为了充实我对 A 的理解 并且需要的东西之一是最小距离启发式 也就是说
  • Angular 单元测试 Jasmine Spy 错误

    以下控制器收到类型错误 未定义 不是函数 正在评估sessionService getCurrentPlace 我有一个模拟服务 该方法正在被监视 模拟服务上的另一种方法工作正常 我试过了 AndReturns 关于间谍以及 AndCall
  • 在 MATLAB 中为结构体数组的字段赋值

    我想替换结构体数组中字段的值 例如 我想在以下结构中将所有 1 替换为 3 a 1 b 1 a 2 b 2 a 3 b 1 a a b 1 b 3 This doesn t work and spits out Insufficient o
  • 是否有一个“空”printf 代码不打印任何内容,用于跳过参数?

    如果我想要一个程序有多种文本输出格式 我可以这样做 const char fmtDefault u x s 2f each n const char fmtMultiLine Qty 3u nItem s nPrice per item 2
  • Kartik Select2 - 以编程方式更改多个

    我有一个 yii2 activeform 其中表单的功能可以根据表单中的其他内容进行更改 所以 我有一个俱乐部字段 在某些情况下可以是多个 但在其他情况下不能是多个
  • 零/符号扩展是无操作的,为什么要为每种大小类型提供指令呢?

    对于 x86 和 x64 编译器生成类似的零 符号扩展 MOVSX 和 MOVZX 扩展本身并不是免费的 但允许处理器执行无序魔法加速 但在 RISC V 上 因此 无符号和有符号 32 位整数之间的转换是无操作 从有符号 32 位整数到有
  • Keras 在激活函数之前检索节点的值

    想象一个完全连接的神经网络 其最后两层具有以下结构 Dense units 612 activation softplus Dense units 1 activation sigmoid 网络的输出值为 1 但我想知道 sigmoidal
  • Android 2.1 的操作栏

    是否有适用于 Android Level 7 的操作栏或其他我可以用作操作栏的东西 我需要构建一个使用 Android 2 1 操作栏的应用程序 JohanNilsson 实际上创建了一个ActionBar图书馆可在GitHub 直接链接
  • 将 Twitter Bootstrap 与 Wordpress 一起使用

    如何将 Wordpress 与 Twitter Bootstrap 一起使用 我知道如何设置 Wordpress 页面 并且已经使用过 Bootstrap 但现在我想第一次一起使用这两个 对于我的 WordPress 项目 我通常只安装 W
  • 如何从这个承诺层蛋糕中返回布尔值?

    我有一个控制器方法 它接受一个字符串参数 这样我就可以测试用户是否有能力 用户拥有许多角色 并且角色附加了一系列权限 我们需要检查它是否包含该功能 我知道这过于冗长 但为了理解 我就这样保留了 稍后会重构 App WorkspaceInde
  • 估计 GPU 的 FLOPS 效率(CUDA 示例)

    在我看来 我并不完全理解 FLOPS 的概念 在CUDA SAMPLES中 有矩阵乘法示例 0 Simple matrixMul 在此示例中 每个矩阵乘法的 FLOP 浮点运算 数量通过以下公式计算 double flopsPerMatri