问题标签 [system.numerics]
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.
c# - C# 可以使用融合乘加吗?
如果 C# 编译器/抖动在所使用的硬件上可用,是否使用融合乘加操作?如果是这样,是否需要设置任何特定的编译器设置才能利用它?
c# - 带有 System.Numerics 的向量数学
我有以下代码旋转向量并始终将结果保持在正 x,y,z 平面中。我想重构代码以使用 System.Numerics 类型 Vector3 和 Matrix4x4。谁能帮我翻译一下。
到目前为止,我已经设法重新考虑了这一点,但我被困在 matAdjoin
c# - x86 中的 C# SIMD 优化代码
System.Numerics.Vectors 最近被添加到 .NET Framework 以添加 SIMD 支持,但据我所知,它仅适用于 x64。我还看到它仍在积极开发中,新版本刚刚在 6 月 27 日发布,但没有发布说明描述这些变化。 https://www.nuget.org/packages/System.Numerics.Vectors/4.1.1
我的问题是:有没有办法在 C# 中为 x86 代码添加 SIMD 优化?
到目前为止,唯一的方法是创建一个单独的 C++ 项目,该项目可以嵌入到 DLL 中并在运行时提取,但这不是一个很好的解决方案。
c# - 将 C# System.Numerics.Vector 更改为可变?
我正在考虑System.Numerics.Vector
在涉及大量数学计算的 C# 项目中使用。这个包吸引我的主要是硬件加速功能。但是,据说数据结构是不可变的,而在我的场景中,多个向量会频繁更新。我发现没有像Builder
inSystem.Collection.Immutable
包这样的东西,所以我能想出的唯一方法就是每次需要更改它时都生成一个新的向量,这非常耗时。
知道我应该如何处理这个问题吗?或者是否有任何其他包可以在 C# 中进行快速矢量数学运算?
.net - 我可以用 Vector 做检查算术吗
我一直在尝试使用Vector来使用 HW 来并行化整数运算。有没有办法通过向量操作启用溢出检查?
一个例子是将两列(等长数组)的整数加在一起。这里c=a+b
表示c[0] = a[0] + b[0]
,c[1] = a[1] + b[1]
等。
我想我可以做这样的事情:
但这(分支)可能比 .Net 的自动溢出检查慢,并且可能会抵消使用 .Net 的性能优势Vector<T>
。
我们还想优化我们最常用的运算:乘法、减法,以及较小程度的整数除法。
编辑:我想了更多,想出了这个,它比未经检查的向量加法慢 2.5 倍。似乎有很多额外的开销。
时序:(4k 次迭代添加一对 100k 数组)
- 正常添加:618ms
- 正常检查添加:1092ms
- 矢量添加:208ms
- 矢量检查添加:536ms
c# - 使用 System.Numerics 进行矩阵乘法的值完全错误
尽管System.Numerics.Vectors
可以通过 NuGet 获得的库有自己的视图和投影矩阵函数,但我想自己实现它,只使用向量和矩阵结构。
不幸的是,当我的目标向量与(正确的)视图矩阵相乘时,我已经得到了一个完全错误的结果。我正在使用右手坐标系和以下说明
具有以下功能
在我上面的示例中,预期的视图矩阵是
并且vMatrix4
确实具有相同的价值。然而,乘以vMatrix4
应该targetVector4
产生<1, 0.894427, -4.91935, 1>
但 Visual Studio 报告<1, -0.8944272, -0.4472136, 5.472136>
。
我的问题是,库在计算结果时是否存在数值问题,是否存在数据类型不匹配或者我是否使用Vector4.Transform
错误地期望它返回ViewMatrix * TargetVector
。
编辑
使用以下自定义扩展方法时
调用targetVector4.ApplyMatrix(targetVector4)
产生正确的结果。这意味着内部Vector4.Transform
似乎做了一些非常出乎意料的事情。
c# - Vector.Dot 无法正常工作
我正在尝试使用System.Numeric.Vectors
nuget 包(版本 4.4.0),但以下代码无法按预期工作:
代码在 x64 Release .NET 4.7 版本中引发异常,并带有消息:Expected 168 actual -458674576 (cnt: 4, acc:True)
。
Vector 没有硬件加速的所有其他构建都会给出正确的结果。
这是 RyuJIT 中的错误还是我做错了什么?
编辑
替换为 后int
,float
代码给出了正确的结果。此代码是否无法达到int
预期结果?
c# - System.Numerics.Vector.ConditionalSelect 用于什么?
谁能用一个例子最好地解释一下什么/何时/如何System.Numerics.Vector.ConditionalSelect
使用?
我无法从文档中了解很多。
c# - 如何使用 SIMD 计算数组中某个字节的出现次数?
给定以下输入字节:
和给定的面具:
如何找到55
输入数组中的字节数?
我试过用以下方法vBytes
异或mask
:
这使:
<127、82、0、91、91、88、0、96、88、69、91、0、83、0、0、35>
但不知道我怎么能从中得到计数。
为简单起见,我们假设输入字节长度始终等于Vector<byte>.Count
.
c# - 如何将相机添加到 Matrix4x4 旋转
我正在尝试使用 System.Numerics.Matrix4x4 和 SDL2 旋转立方体以进行图形输出。我很难理解矩阵旋转的概念。
我可以做到,就像这样:
然后我在立方体中的点上使用 Vector3.Transform() 并在它们之间画线。看起来……好吧,它在原地旋转。但是我如何获得透视?如何让相机融入其中?
这个方法怎么样:
我不确定我应该如何在那里使用向量,或者它应该做什么。我的立方体奇怪地生长和伸展......参见当矩阵在立方体上应用 10、45 和 90 度时的图片:
https://www.dropbox.com/s/hui5jvky7cexciq/10_45_90.png?dl=0
我应该如何正确地做到这一点?