Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 现有OpenACC编译器是否支持包含可分配数组的派生类型?_Fortran_Openacc_Pgi - Fatal编程技术网

Fortran 现有OpenACC编译器是否支持包含可分配数组的派生类型?

Fortran 现有OpenACC编译器是否支持包含可分配数组的派生类型?,fortran,openacc,pgi,Fortran,Openacc,Pgi,是否有任何OpenAcc编译器支持将包含可分配数组的派生类型复制到GPU或从GPU复制到GPU,并在加速代码中使用它们 OpenACC规范(v2.0)指出这是可能的,但我找不到它在任何地方的编译器中实现。PGI编译器支持派生类型,但似乎不支持包含可分配数组的类型(请参阅)。虽然这可能已经改变了,但它似乎没有在任何地方公开(很好)。目前我无法访问Cray或CAPS编译器,PGI编译器不支持此功能。一个合适的解决方法似乎是在派生类型中创建一个指向可分配数组的指针,并使用copy子句将其复制到GPU。

是否有任何OpenAcc编译器支持将包含可分配数组的派生类型复制到GPU或从GPU复制到GPU,并在加速代码中使用它们


OpenACC规范(v2.0)指出这是可能的,但我找不到它在任何地方的编译器中实现。PGI编译器支持派生类型,但似乎不支持包含可分配数组的类型(请参阅)。虽然这可能已经改变了,但它似乎没有在任何地方公开(很好)。

目前我无法访问Cray或CAPS编译器,PGI编译器不支持此功能。一个合适的解决方法似乎是在派生类型中创建一个指向可分配数组的指针,并使用
copy
子句将其复制到GPU。如果PGI编译器的未来版本支持这种深度复制,那么我将更新答案。

您认为OpenACC 2.0在哪里说明了这一点

我在2013年6月2.0版中找到的相关参考是:

第13页“完全支持Fortran派生类型和派生类型成员,包括可分配和指针成员。”

第26-27页“在Fortran中,如果指定了派生类型的变量或数组,则会根据需要分配和复制该派生类型的所有成员。如果任何成员具有OpenACC编程接口27可分配或指针属性,则不会复制通过该成员访问的数据。”

第二个引用明确指出,目前不支持在派生类型内复制可分配对象和指针对象的内存

技术委员会正在努力“解决这个问题”,但是,解决方案尚未发布


Cray提供了一个命令行选项来启用对“深度复制”的支持。这是一个Cray扩展,因此不是一个可移植的解决方案。

AFAIK、PGI、Cray和是允许OpenACC指令的Fortran编译器。第12张幻灯片中的后3张,不确定其他两张(尽管第一张是您已经研究过的),似乎表明Cray编译器可能会工作。我会看看我是否能得到它,并会报告回来。如果这是规范所说的,那么我想我会等待更长的时间。目前,我发布的解决方案似乎仍然是一个不错的解决方案。