据我了解,当前进行整数除法的方法是在硬件中计算倒数,然后执行乘法。
我有一些 C# 代码,其中大量时间花费在整数除法上,并且值很少更改,以至于可以缓存它们的值。
我想在软件中执行硬件算法,即计算除数的倒数并将所有这些除法转换为乘法。有谁知道执行此转换的算法,或者更好的是,CLR 中是否有某些东西可以自动执行此转换?
我使用ConcurrentDictionary来创建一个简单的对象缓存.如果密钥不存在,我试图以原子方式将项添加到集合中,或者如果密钥已存在则替换前一项,即"AddOrReplace".似乎没有明显的方法来做到这一点.有人可以提出建议吗?
我正在试验非时间指令,并且已经熟悉具有普通加载/存储的围栏如何操作。
Intel 定义了一个与非时间操作相关的内在,_mm_sfence,手册将其定义为:
保证每个前面的商店在任何后续商店之前都是全局可见的。
我对这个操作有一些疑问。
我试图以与“as of”连接非常相似的方式连接两个表,除了不是选择具有最后一个时间戳的行进行连接(假设它们按时间顺序排序),我想加入最接近的时间戳。例如:
q)t: ([]time:10:00:06 10:00:03 10:00:04;sym:`msft`ibm`ge;qty:100 200 150)
q)t
time sym qty
-----------------
10:00:06 msft 100
10:00:03 ibm 200
10:00:04 ge 150
q)q: ([]time:10:00:00 10:00:00 10:00:02 10:00:07 10:02:00;sym:`ibm`msft`msft`msft`ibm;px:100 99 101 102 98 )
q)q
time sym px
-----------------
10:00:00 ibm 100
10:00:00 msft 99
10:00:02 msft 101
10:00:07 msft 102
10:02:00 ibm 98
Run Code Online (Sandbox Code Playgroud)
加入时的标准:
q)aj[`sym`time;t;q]
time sym qty px
---------------------
10:00:06 msft 100 101 //10:00:02 is closest timestamp that is not greater than 10:00:06, so that px is chosen
10:00:03 …Run Code Online (Sandbox Code Playgroud)