CUsparse ch2 使用cusparse应用程序编程接口(API)

来源:互联网 发布:毛妹100能量伤害数据 编辑:程序博客网 时间:2024/05/20 12:46

使用cusparse应用程序编程接口(API)

本章叙述如何使用cusparse API.本章不是cusparse API数据类型和函数的参考,这些内容在后续章节中。

2.1    线程安全

该库是线程安全的,并且其功能可以从多个主机线程调用。

2.2 标量参数

在cusparse API中,标量参数α和β可以通过设备或者主机上的引用来传递。

几个返回标量结果的函数,例如doti()和nnz(),通过主机或设备上的引用返回结果值。尽管这些函数同那些返回矩阵或者向量结果的函数一样,立即返回,标量结果仍要等GPU上的例程完成之前才能准备好。这就需要在从主机读取结果时使用适当的同步。该功能允许cusparse库函数在即使参数α和β通过前一核心生成时,使用流来完全异步执行。例如,当库用来实现迭代方法求解线性方程组和特征值问题时,这种情况会发生。

并行流

如果应用程序执行几个独立的小运算,或者如果它在并行计算中使用数据传输,可以使用CUDA流使这些任务重叠。应用程序概念上可以为每一个任务关联一个流。为了实现计算人物之间的重叠,开发者需要使用函数cudaStreamCreate()来创建CUDA流并在调用实际的cusparse例程时通过调用cusparseSetStream()函数来设置每个流被独立的cusparse 库例程使用。

然后,如果可能,在单独的流中执行的计算将自动的在 GPU上重叠。当执行由单一任务的计算是相对较小,并不足以填补 GPU 的工作,或者时可以进行并行计算与数据传输,这种方法是特别有用。

当使用流时,我们建议使用新的 cuSPARSE API,新的API带标量参数和通过在设备内存中引用的结果来实现最大计算重叠。

虽然开发人员可以创建许多流,然而在实践中不可能有超过 16 并发的内核在同一时间执行。


水平有限,仅供参考。

参考文档:http://docs.nvidia.com/cuda/cusparse/index.html#axzz49iopDHZG

0 0
原创粉丝点击