本节书摘来自异步社区出版社《C++ AMP:用Visual C++加速大规模并行计算》一书中的第3章,第3.1节,作者: 【美】Kate Gregory , Ade Miller,更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.9 数学库函数
C++ AMP:用Visual C++加速大规模并行计算如前所述,我们不能只在parallel_for_each中调用来自“核函数”的函数。调用函数应该在代码生成时可见,应该使用restrict(amp)标记。如果我们要转换现有代码,就需要做出必要的调整。我们也有可能会调用sqrt()或sin()等库函数。因此,需要使用加速器兼容版本替换这些调用。好消息是amp_math.h里定义了成百上千的此类函数,它们全都在命名空间concurrency::fast-math下。那个文件里有4 000多行相关内容,在这里把它们全部列出来是不现实的。但是,我们可以简要地列出一些可能会有用的函数分类。
三角函数:cos、sin、tan、arccos、arcsin、arctan,加上6个双曲三角函数根函数和幂函数:sqrt、cbrt、pow简单操作:ceil、floor、round、runc、copysign、abs、mod、max、min等指数:exp(e的x次方),expm1(e的x减1次方)、exp2(2的x方)、exp10(10的x方)等对数:log(以e为底)、log10、log2、log1p(以e为底的(x+1)的对数)等复合操作,例如fdim(如果为正是x−y,否则是0)、fma(x*y+z)、hypot(求平方和后的平方根)如果你一贯使用标准库中的数学函数,那么很可能它们已经在amp_math.h中有了对应的restrict(amp)版本。还有一个命名空间concurrency::precise-math,里面是函数的双精度版本,但我们只能在支持双精度数的加速器上使用它们。12.7节有更多关于双精度数支持的信息。
相关资源:七夕情人节表白HTML源码(两款)