gpt4 book ai didi

c++ - 向量化嵌套循环 - SIMD

转载 作者:行者123 更新时间:2023-11-28 08:04:43 25 4
gpt4 key购买 nike

有谁知道使用 SIMD 来向量化这样的东西:

for(size_t i = 0; i < refSeq.length() / 4; i++){

for(size_t j = 0; j<otherSeq.length(); j++){
if(refSeq[i] == otherSeq[j]){
if(i == 0 || j == 0)
L[i][j] = 1;
else
L[i][j] = L[i-1][j-1] + 1;
}
else
L[i][j] = 0;
}
}

最佳答案

出于某种原因,@arunmoezhi 的解决方案没有自动向量化。 https://godbolt.org/z/KM4fh8TY7

.L8:
mov edx, DWORD PTR [rax+4+r8]
cmp DWORD PTR [rcx], edx
je .L5
mov DWORD PTR [rsi+4+rax], 0
add rax, 4
cmp rdi, rax
jne .L8

这是 eve 的实现图书馆虽然:https://godbolt.org/z/j8Kva8caP

主循环看起来像这样 (avx2) 只是展开:

.LBB0_5:                                # =>This Inner Loop Header: Depth=1
vmovdqu ymm2, ymmword ptr [rax + rcx]
vpcmpeqd ymm3, ymm0, ymmword ptr [rsi + rcx]
vpsubd ymm2, ymm2, ymm1
vpand ymm2, ymm3, ymm2
vmovdqu ymmword ptr [rdi + rcx], ymm2
lea rbx, [rsi + rcx]
add rbx, 32
add rcx, 32
cmp rbx, r11
jne .LBB0_5

关于c++ - 向量化嵌套循环 - SIMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10508440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com