anchor.diff:    s = LSHIFT(INT8(MAX(i, 0)), 30) / ((m * k + k * n + m * n) * T)
   
     ALLOCATE(c(m,n))
  -  ALLOCATE(a(s))
  -  ALLOCATE(b(s))
  +  ALLOCATE(a(m,k,s))
  +  ALLOCATE(b(k,n,s))
   
     ! Initialize a, b
  -  !@TODO figure out how to allocate a,b matrices cont. without
     ! additional copies when call LIBXSMM in the F90 compiler
     !$OMP PARALLEL DO PRIVATE(i) DEFAULT(NONE) SHARED(a, b, m, n, k, s)
     DO i = 1, s
  -    ALLOCATE( a(i)%matrix(m, k) )
  -    CALL init(42, a(i)%matrix(:, :), i - 1)
  -    ALLOCATE( b(i)%matrix(k, n) )
  -    CALL init(24, b(i)%matrix(:, :), i - 1)
  +    CALL init(42, a(:, :, i), i - 1)
  +    CALL init(24, b(:, :, i), i - 1)
     END DO 
     c(:,:) = 0
   
  
positive.code:       !$ duration = -omp_get_wtime()
        !$OMP END MASTER
        !$OMP DO
        DO i = LBOUND(a, 1), UBOUND(a, 1)
          CALL libxsmm_imm(m, n, k, a(i)%matrix, b(i)%matrix, tmp)
        END DO
        !$OMP MASTER
        !$ duration = duration + omp_get_wtime()
  
negative.code:   END IF
  
    ! Deallocate global arrays
    DEALLOCATE(a)
    DEALLOCATE(b)
    DEALLOCATE(c)
  