fortran - OpenMP 运行时条件 GPU 目标内核执行
问题描述
是否有一种语法允许根据运行时条件的状态在设备 (GPU) 或主机上进行有条件的内核执行?
这是一个示例 fortran 代码,可以根据变量的状态轻松切换设备数据子句onGPU
然而,内核似乎只是在条件为假时中止,并且从未在主机上执行。这是我正在查看的示例代码。
program test
implicit none
integer :: a,b,c
logical :: onGPU
real, dimension(:,:,:), allocatable :: array
onGPU = .false.
allocate(array(1000,1000,1000))
array=0.e0
!$omp target enter data if(onGPU) map(to:array)
!$omp target teams distribute parallel do collapse(3) schedule (static, 1) &
!$omp& if(onGPU) &
!$omp& private(a,b,c)
do a = 1,1000
do b = 1,1000
do c = 1,1000
array(a,b,c) = 1.e0
end do
end do
end do
!$omp target update if(onGPU) from(array)
write(*,*) sum(array)/size(array)
end program test
以上有我无法理解的非常奇怪的行为。问题是设备内核。从设备内核中删除 if 子句并使用 data 子句可以得到预期的行为。我也玩弄了内核中 if() 语句的位置,但没有运气。
为此,我正在使用 IBM fortran 编译器。谢谢参观。
解决方案
在与开发人员讨论之后,在本文发布时,该功能似乎是一个非常新的功能,并且尚未在大多数编译器中实现。
所以我们耐心等待。
推荐阅读
- javascript - Discord.js - 嵌入
- python - Python 目录结构问题并且在一台机器上有多个版本
- flutter - 在 CustomScrollView 中显示 TabBarView
- php - Foreach 循环仅存储多维数组的第一个索引 | 拉拉维尔
- python - 即使添加到 PATH,Python 也无法工作
- python - 如何区分地理定位折线下方和上方的点?
- powershell - 在 Powershell 中合并 CSV 文件遍历子文件夹 - 归档和删除旧文件使用 Target-CSV 的文件夹名称
- xml - 解析 xml 和文本文件以删除 shell 中的通配符
- angular - Angular 材质 UI 中的材质组件在 Angular 项目中不起作用
- javascript - 如何从表单上传文件,然后使用 nodemailer 发送