在Kepler 架构白皮书中,NVIDIA 声明SMX 上有32特殊功能单元 (SFU) 和32加载/存储单元 (LD/ST)。
SFU 用于“快速近似超越运算”。不幸的是,我不明白这是什么意思。另一方面,在SFU 的特殊 CUDA 双精度触发函数中,据说它们只能在单精度下工作。这在 K20Xm 上仍然正确吗?
LD/ST 单元显然用于存储和装载。通过这些论文之一是否需要任何内存加载/写入?它们是否也用作单一经线?换句话说,是否可以只有一个当前正在写入或读取的经线?
干杯,安迪
我创建一个函数,它返回由变量指定的值.喜欢
y = 1.
def f(x):
return y
Run Code Online (Sandbox Code Playgroud)
我需要此函数作为函数对象来创建另一个对象
dist = dist.distribution(f, other_variables)
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,如果我想创建几个不同的分布对象(在y改变的意义上具有不同的函数f)就像
dist = dist.distribution(f, other_variables)
y = 2.
dist2 = dist.distribution(f, other_variables)
Run Code Online (Sandbox Code Playgroud)
然后,所有分布对象仅返回最后指定的值y.即
dist.f()(1.)
>>>> 2.
dist2.f()(1.)
>>>> 2.
Run Code Online (Sandbox Code Playgroud)
而不是预期的
dist.f()(1.)
>>>> 12.
dist2.f()(1.)
>>>> 2.
Run Code Online (Sandbox Code Playgroud)
问题显然是,函数f仅在调用变量时才访问变量,而不是最初访问变量.
有办法解决吗?我最终想要的是:一个只有一个变量的函数(x,虽然在这种情况下这不做任何事情,但在其他情况下需要它),它在创建分布时返回当下y的值.因此原则上我希望在分布的初始化时,给定的函数是深度复制的,在某种意义上,它不再受变量的任何变化的影响.这可能吗?