《C++ AMP:用Visual C++加速大规模并行计算》——3.9 数学库函数

简介:

本节书摘来自异步社区出版社《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多行相关内容,在这里把它们全部列出来是不现实的。但是,我们可以简要地列出一些可能会有用的函数分类。

三角函数:cossintanarccosarcsinarctan,加上6个双曲三角函数
根函数和幂函数:sqrtcbrtpow
简单操作:ceilfloorroundrunccopysignabsmodmaxmin
指数:expe的x次方),expm1e的x减1次方)、exp22的x方)、exp1010的x方)等
对数:log以e为底)、log10log2log1p(以e为底的(x+1)的对数)等
复合操作,例如fdim(如果为正是x−y,否则是0)、fma(x*y+z)hypot(求平方和后的平方根)
如果你一贯使用标准库中的数学函数,那么很可能它们已经在amp_math.h中有了对应的restrict(amp)版本。还有一个命名空间concurrency::precise-math,里面是函数的双精度版本,但我们只能在支持双精度数的加速器上使用它们。12.7节有更多关于双精度数支持的信息。

相关文章
|
1月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
65 6
|
1月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
1月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
70 5
|
1月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
53 1
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
47 6
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
25 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
24 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
177 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
33 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
42 0
C++入门6——模板(泛型编程、函数模板、类模板)
下一篇
无影云桌面