我想矢量化两个内存对齐数组的乘法.我没有找到任何方法在AVX/AVX2中乘以64*64位,所以我只是循环展开和AVX2加载/存储.有更快的方法吗?
注意:我不想保存每次乘法的高半结果.
void multiply_vex(long *Gi_vec, long q, long *Gj_vec){
int i;
__m256i data_j, data_i;
__uint64_t *ptr_J = (__uint64_t*)&data_j;
__uint64_t *ptr_I = (__uint64_t*)&data_i;
for (i=0; i<BASE_VEX_STOP; i+=4) {
data_i = _mm256_load_si256((__m256i*)&Gi_vec[i]);
data_j = _mm256_load_si256((__m256i*)&Gj_vec[i]);
ptr_I[0] -= ptr_J[0] * q;
ptr_I[1] -= ptr_J[1] * q;
ptr_I[2] -= ptr_J[2] * q;
ptr_I[3] -= ptr_J[3] * q;
_mm256_store_si256((__m256i*)&Gi_vec[i], data_i);
}
for (; i<BASE_DIMENSION; i++)
Gi_vec[i] -= Gj_vec[i] * q;
}
Run Code Online (Sandbox Code Playgroud)
更新:
我正在使用Haswell微体系结构和ICC/GCC编译器.所以AVX和AVX2都很好.我在乘法循环展开后-=
用C inrisic 替换_mm256_sub_epi64
它,在那里得到一些加速.目前,它是ptr_J[0] *= q; ...
我用, …
我有两个表的列SessionOrder
.此列是整数数据类型,并具有以下索引:CREATE INDEX OSIDX_<internal name> ON <Entity>
.
我正在执行以下查询:
SELECT i_0.rn, i_1.rn
FROM (
SELECT "RawEvent"."SessionOrder" as rn
FROM "RawEvent" i_0
WHERE something = 12
)
INNER JOIN (
SELECT "RawEvent"."SessionOrder" as rn
FROM "RawEvent" i_1
WHERE something = 14
) ON i_0.rn > i_1.rn
Run Code Online (Sandbox Code Playgroud)
这个查询的问题是ON i_0.rn > i_1.rn
太慢而且超时.我替换它ON i_0.rn = i_1.rn
,它非常快,但显然不会产生预期的结果.
有人知道一种方法来提高此查询的性能,避免超时吗?这个问题的另一个目标是理解它为什么会有糟糕的表现ON i_0.rn > i_1.rn
.
PS:无法增加超时时间
Monaco 存储库的 FAQ 部分说不可能在浏览器的 Monaco 编辑器上执行 VS Code 扩展。如果我理解正确,扩展具有服务器依赖性。因此,应该可以将 Monaco 编辑器中的扩展与服务器集成(例如 npm run simpleserver)。
例如,我希望在 Monaco 编辑器中集成Better Merge扩展。那可能吗?我该怎么做?
我想创建一个系统来存储Undo&Redo stack
Monaco编辑器.
为什么?:我有一个Monaco实例,我做了几处修改.然后我必须处理该实例并打开一个新实例.在这里,我想恢复与前一个实例中相同的堆栈状态.
问题:如何获取和恢复Undo&Redo stack
?
更新:
当我处理Monaco编辑器实例时,JavaScript环境可以完全销毁.它集成在一个C#
能够与之通信的环境中JS
.我的目标是存储Monaco Editor model
在C#
或序列化.