Векторизация против SIMD против Workshare в Фортране - PullRequest
0 голосов
/ 11 апреля 2020

Из вашего опыта, какой фрагмент кода является самым быстрым?

Векторизация

x(2:ndof - 1) = x(2:ndof - 1) - dt*( &
    x(ndof + 1:ndof+ ndof - 2) + (ndof + 3:ndof + ndof))

Векторизация + рабочая доля

!$omp parallel workshare schedule (runtime)
    x(2:ndof - 1) = x(2:ndof - 1) - dt*( &
    x(ndof + 1:ndof+ ndof - 2) + (ndof + 3:ndof + ndof))
!$omp end parallel workshare

Явная l oop + отдельная инструкция множественные данные openmp

!$omp parallel do simd schedule (runtime)
    do idx = 2, ndof - 1, 1
        x(idx) = x(idx) - (dt*coef*( &
            x(ndof+idx - 1) + x(ndof + idx+1)))
    end do
!$omp end parallel do simd 

Я не включаю простой явный l oop, поскольку я хочу улучшить производительность.

...