gpt4 book ai didi

CUDA可以做argmax吗?

转载 作者:行者123 更新时间:2023-11-30 16:02:07 32 4
gpt4 key购买 nike

问题说明了一切;

假设每个线程都在做类似的事情

value=blockDim.x*blockIdx.x+threadIdx.x;
result=f(value);

其中 f 是一个设备函数,通过添加atomicMax() 调用很容易找到最大结果,但是如何找出该值是什么?

最佳答案

这有道理吗?只需添加一个 if 语句,将最大结果与线程的结果进行比较。如果匹配,则保存线程的值。

value=blockDim.x*blockIdx.x+threadIdx.x;
result=f(value);
atomicMax(max,result);

if result==*max:
max_value = value;

或者,也许您需要指定多个线程具有最大结果时的行为...例如采用最低线程:

value=blockDim.x*blockIdx.x+threadIdx.x;
result=f(value);
atomicMax(max,result);

if result==*max:
atomicMin(max_value,value);
<小时/>

也就是说,如果您要找到每个线程的最大结果,您将需要使用归约而不是atomicMax。如果我理解正确的话,atomicMax 函数基本上是串行执行的,而归约则主要是并行执行的。当您使用归约时,您可以手动跟踪该值以及结果 - 这就是我所做的。 (尽管上面的 if 语句方法也许在归约结束时也能起作用。我可能必须在我的代码中尝试一下......)

关于CUDA可以做argmax吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5709970/

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