【发布时间】:2021-01-22 05:36:54
【问题描述】:
我看到很多函数,例如acc_get_num_devices(),需要输入设备类型。我使用了返回 devtype=2 的 int devtype=acc_get_device_type()。
(在文档中: acc_get_num_devices( 设备类型 ) 返回指定类型的设备数量)
这个 2 是什么意思?有哪些设备类型?设备类型是整数吗?
(对我来说似乎很荒谬,我在文档中找不到这些信息)
【问题讨论】:
我看到很多函数,例如acc_get_num_devices(),需要输入设备类型。我使用了返回 devtype=2 的 int devtype=acc_get_device_type()。
(在文档中: 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 blog 和this blog 中看到另一个使用device_type 的示例
我相信在 C/C++ 中,数据类型是枚举类型,而在 Fortran 中,它可能形式上是整数。自然地,在 C/C++ 中,枚举可能具有底层整数关联。与其担心特定实现中特定整数值的含义,不如使用枚举/定义来引用这些。
【讨论】: