fortran - 在 GPU 上使用 OpenMP+Fortran 减少数组。我得到一个不受支持的动态分配编译时错误
问题描述
我的 Fortran 代码如下所示
b=0.
!$OMP TARGET DATA MAP(to:a) MAP(tofrom:b) ! a and b are arrays of size n
!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO COLLAPSE(3) &
!$OMP PRIVATE(x,y,z,term) &
!$OMP REDUCTION(+:b)
do x = ...
do y = ...
do z = ...
term = a*a
b(z) = b(z) + term
end do
end do
end do
!$OMP END TARGET TEAMS DISTRIBUTE PARALLEL DO
!$OMP END TARGET DATA
我需要将每个线程对 b 的每个元素的贡献加起来。当我尝试编译此代码时,出现以下错误。
error: <unknown>:0:0: in function subroutine_$ck_L46_1 void (i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32): unsupported dynamic alloca
当我没有减少子句时,代码编译得很好。我不明白为什么它看起来像是试图在这里动态分配任何东西,因为我有一个 MAP(tofrom:b)。此代码的一个版本只有 $OMP PARALLEL DO 可以工作。所以我使用 TARGET 指令的方式有问题。
任何指针表示赞赏!
解决方案
推荐阅读
- oracle - 在springboot中通过hikaricp设置oracle数据库模式
- javascript - react-form 和 redux-form 有什么区别?
- node.js - MongoDB 可以接受超过 12 个字节和 24 个十六进制字符的自定义 Objectid 吗?
- c# - 无法使用 System.Management 获取 azure vm 机器的已安装软件详细信息
- android - Android资源链接失败(未找到任何解决方案)
- sql - 在gridview中生成下拉字段,其中选项作为另一列中具有相同ID的列中的值
- c# - 使用 c# 将受密码保护的 Zip 文件转换为 Enc 文件
- azure - 使用 Azure SQLDW Polybase 使用 vnet 服务终结点从 ADLS Gen 1 引入数据
- c# - 在过滤器属性中使用 Autofac 进行属性/方法注入
- pentaho-spoon - 在 pentaho PDI V7 中未选中表输出中的“指定数据库字段”时,“列名无效”