为什么 `numpy.einsum` 使用 `float32` 比 `float16` 或 `uint16` 运行得更快? [复制]

2023-12-05

在我使用 numpy 1.12.0 的基准测试中,计算点积float32 ndarrays比其他数据类型快得多:

In [3]: f16 = np.random.random((500000, 128)).astype('float16')
In [4]: f32 = np.random.random((500000, 128)).astype('float32')
In [5]: uint = np.random.randint(1, 60000, (500000, 128)).astype('uint16')

In [7]: %timeit np.einsum('ij,ij->i', f16, f16)
1 loop, best of 3: 320 ms per loop

In [8]: %timeit np.einsum('ij,ij->i', f32, f32)
The slowest run took 4.88 times longer than the fastest. This could mean that an intermediate result is being cached.
10 loops, best of 3: 19 ms per loop

In [9]: %timeit np.einsum('ij,ij->i', uint, uint)
10 loops, best of 3: 43.5 ms per loop

我尝试过分析einsum,但它只是将所有计算委托给一个C函数,所以我不知道这种性能差异的主要原因是什么。


我和你的测试f16 and f32数组表明f16所有计算都慢 5-10 倍。仅在进行数组等字节级操作时才有效copyfloat16 更紧凑的性质是否显示出任何速度优势。

https://gcc.gnu.org/onlinedocs/gcc/Half-Precision.html

该部分是否位于gcc关于半个浮点数的文档,fp16。有了正确的处理器和正确的编译器开关,就有可能以加速这些计算的方式安装 numpy。我们还必须检查是否numpy .h文件有任何对半浮点数进行特殊处理的规定。

较早的问题可能足以作为重复参考

Python Numpy 数据类型性能

Python numpy float16 数据类型运算和 float8?

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

为什么 `numpy.einsum` 使用 `float32` 比 `float16` 或 `uint16` 运行得更快? [复制] 的相关文章

