问题标签 [vector-processing]
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.
gcc - 如何使用 gcc 进行矢量化?
v4 系列编译器可以使用一些现代 CPU 上的SIMDgcc
处理器自动矢量化循环,例如 AMD Athlon 或 Intel Pentium/Core 芯片。这是怎么做到的?
gcc - 除了 gcc 还有哪些编译器可以向量化代码?
当指定某些选项并给出正确的条件时,GCC 可以自动矢量化循环。是否有其他广泛可用的编译器可以做同样的事情?
gcc - 自动矢量化的实际使用?
有没有人利用 gcc 可以做的自动矢量化?在现实世界中(与示例代码相反)?是否需要重组现有代码才能利用?在任何生产代码中是否有大量可以通过这种方式矢量化的案例?
optimization - 自动矢量化与手动矢量化代码
在某种意义上,手动矢量化代码,使用显式编译指示还是依赖或使用自动矢量化更好?为了使用自动矢量化获得最佳性能,必须监视编译器输出以确保循环被矢量化或修改它们直到它们可矢量化。
使用手动编码,可以确定正在发出所需的指令,但现在代码可能不可移植(对于其他架构或其他编译器)。
functional-programming - Clojure 中的可插拔向量处理单元
我正在 Clojure 中开发一些需要处理大量矢量数据的模拟软件(基本上源自 Java 浮点数组的偏移量,长度通常在 10-10000 范围内)。大量这些向量将需要经过各种处理步骤 - 例如标准化向量、将两个向量流连接在一起、计算移动平均值等。
我希望做的不是以命令式风格做所有事情,而是创建一个更具函数式风格的 Clojure 解决方案,该解决方案将执行以下操作:
- 允许将任何向量函数转换为可插入模块,例如 (def module-a (make-module some-function))
- 允许在管道中组合这些模块,例如 (def combine-module (combine-in-series module-a module-b)) 会将 module-a 的输出馈送到 module-b 的输入
- 允许辅助函数访问存储在给定模块中的状态,例如(get-moving-average some-moving-average-module),即使 some-moving-average-module 嵌入到组合管道中的深处,它也需要工作
- 在幕后隐藏任何样板代码,例如为向量计算分配足够大的临时数组。
这听起来像一个明智的方法吗?
如果是这样,任何可能有帮助的实现提示或库?
x86 - 使用 AVX 指令进行水平向量求和的最快方法
我有四个 64 位浮点值的压缩向量。
我想得到向量元素的总和。
使用 SSE(并使用 32 位浮点数)我可以执行以下操作:
不幸的是,尽管 AVX 具有 _mm256_hadd_pd 指令,但它的结果与 SSE 版本不同。我相信这是因为大多数 AVX 指令分别作为每个低 128 位和高 128 位的 SSE 指令工作,而从未跨越 128 位边界。
理想情况下,我正在寻找的解决方案应遵循以下准则:
1)仅使用 AVX/AVX2 指令。(无 SSE)
2)在不超过 2-3 条指令中完成。
但是,任何有效/优雅的方法(即使不遵循上述准则)总是被广泛接受。
非常感谢您的帮助。
——路易吉·卡斯特利
x86 - 如何在 256 位 AVX 向量中找到水平最大值
我有一个包含四个 64 位浮点值的 __m256d 向量。
我需要找到向量元素的水平最大值并将结果存储在双精度标量值中;
我的尝试最终都使用了大量的向量元素洗牌,使得代码不是很优雅也不是很高效。另外,我发现不可能只停留在 AVX 域中。在某些时候,我不得不使用 SSE 128 位指令来提取最终的 64 位值。但是,我想在最后一个陈述中被证明是错误的。
所以理想的解决方案是:
1)只使用 AVX 指令。
2)尽量减少指令数量。(我希望不超过 3-4 条指令)
话虽如此,任何优雅/高效的解决方案都将被接受,即使它不遵守上述准则。
谢谢你的帮助。
-路易吉
fortran - 是否可以在 Fortran 中找到向量处理器的最大向量长度?
如果处理器是矢量的,是否可以在 Fortran 中进行测试并找出矢量的最大长度?
我检查了如下所列的 cpuinfo
go - 可以使用 Go 实现 VPP 插件吗?
VPP 提供了用于开发自定义插件的 I/S,这些插件可以连接到节点图中。我只看到过用 C 语言编写的此类插件的示例,并且想知道是否也可以使用其他语言(例如 Go)来编写此类插件。
processor - 向量和数组处理器之间的区别
有人可以解释一下向量和数组处理器之间的区别,这是在学习并行编程所涉及的计算机体系结构时遇到的吗?
我提到的一个来源 告诉矢量处理器也称为数组处理器。这有点令人困惑。先感谢您!