gpt4 book ai didi

performance - 当奇数/偶数线程在 CUDA 中执行不同操作时优化代码性能

转载 作者:行者123 更新时间:2023-12-03 17:10:58 26 4
gpt4 key购买 nike

我有两个大向量,我正在尝试进行某种元素乘法,其中第一个向量中的偶数元素乘以第二个向量中的下一个奇数元素......并且其中奇数元素第一个向量中的 - 编号元素乘以第二个向量中前面的偶数元素。

例如:

向量1是V1(1) V1(2) V1(3) V1(4)
向量 2 为 V2(1) V2(2) V2(3) V2(4)
V1(1) * V2(2)
V1(3) * V2(4)
V1(2) * V2(1)
V1(4) * V2(3)

我已经编写了 Cuda 代码来执行此操作(Pds 具有共享内存中第一个向量的元素,Nds 具有第二个向量):

// instead of % 2, checking the first bit to decide if a number
// is odd/even is faster

if ((tx & 0x0001) == 0x0000)
Nds[tx+1] = Pds[tx] * Nds[tx+1];
else
Nds[tx-1] = Pds[tx] * Nds[tx-1];
__syncthreads();

是否有办法进一步加速此代码或避免发散?

最佳答案

您应该能够像这样消除分支:

int tx_index = tx ^ 1; // equivalent to: tx_index = (tx & 1) ? tx - 1 : tx + 1
Nds[tx_index] = Pds[tx] * Nds[tx_index];

关于performance - 当奇数/偶数线程在 CUDA 中执行不同操作时优化代码性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856758/

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