在现代(SSE2 +)x86处理器上合并多达4096个32位浮点数的数组的排序子集的快速方法是什么?
请假设以下内容:
可行性的主要标准:比in-L1 LSD基数排序更快.
考虑到上述参数,我很想知道是否有人知道这样做的合理方法!:)
如果我们有K组可能重叠的三角形,那么计算一组新的,不重叠的三角形的计算效率是多少?
例如,考虑这个问题:

这里我们有3个三角形集A,B,C,有一些相互重叠,并希望获得非重叠集A',B',C',AB,AC,BC,ABC,其中例如AC中的三角形将包含A和C之间独有重叠的表面; 和A'将包含A的表面,它们不与任何其他集合重叠.
有谁知道在现代x86系统上将哪种类型的CPU缓存行为或策略(例如,不可缓存的写入组合)分配给内存映射文件支持的区域?
有没有办法检测是哪种情况,并可能覆盖默认行为?
Windows和Linux是您感兴趣的主要操作系统.
(编者注:此问题以前被称为内存映射I/O,但该短语具有不同的特定技术含义,特别是在谈论CPU缓存时.即与负载通信的实际I/O设备,如NIC或视频卡/商店.
这个问题实际上是关于什么样的内存mmap(some_fd, ...),当你不使用MAP_ANONYMOUS并且它由磁盘上的常规文件支持时.)
问题
是否有任何计算上可行的方法来使用x86 SIMD指令对一组整数进行寄存器重复数据删除?
示例
我们有一个4元组寄存器R1 = {3,9,2,9},并希望获得寄存器R2 = {3,9,2,NULL}.
限制
稳定性.保存输入顺序没有意义.
输出.但是,任何删除的值/ NULL必须位于寄存器的开头和/或末尾:
如果知道产生一种特定的输出格式,这显然是一个奖励.请假设NULL有效地表示0(零).
一般性.必须能够容忍没有重复项,并且在这种情况下产生相当于输入寄存器的输出.
指令集.我正在寻找以下任何或所有解决方案:SSE2-SSSE3; SSE4.x; AVX,AVX2
我有一个有向图数据结构,我试图为每个顶点实现单独的版本控制.这会产生一些有趣的场景,我非常感谢你们有任何想法.具体来说,我希望在遇到所述方案时解决系统的默认行为.
请参见下图:图形版本
场景1:"空指针悖论"
顶点A回滚到版本1.0.由于此回滚将级联其子图,因此C将不再指向D.这可能会产生危险.行为应该是:
场景2:"间接影响"
顶点D已更新,因此以下内容成立:
顶点A现在回滚到版本1.2,因此以下内容成立:
默认行为应该是:
version-control database-design graph-theory graph data-structures
有没有人想过如何计算SSE4.x中8位整数向量的模式(统计量)?为了澄清,这将是128位寄存器中的16x8位值.
我希望结果作为矢量掩码选择模值元素.即结果_mm_cmpeq_epi8(v, set1(mode(v))),以及标量值.
提供一些额外的背景; 虽然上面的问题本身就是一个有趣的问题,但我已经通过线性复杂度可以想到的大多数算法.这个课程将消除我从计算这个数字中获得的任何收益.
我希望在这里与大家一起寻找一些深刻的魔法.这有可能是一个近似值可能需要打破这种结合,例如"选择一个频繁出现的元素"例如(NB差针对最),这将是值得的.概率答案也是可用的.
SSE和x86有一些非常有趣的语义.可能值得探索超优化传递.
假设我们故意使DTLB崩溃,并且希望继续使用clflush内存区域从L1-3刷新特定的高速缓存行,该内存区域(很可能)与TLB条目指向的地址不相交; 这实际上会把我们正在刷新的缓存行的页面基地址带回TLB吗?
简而言之,clflush触摸TLB究竟是什么?我假设由于这条指令尊重一致性,它随后将该行写回内存(显然需要TLB查找.)