随机推荐

  • Spring类路径前缀差异

    记录于4 7 2 2 类路径 前缀它指出 这个特殊的前缀指定所有 匹配的类路径资源 必须获得名字 在内部 这基本上发生 通过 ClassLoader getResources 调用 然后合并形成 最终应用程序上下文定义 有人可以解释一下吗
  • Tomcat:Web 应用程序中的自定义表单验证器,而不是作为独立的 JAR 模块。可能的?

    我们的 Web 应用程序需要内部具有特定逻辑的自定义表单身份验证 当前的表单验证器实现需要验证器模块 我们称之为custom auth jar 出现在 CATALINA HOME lib在 Web 应用程序启动之前 Web 应用程序使用该自
  • 使用 C# 从 Windows 服务捕获关键事件

    我必须用 C 编写一个应用程序来侦听按下的任何按键 实际上 我有一个条形码扫描仪发送 按键按下 事件 我需要听它 它的作用超出了我的问题范围 我的安全要求是不允许任何登录以任何形状或形式连接到机器并且这必须作为 Windows 服务运行 用
  • 查找最长的重复字符串及其在给定字符串中的重复次数

    例如 给定字符串 abc fghi bc kl abcd lkm abcdefg 该函数应返回字符串 abcd 以及 2 的计数 O n 2 解决方案似乎很简单 但我正在寻找更好的解决方案 Edited 如果不可能有比 O n 2 更好的方
  • 量词中的非零向量

    我想验证以下形式的公式 Exists p ForAll x 0 f x p gt 0 一个实现 不起作用 如下 def f0 x0 x1 x y return x1 2 y x0 2 x s Solver x0 x1 Reals x0 x1
  • 从大型固定宽度文本中解析未排序的数据

    我主要是一个 Matlab 用户和 Perl n00b 这是我的第一个 Perl 脚本 我有一个大型固定宽度数据文件 我想将其处理成带有目录的二进制文件 我的问题是数据文件非常大 并且数据参数按时间排序 这使得解析到 Matlab 变得困难
  • 请求调度程序转发后如何获取原始页面 url/uri

    我有一个 Error404Servlet 它在 web xml 中配置为 404 的错误页面
  • 如何使用 C# 获取 Webforms 中文本框的 GotFocus、LostFocus 事件

    创建网站时 我无法获取文本框的 GotFocus LostFocus 事件 我只是想 正如我之前在我的问题中所问的 当焦点是 winforms 中另一个文本框的文本时 如何将一个文本框的值放入另一个文本框 我能够以 Windows 形式完成
  • 如何在 Visual Studio 中自动设置代码格式?

    我知道 Visual Studio 可以自动格式化以使我的方法和循环正确缩进 但我找不到该设置 To format a selection Ctrl K Ctrl F To format a document Ctrl K Ctrl D S
  • 使用 Casperjs 清除本地存储

    我正在使用 casperjs 使用 localstorage 对backbonejs 应用程序进行一些测试 我的问题是使用 casperjs 测试时无法清除本地存储 我一直在尝试使用localStorage clear 在我的 casper
  • 在 P5.js 中旋转网格内的对象

    我正在尝试使用合适的 OOP 方法来让对象在网格单元格内单独旋转 我当前的结果是围绕 0 0 参考点旋转所有对象 而不是每个对象在其自己的单元格内旋转 当然 需要的是一个正确的翻译函数 但是当我尝试在innerSquare函数中应用它时tr
  • AngularJS 中的 lightGallery(jQuery 插件)

    我正在尝试获取 lightGallery jQuery 插件 http sachinchoolur github io lightGallery index html 与 AngularJS 一起使用 我发现一些答案表明我需要一个指令 所以
  • 将 CSS 选择器与 Javascript RegExp 相匹配

    基本上我需要对 CSS 文件中的所有 CSS 选择器进行模式匹配 理想情况下 它应该能够获取所有这些规则 以及某人可以在 CSS 文件中编写的任何其他规则 如果这有帮助的话 这是针对 javascript CSS 解析器的 div div
  • 我可以安全地依赖mysql中的列名大小写吗?

    我想使用驼峰式大小写命名我的 mysql 表列名称 并使用相同的驼峰式大小写名称从这些 mysql 表创建 php 类 我将自动生成这些 php 类 我想知道无论我在哪个平台上运行应用程序 是否都可以依赖列名大小写 例如 如果我将一个列名命
  • 通过OpenCV的camshift算法控制鼠标指针(或者鼠标的基本功能)

    我使用 EmguCV openCV 的包装 用 C 编写了一个程序 该程序使用 camshift 算法跟踪对象 在对象周围绘制一个矩形 光标移动到矩形的中心 输入来自网络摄像头 最初的问题是光标无法覆盖整个屏幕 它的运动受到框架尺寸的限制
  • 将 Jenkins Groovy Postbuild 步骤添加到所有作业

    怎么可以一样Jenkins Groovy 后期构建插件步骤是否添加到所有作业中 我们有 50 多个工作 因此很难将所需 Groovy 代码的链接复制粘贴到每个工作 我通常通过更新受影响作业的 config xml 来进行类似的批量更改 每个
  • 使用 JavaScript 进行井字游戏

    我正在使用 html css 和 JavaScript 编写一个 tic tac toe 游戏 我创建了按钮来获取输入markbox cell 函数和 deres 函数称为获胜条件 用于检查赢得游戏的条件 在我的代码中它没有检查winnin
  • Angular 6 无法自动从提供的对象中选择/绑定下拉列表值

    我从服务中获取一个国家 地区对象 并将其绑定到一个包含国家 地区下拉列表的表单 从服务检索国家 地区后 该国家 地区并未显示为选中状态 但所有其他数据均显示正常 包括绑定到下拉列表的字符串性别字段 不过 我可以从列表中手动选择国家 地区 如
  • 如何使用整数除法 SSE 指令? [复制]

    这个问题在这里已经有答案了 根据参考here应在 immintrin h 中定义以下函数 m128i mm idiv epi32 m128i a m128i b m128i mm idivrem epi32 m128i mem addr m
  • 为什么 `numpy.einsum` 使用 `float32` 比 `float16` 或 `uint16` 运行得更快? [复制]

    这个问题在这里已经有答案了 在我使用 numpy 1 12 0 的基准测试中 计算点积float32 ndarrays比其他数据类型快得多 In 3 f16 np random random 500000 128 astype float1