From 5cb0fe181bf691a28aaf276e60271773c38fd197 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Thu, 25 Apr 2019 18:43:45 +0200 Subject: add block variant of matrix multiplication --- src/main.F90 | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/main.F90') diff --git a/src/main.F90 b/src/main.F90 index f28bbb8..7c03462 100644 --- a/src/main.F90 +++ b/src/main.F90 @@ -3,6 +3,7 @@ PROGRAM mul USE bettmat USE dotmat USE bettmat2 + USE blockmat USE iso_fortran_env, only: error_unit IMPLICIT none @@ -38,6 +39,8 @@ PROGRAM mul multype = 4 ELSE IF (trim(impl_arg) .eq. "bett2") THEN multype = 5 + ELSE IF (trim(impl_arg) .eq. "block") THEN + multype = 6 ELSE write (error_unit, '(A)') "Unrecognized implementation argument" call print_usage() @@ -73,7 +76,8 @@ CONTAINS write (*, '(A)') & "Usage: mull KIND IMPLEMENTATION" // char(10) // & "where KIND is one of: 4, 8, 16" // char(10) // & - " IMPLEMENTATION is one of: naiv, bett, dot, mat" + " IMPLEMENTATION is one of: " // & + "naiv, bett, dot, mat, bett2, block" END SUBROUTINE print_usage @@ -113,8 +117,10 @@ CONTAINS res = dotmull(mat1, mat2) CASE (4) res = matmul(mat1, mat2) - CASE default + CASE (5) res = bett2mull(mat1, mat2) + CASE default + res = blockmull(mat1, mat2) END SELECT @@ -150,8 +156,10 @@ CONTAINS res = dotmull(mat1, mat2) CASE (4) res = matmul(mat1, mat2) - CASE default + CASE (5) res = bett2mull(mat1, mat2) + CASE default + res = blockmull(mat1, mat2) END SELECT @@ -187,13 +195,15 @@ CONTAINS res = dotmull(mat1, mat2) CASE (4) res = matmul(mat1, mat2) - CASE default + CASE (5) res = bett2mull(mat1, mat2) + CASE default + res = blockmull(mat1, mat2) END SELECT call cpu_time(end) - + time = end - start END FUNCTION measure_16 -- cgit v1.2.3