中文
注册

毕昇编译器Fortran引导语支持

毕昇编译器支持部分Fortran语言的引导语,用于指示编译器的优化行为。

!$mem prefetch

内存引用方面的引导语,指示编译器将特定数据从main memory加载到L1/L2 cache。用法:

!$mem prefetch array1, array2, array2(i + 4) 
DO i=1,100 
    array1(i - 1) = array2(i - 1) + array2(i + 1) 
END DO

!dir$ ivdep

指示编译器忽略迭代循环的内存依赖性,并进行向量化。用法:

!dir$ ivdep 
DO i=1, ub 
    array1(i) = array1(i) + array2(i) 
END DO

!$omp simd

指示编译器将循环转换为SIMD形式。这是一个OpenMP指令,需要指定选项‘-fopenmp’才能生效。用法:

!$omp simd 
DO i=1, ub 
    array1(i) = array1(i) + array2(i) 
END DO

该引导语当前不支持任何子句。

!dir$ vector always

通过忽略基于cost的依赖来强制编译器进行循环矢量化,立即作用于紧随其后的循环。该引导语需要添加关键字“always”,并且不支持带关键字“never”。用法:

!dir$ vector always 
DO i=1, ub 
    array3(i) = array1(i) - array2(i) 
END DO

!dir$ novector

指示编译器不要进行循环矢量化操作,且与优化等级无关,立即作用于紧随其后的循环。用法:

!dir$ novector 
DO i=1, ub 
    array3(i) = array1(i) - array2(i) 
END DO

!dir$ inline

指示编译器对函数进行内联操作,且与优化等级无关,立即作用于紧随其后的循环。用法:

!dir$ inline 
real function inline_func (num) 
    implicit none
    real :: num
    inline func = num + 1234
    return
end function

!dir$ noinline

指示编译器不要对函数进行内联操作,且与优化等级无关,立即作用于紧随其后的循环。用法:

!dir$ noinline 
subroutine noinline_func (a, b) 
    integer, parameter :: m = 10
    integer :: a(m), b(m)
    integer :: i
    do i = 1, m
        b(i) = a(i) + 1
    end do 
end subroutine noinline_subr

!dir$ unroll

指示编译器进行循环展开操作,且与优化等级无关,立即作用于紧随其后的循环。共有3种用法:

!dir$ unroll  -- 全展开
DO i=1, ub 
    array3(i) = array1(i) - array2(i) 
END DO
!dir$ unroll (4)  -- 展开4次
DO i=1, ub 
    array3(i) = array1(i) - array2(i) 
END DO
!dir$ unroll = 2  -- 展开2次
DO i=1, ub 
    array3(i) = array1(i) - array2(i) 
END DO

!dir$ nounroll

指示编译器阻止循环展开操作,立即作用于紧随其后的循环,用法如下:

!dir$ nounroll
DO i=1, 100
    array1(i) = 5 
END DO
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词