Tag:

使用Vector 运行比经典循环慢的SIMD矢量化C#代码

我已经看过一些文章,描述了Vector是如何启用SIMD并使用JIT内在函数实现的,因此编译器在使用时会正确输出AVS / SSE / …指令,允许比经典线性循环更快的代码( 这里的例子)。 我决定尝试重写一个方法,我必须看看我是否设法获得了一些加速,但到目前为止我失败了,矢量化代码的运行速度比原来快3倍,而且我不确定为什么。 以下是两个版本的方法,检查两个Span实例是否具有相同位置的所有项对,它们相对于阈值共享相同的位置。 // Classic implementation public static unsafe bool MatchElementwiseThreshold(this Span x1, Span x2, float threshold) { fixed (float* px1 = &x1.DangerousGetPinnableReference(), px2 = &x2.DangerousGetPinnableReference()) for (int i = 0; i threshold != px2[i] > threshold) return false; return true; } // Vectorized public static unsafe bool MatchElementwiseThresholdSIMD(this Span […]

XmlSerializer:如何反序列化不再存在的枚举值

我正在使用XMLSerializer将此类保存到文件中。 该类有一个字符串和一个枚举,如下所示: public class IOPoint { string Name {get; set;} TypeEnum {get; set;} } public enum TypeEnum { Temperature, Pressure, Humidity, } 序列化时,它看起来像这样。 Relative Humidity Humidity 我一直在序列化和反序列化这个对象,几个版本都没有问题。 我不再想支持湿度,所以我将它从枚举中删除了。 但是,这会在从XML反序列化时导致exception,因为TypeEnum字段中的值Humidity不是TypeEnum的有效值。 这是有道理的,但如何处理呢? 我想做的就是忽略这个错误。 并将值保留为null。 我已经尝试实现OnUnknownElement XmlDeserilizationEvent类。 不幸的是,这并没有发现这个错误。 关于如何捕获和忽略此错误的任何想法(我可以在反序列化完成后清理)。 米奇

调试器Visualizer和“类型未标记为可序列化”

我正在尝试创建一个调试器可视化器,它将显示任何Control控件层次结构。 它已经完成,但我得到了exception“类型未标记为可序列化” 。 我该如何克服这个问题? Control是.NET Windows Forms框架类型,我无法将其标记为可序列化。

为什么我的属性声明“”中需要“field:”?

我无法在任何地方找到“字段”列为C#关键字。 有谁知道这个背景?