提问人:user22593146 提问时间:9/19/2023 最后编辑:Vladimir F Героям славаuser22593146 更新时间:9/20/2023 访问量:34
Fortran 派生类型变量,其中包含 OpenMP 并行区域内具有共享属性的指针字段
Fortran derived type variable containing pointer fields with the shared attribute inside an OpenMP parallel region
问:
我有以下问题:我想访问存储在带有指针字段的派生类型中的数据。我希望派生类型的变量具有“shared”属性。运行代码时,我得到错误的结果。示例如下:
派生类型的说明:
TYPE, PUBLIC :: T_CSR INTEGER(SIK) :: n INTEGER(SIK) :: nval REAL(SRK), POINTER :: a(:) INTEGER(SIK), POINTER :: ja(:) INTEGER(SIK), POINTER :: ia(:) INTEGER(SIK), POINTER :: diag(:) END TYPE T_CSR
派生类型的变量 -
type (t_csr):: LU
代码:
!$omp parallel do private (ij1, ij2, sum) do i = 2, n ij1 = LU%ia(i) ij2 = LU%diag(i) - 1 sum = dot_product(LU%a(ij1:ij2), x_vek(LU%ja(ij1:ij2))) x_vek(i) = (b_vek(i) - sum) end do
在没有 openMP 或只有一个线程的 openMP 的情况下编译 - 正确的结果
使用 openMP 和 1 个以上的线程编译 - 不同的、错误的结果、偏离正确的预期结果
答: 暂无答案
评论
x_vek