Skip to content

Commit ae6c14d

Browse files
authored
Merge pull request #46 from pulp-platform/yt/fma-model
Add accurate FMA model.
2 parents 9c3be66 + 81acf33 commit ae6c14d

File tree

19 files changed

+174
-102
lines changed

19 files changed

+174
-102
lines changed

golden-model/FP16/scripts/addmax.py renamed to golden-model/FP16/addmax.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = max (( X[m_size, n_size] + W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP16/scripts/addmin.py renamed to golden-model/FP16/addmin.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = min (( X[m_size, n_size] + W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP16/scripts/gemm.py renamed to golden-model/FP16/gemm.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,21 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
22+
import redmule_fma as fma
1623

1724
# COMPUTE:
1825
# Z[m_size, k_size] = ( X[m_size, n_size] max W[n_size, k_size] ) + Y[m_size, k_size]
@@ -38,10 +45,10 @@
3845

3946
# We want to perform a GEMM, of the kind Z = Y + X*W
4047
# Test Matrices
41-
X = torch.rand(m_size, n_size).half()
42-
W = torch.rand(n_size, k_size).half()
43-
Y = torch.rand(m_size, k_size).half()
44-
Z = torch.rand(m_size, k_size).half()
48+
X = torch.rand(m_size, n_size)
49+
W = torch.rand(n_size, k_size)
50+
Y = torch.rand(m_size, k_size)
51+
Z = torch.rand(m_size, k_size)
4552

4653
print("\nInput Data: ")
4754
print("\nX is: ", X, X.shape, X.dtype)
@@ -54,7 +61,12 @@
5461
f.write('fp16 Y[MID_CH*OUT_CH] = {'+dump.tensor_to_string(Y)+'};\n')
5562

5663
print("\nComputing matrix multiplication..")
57-
Z = torch.add(input = Y, other = torch.mm(input = X, mat2 = W))
64+
65+
X_np = X.cpu().numpy()
66+
W_np = W.cpu().numpy()
67+
Y_np = Y.cpu().numpy()
68+
Z = fma.matrix_multiply_with_bittrue_fma(X_np, W_np, Y_np)
69+
Z = torch.from_numpy(Z).to(dtype=torch.float16)
5870

5971
print("\nZ is: ", Z, Z.shape, Z.dtype)
6072
f.write('fp16 Z[IN_CH*OUT_CH] = {'+dump.tensor_to_string(Z)+'};\n')

golden-model/FP16/scripts/maxmin.py renamed to golden-model/FP16/maxmin.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = min(max ( X[m_size, n_size], W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP16/scripts/minmax.py renamed to golden-model/FP16/minmax.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = max (min ( X[m_size, n_size], W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP16/scripts/mulmax.py renamed to golden-model/FP16/mulmax.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = max (( X[m_size, n_size] x W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP16/scripts/mulmin.py renamed to golden-model/FP16/mulmin.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = min(( X[m_size, n_size] x W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP8/scripts/addmax.py renamed to golden-model/FP8/addmax.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = max (( X[m_size, n_size] + W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP8/scripts/addmin.py renamed to golden-model/FP8/addmin.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = min (( X[m_size, n_size] + W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP8/scripts/gemm.py renamed to golden-model/FP8/gemm.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = ( X[m_size, n_size] max W[n_size, k_size] ) + Y[m_size, k_size]

golden-model/FP8/scripts/maxmin.py renamed to golden-model/FP8/maxmin.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = min(max ( X[m_size, n_size], W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP8/scripts/minmax.py renamed to golden-model/FP8/minmax.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = max (min ( X[m_size, n_size], W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP8/scripts/mulmax.py renamed to golden-model/FP8/mulmax.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = max (( X[m_size, n_size] x W[n_size, k_size] ), Y[m_size, k_size])

golden-model/FP8/scripts/mulmin.py renamed to golden-model/FP8/mulmin.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
# Yvan Tortorella <[email protected]>
66
#
77

8+
import os
9+
import sys
810
import numpy as np
9-
import torch
11+
import torch
1012
import torch.nn as nn
1113
import torch.nn.functional as F
1214
import torch.optim as optim
1315
import argparse
16+
17+
include_path = os.getenv('IncludeDir')
18+
if include_path:
19+
sys.path.insert(0, os.path.abspath(include_path))
20+
1421
import dump_utils as dump
15-
import os
1622

1723
# COMPUTE:
1824
# Z[m_size, k_size] = min(( X[m_size, n_size] x W[n_size, k_size] ), Y[m_size, k_size])

0 commit comments

Comments
 (0)