OpenACC:设备类型

问题描述

我看到很多功能,例如select * from esc shipment . shipment search where shipper id like '1334'; ,需要输入设备类型作为输入。我使用int acc_get_num_devices()返回devtype = 2。

(在文档中: acc_get_num_devices(设备类型) 返回指定类型的设备数量

这2代表什么?有哪些设备类型?设备类型是整数吗?

(对我来说,这似乎很荒谬,我无法在文档中找到这些信息)

解决方法

有关device_type用法的一般说明,请参见specification的2.4节。另请参见附录A(不是规范的正式组成部分),以获取有关您可能会遇到的典型设备类型的建议。

device_type用于指定特定的加速器类型,它是定义的实现。因此,可供选择的特定类型将由您使用的具有OpenACC意识的编译器定义。

使用PGI编译器实现,device_type的选择应与-ta=...编译器开关的可用选择相对应。

在OpenACC伪指令上典型使用device_type子句的目的是(进一步)调节特定设备类型的伪指令的行为。例如,特定的优化(例如选择要使用的向量长度)可以以在特定的device_type上运行为条件。

Here是一个特定的(过时的)示例。 device_type用于并行化特定循环,或按顺序运行它,具体取决于您实际运行的设备类型。我说过时是因为我不认为-ta=radeon是最新版本的PGI OpenACC编译器(在17.x之后)受支持的配置。您可以在this blogthis blog

中看到device_type用法的另一个示例

我相信在C / C ++中,数据类型是枚举类型,而在Fortran中,它的形式可能是整数。自然地,在C / C ++中,枚举可能具有基础整数关联。与其担心特定实现中特定整数值的含义,不如使用枚举/定义来引用这些整数。