62
From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 1 / 57

From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

From Haskell to Hardware via CCCs

Conal Elliott

Tabula

August, 2014

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 1 / 57

Page 2: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Tabula

Founded by Steve Teig about 10 years ago.

Post-FPGA reconfigurable hardware.

Spacetime architecture:

3D for shorter paths

Implemented by rapid reconfiguration (2GHz)

Minkowski spacetime (special relativity)

Spacetime layout with causality constraints

Very high sustained throughput

Tremendous flexibility for moving computations in space & time

Program in a non-sequential language: Haskell

Compiler developed openly and shared freely

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 2 / 57

Page 3: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Example

square :: Num a ñ a Ñ a

square a “ a ˚ a

sumSquare :: pFunctor f ,Foldable f ,Num aq ñ f a Ñ a

sumSquare “ sum ˝ fmap square

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 3 / 57

Page 4: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sumSquare :: Tree2 Int Ñ Int

sumSquare “ sum ˝ fmap square

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 4 / 57

Page 5: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sumSquare :: Tree2 Int Ñ Int

module sumSquare-t2 (In_0, In_1, In_2, In_3, Out);

input [0:31] In_0;

input [0:31] In_1;

input [0:31] In_2;

input [0:31] In_3;

output [0:31] Out;

wire [0:31] w_mul_I1;

wire [0:31] w_mul_I2;

wire [0:31] w_mul_I3;

wire [0:31] w_mul_I4;

wire [0:31] w_add_I5;

wire [0:31] w_add_I6;

wire [0:31] w_add_I7;

assign w_mul_I1 = In_0 * In_0;

assign w_mul_I2 = In_1 * In_1;

assign w_mul_I3 = In_2 * In_2;

assign w_mul_I4 = In_3 * In_3;

assign w_add_I5 = w_mul_I1 + w_mul_I2;

assign w_add_I6 = w_mul_I3 + w_mul_I4;

assign w_add_I7 = w_add_I5 + w_add_I6;

assign Out = w_add_I7;

endmodule

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 5 / 57

Page 6: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sumSquare :: Tree3 Int Ñ Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32 Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 6 / 57

Page 7: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sumSquare :: Tree4 Int Ñ Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul 32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

add

32

add

32

32

add

32

add

32

32

32

32 Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 7 / 57

Page 8: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

How it works

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 8 / 57

Page 9: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Overall plan

Convert Haskell to Core (GHC).

Monomorphize.

Convert to abstract vocabulary.

Interpret as circuits.

Synthesize & optimize with existing HDL machinery.

Initial simplifications:

Shape-typed data

Combinational

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 9 / 57

Page 10: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

GHC Core

data Expr b -- “b” for the type of binders,

“ Var Id

| Lit Literal

| App pExpr bq pExpr bq

| Lam b pExpr bq

| Let pBind bq pExpr bq

| Case pExpr bq b Type rAlt b s

| Cast pExpr bq Coercion

| Type Type

type Alt b “ pAltCon, rb s,Expr bq

data AltCon “ DataAlt DataCon | LitAlt Literal | DEFAULT

data Bind b “ NonRec b pExpr bq | Rec rpb,Expr bqs

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 10 / 57

Page 11: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Overloading lambda

Powerful abstraction mechanisms:

Lambda/application

Type classes

Can we use type classes to generalize lambda & application?

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 11 / 57

Page 12: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

(Bi-)Cartesian closed categories

Category: identity and composition

Cartesian: products

Co-Cartesian: coproducts (“sums”)

Closed: exponentials (arrows as “values”)

Suffices for translating typed lambda calculus (J. Lambek, 1980).

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 12 / 57

Page 13: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Category

Interface:

class Category p;q where

id :: a ; a

p˝q :: pb ; cq Ñ pa ; bq Ñ pa ; cq

Laws:

id ˝ f ” f

g ˝ id ” g

ph ˝ gq ˝ f ” h ˝ pg ˝ f q

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 13 / 57

Page 14: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Products

class Category p;q ñ ProductCat p;q where

type a ˆ; b

exl :: pa ˆ; bq; a

exr :: pa ˆ; bq; b

pŸq :: pa ; cq Ñ pa ; dq Ñ pa ; pc ˆ; dqq

p̂ q :: pa ; cq Ñ pb ; dq Ñ ppa ˆ; bq; pc ˆ; dqq

f ˆg “ pf ˝ exlq Ÿ pg ˝ exrq

Laws:

exl ˝ pf Ÿ gq ” f

exr ˝ pf Ÿ gq ” g

exl ˝ h Ÿ exr ˝ h ” h

exl Ÿ exr ” id

pf ˆgq ˝ ph Ÿ kq ” pf ˝ hq Ÿ pg ˝ kq

idˆid ” id

pf ˆgq ˝ phˆkq ” pf ˝ hqˆpg ˝ kq

pf Ÿ gq ˝ h ” pf ˝ hq Ÿ pg ˝ hq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 14 / 57

Page 15: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Coproducts

class Category p;q ñ CoproductCat p;q where

type a ;̀ b

inl :: a ; pa ;̀ bq

inr :: b ; pa ;̀ bq

pŹq :: pa ; cq Ñ pb ; cq Ñ ppa ;̀ bq; cq

p̀ q :: pa ; cq Ñ pb ; dq Ñ ppa ;̀ bq; pc ;̀ dqq

f `g “ pinl ˝ f q Ź pinr ˝ gq

Laws (dual to product):

pf Ź gq ˝ inl ” f

pf Ź gq ˝ inr ” g

h ˝ inl Ź h ˝ inr ” h

inl Ź inr ” id

ph Ź kq ˝ pf `gq ” ph ˝ f q Ź pk ˝ gq

id`id ” id

ph`kq ˝ pf `gq ” ph ˝ f q`pk ˝ gq

h ˝ pf Ź gq ” ph ˝ f q Ź ph ˝ gq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 15 / 57

Page 16: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Exponentials

class ProductCat p;q ñ ClosedCat p;q where

type a ñ; b

apply :: ppa ñ; bq ˆ; aq; b

curry :: ppa ˆ; bq; cq Ñ pa ; pb ñ; cqq

uncurry :: pa ; pb ñ; cqq Ñ pa ˆ; bq; c

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 16 / 57

Page 17: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Lambda terms

data E :: ˚ Ñ ˚ where

Var :: V a Ñ E a

Const :: Prim a Ñ E a

App :: E pa Ñ bq Ñ E a Ñ E b

Lam :: Pat a Ñ E b Ñ E pa Ñ bq

data Pat :: ˚ Ñ ˚ where

UnitPat :: Pat pq

VarPat :: V a Ñ Pat a

PairPat :: Pat a Ñ Pat b Ñ Pat pa ˆ bq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 17 / 57

Page 18: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Lambda to CCC

pλp Ñ kq 99K const k -- v not free in k

pλp Ñ vq 99K ... -- accessor

pλp Ñ u vq 99K apply ˝ ppλp Ñ uq Ÿ pλp Ñ vqq

pλp Ñ λq Ñ uq 99K curry pλpp, qq Ñ uq

convert :: CCC p;q ñ Pat a Ñ E b Ñ pa ; bq

convert pConst x q “ constArrow x

convert p pVar vq “ convertVar p v

convert p pApp u vq “ apply ˝ pconvert p u Ÿ convert p vq

convert p pLam q eq “ curry pconvert pPairPat p qq eq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 18 / 57

Page 19: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Lambda to CCC

pλp Ñ kq 99K const k -- v not free in k

pλp Ñ vq 99K ... -- accessor

pλp Ñ u vq 99K apply ˝ ppλp Ñ uq Ÿ pλp Ñ vqq

pλp Ñ λq Ñ uq 99K curry pλpp, qq Ñ uq

convert :: CCC p;q ñ Pat a Ñ E b Ñ pa ; bq

convert pConst x q “ constArrow x

convert p pVar vq “ convertVar p v

convert p pApp u vq “ apply ˝ pconvert p u Ÿ convert p vq

convert p pLam q eq “ curry pconvert pPairPat p qq eq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 18 / 57

Page 20: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Circuit CCC

data Comp “ @a b.Comp pPrim a bq pBuses aq pBuses bq

type CircuitM “WriterT pSeq Compq pState BusSupplyq

newtype a � b “ Circ pBuses a Ñ CircuitM pBuses bqq

instance Category p�q where ...

instance ProductCat p�q where ...

instance ClosedCat p�q where ...

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 19 / 57

Page 21: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Examples

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 20 / 57

Page 22: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sumSquare :: Tree2 Int Ñ Int

sumSquare “ sum ˝ fmap square

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 21 / 57

Page 23: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sumSquare :: Tree2 Int Ñ Int

uncurry (apply . (curry (apply . (curry (apply . (curry (apply . (curry (curry

(apply . (curry (apply . (apply . (curry (curry (uncurry add) . exr) . it &&&

apply . (curry (repr . exr) . it &&& apply . (((((id . exr) . exl) . exl) . exl)

. id *** (id . exl) . id))) &&& apply . (curry (repr . exr) . it &&& apply .

(((((id . exr) . exl) . exl) . exl) . id *** (id . exr) . id)))) &&& apply .

(curry (repr . exr) . it &&& apply . (curry (apply . (curry (abst . exr) . it

&&& apply . (apply . (curry (curry id . exr) . it &&& apply . (((id . exr) .

exl) . id *** (id . exl) . id)) &&& apply . (((id . exr) . exl) . id *** (id .

exr) . id)))) &&& apply . (curry (repr . exr) . it &&& apply . (curry (repr .

exr) . it &&& id . exr))))))) &&& curry (apply . (curry (abst . exr) . it &&&

apply . (curry (apply . (curry (abst . exr) . it &&& apply . (apply . (curry

(curry id . exr) . it &&& apply . (((id . exr) . exl) . id *** (id . exl) . id))

&&& apply . (((id . exr) . exl) . id *** (id . exr) . id)))) &&& apply . (curry

(repr . exr) . it &&& apply . (curry (repr . exr) . it &&& id . exr))))))) &&&

curry (apply . (curry (apply . (curry (abst . exr) . it &&& apply . (apply .

(curry (curry (uncurry mul) . exr) . it &&& id . exr) &&& id . exr))) &&& apply

. (curry (repr . exr) . it &&& id . exr))))) &&& curry (apply . (curry (apply .

(curry (abst . exr) . it &&& apply . (apply . (curry (curry (uncurry add) . exr)

. it &&& apply . (curry (repr . exr) . it &&& apply . (((id . exr) . exl) . id

*** (id . exl) . id))) &&& apply . (curry (repr . exr) . it &&& apply . (((id .

exr) . exl) . id *** (id . exr) . id))))) &&& apply . (curry (repr . exr) . it

&&& apply . (curry (repr . exr) . it &&& id . exr)))))) &&& curry (apply .

(curry (abst . exr) . it &&& apply . (curry (repr . exr) . it &&& id . exr)))))

. (it &&& id)

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 22 / 57

Page 24: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

λpa, bq Ñ a ` b :: Int

In

add

32

32

Out32

module sum-2 (In_0, In_1, Out);

input [0:31] In_0;

input [0:31] In_1;

output [0:31] Out;

wire [0:31] w_add_I1;

assign w_add_I1 = In_0 + In_1;

assign Out = w_add_I1;

endmodule

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 23 / 57

Page 25: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

λpa, b, c, dq Ñ a ` b ` c ` d :: Int

In

add

32

32

add 32

add

32

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 24 / 57

Page 26: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

λpa, b, c, dq Ñ pa ` bq ` pc ` dq :: Int

In

add

32

32

add

32

32

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 25 / 57

Page 27: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Uniform pairs

data Pair a “ a :# a

Functor , Applicative, Monad , Foldable, Traversable (transpose).

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 26 / 57

Page 28: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sum :: Pair Int Ñ Int

In

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 27 / 57

Page 29: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sumSquare :: Pair Int Ñ Int

In

mul

32

32

mul

32

32

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 28 / 57

Page 30: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Length-typed vectors

data Vec :: Nat Ñ ˚ Ñ ˚ where

ZVec :: Vec0 a

pŸq :: a Ñ Vecn a Ñ Vec1`n a

instance Functor pVecnq where

fmap ZVec “ ZVec

fmap f pa Ÿ uq “ f a Ÿ fmap f u

instance Foldable pVecnq where

foldMap ZVec “ ε

foldMap h pa Ÿ asq “ h a ‘ foldMap h as

And Applicative, Monad , Traversable.

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 29 / 57

Page 31: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Length-typed vectors

data Vec :: Nat Ñ ˚ Ñ ˚ where

ZVec :: Vec0 a

pŸq :: a Ñ Vecn a Ñ Vec1`n a

instance Functor pVecnq where

fmap ZVec “ ZVec

fmap f pa Ÿ uq “ f a Ÿ fmap f u

instance Foldable pVecnq where

foldMap ZVec “ ε

foldMap h pa Ÿ asq “ h a ‘ foldMap h as

And Applicative, Monad , Traversable.

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 29 / 57

Page 32: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

fmap not :: Vec6 Bool Ñ Vec6 Bool

In

not

not

not

not

not

not

Out

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 30 / 57

Page 33: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sum :: Vec6 Int Ñ Int

In

add

32

add

32

add

32

add

32

add

32

add

32

0

32

32

32

32

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 31 / 57

Page 34: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Improved folding

Bypass ε when possible.

instance Foldable pVecnq where

foldMap ZVec “ ε

foldMap h as@p Ÿ q “ foldMapS h as

foldMapS :: Monoid m ñ pa Ñ mq Ñ Vec1`n a Ñ m

foldMapS h pa Ÿ asq “

case as of

ZVec Ñ h a

p Ÿ q Ñ h a ‘ foldMapS h as

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 32 / 57

Page 35: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sum :: Vec6 Int Ñ Int

In

add

32

32

add

32

add 32

add

32

add

32

32

32

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 33 / 57

Page 36: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Depth-typed trees

data Tree :: Nat Ñ ˚ Ñ ˚ where

L :: a Ñ Tree0 a

B :: Pair pTreen aq Ñ Tree1`n a

instance Functor pTreenq where

fmap f pL a q “ L pf aq

fmap f pB tsq “ B ppfmap ˝ fmapq f tsq

instance Foldable pTreenq where

foldMap f pL a q “ f a

foldMap f pB tsq “ pfoldMap ˝ foldMapq f ts

And Applicative, Monad , Traversable.

Easily generalize beyond Pair .

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 34 / 57

Page 37: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Depth-typed trees

data Tree :: Nat Ñ ˚ Ñ ˚ where

L :: a Ñ Tree0 a

B :: Pair pTreen aq Ñ Tree1`n a

instance Functor pTreenq where

fmap f pL a q “ L pf aq

fmap f pB tsq “ B ppfmap ˝ fmapq f tsq

instance Foldable pTreenq where

foldMap f pL a q “ f a

foldMap f pB tsq “ pfoldMap ˝ foldMapq f ts

And Applicative, Monad , Traversable.

Easily generalize beyond Pair .Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 34 / 57

Page 38: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

fmap not :: Tree3 Bool Ñ Tree3 Bool

In

not

not

not

not

not

not

not

not

Out

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 35 / 57

Page 39: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sum :: Tree4 Int Ñ Int

In

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

3232

add

32

add

32

32

add

32

add

32

32

32

32 Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 36 / 57

Page 40: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

sum :: Tree3 Int Ñ Int

Monomorphized & simplified GHC Core:let f0 :: Tree0 Int Ñ Sum Int

f0 “ λds Ñ

abst $fRepSum prepr $fRepTree0 dsq

f1 :: Tree1 Int Ñ Sum Int

f1 “ λds Ñ

case repr $fRepPair prepr $fRepTree dsq of

p, q a b Ñ

abst $fRepSum

p$fNumInt` prepr $fRepSum pf0 aqq

prepr $fRepSum pf0 bqqq

f2 :: Tree2 Int Ñ Sum Int

f2 “ λds Ñ

case repr $fRepPair prepr $fRepTree dsq of

p, q a b Ñ

abst $fRepSum

p$fNumInt` prepr $fRepSum pf1 aqq

prepr $fRepSum pf1 bqqq

in λη Ñ

repr $fRepSum

pcase repr $fRepPair prepr $fRepTree ηq of

p, q a b Ñ

abst $fRepSum

p$fNumInt` prepr $fRepSum pf2 aqq

prepr $fRepSum pf2 bqqqq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 37 / 57

Page 41: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

transpose :: Pair pTree4 Intq Ñ Tree4 pPair Intq

In

Out

32

32

32

32

32

32

32

3232

3232

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 38 / 57

Page 42: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

transpose :: Tree4 pPair Intq Ñ Pair pTree4 Intq

In

Out

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 39 / 57

Page 43: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Dot products

dot :: pFoldable g ,Foldable f ,Num pf aq,Num aq ñ

g pf aq Ñ a

dot “ sum ˝ product

Typically, g ” Pair .

Alternatively,

dot :: pTraversable g ,Foldable f ,Applicative f ,Num aq ñ

g pf aq Ñ a

dot “ sum ˝ fmap product ˝ transpose

where

transpose :: pTraversable t ,Applicative f q ñ t pf aq Ñ f pt aq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 40 / 57

Page 44: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Dot products

dot :: pFoldable g ,Foldable f ,Num pf aq,Num aq ñ

g pf aq Ñ a

dot “ sum ˝ product

Typically, g ” Pair .

Alternatively,

dot :: pTraversable g ,Foldable f ,Applicative f ,Num aq ñ

g pf aq Ñ a

dot “ sum ˝ fmap product ˝ transpose

where

transpose :: pTraversable t ,Applicative f q ñ t pf aq Ñ f pt aq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 40 / 57

Page 45: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

dot :: Pair pTree1 Intq Ñ Int

In

mul

32

32

mul

32

32

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 41 / 57

Page 46: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

dot :: Pair pTree2 Intq Ñ Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 42 / 57

Page 47: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

dot :: Pair pTree3 Intq Ñ Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32 Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 43 / 57

Page 48: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

dot :: Pair pTree4 Intq Ñ Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

3232

add

32

add

32

32

add

32

add

32

32

32

32 Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 44 / 57

Page 49: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

dot :: Vec3 pTree2 Intq Ñ Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

mul 32

mul 32

mul

32

32

32

32

32

add

32

32

add

32

32

add

32

32 Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 45 / 57

Page 50: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

dot :: Tree2 pTree2 Intq Ñ Int

In

mul

32

32

mul 32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

mul

32

mul

32

mul

32

32

32

32

32

add

32

32

add

32

32

add

32

32 Out32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 46 / 57

Page 51: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Linear transformations

p¨q :: pFoldable f ,Num pf aq,Num aq ñ f a Ñ f a Ñ a

u ¨ v “ dot pu :# vq

type Matm,n a “ Vecn pVecm aq

p$̂q :: pIsNat m,Num aq ñ Matm,n a Ñ Vecm a Ñ Vecn a

mat $̂ vec “ p¨vecq ă$ąmat

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 47 / 57

Page 52: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Linear transformations

p¨q :: pFoldable f ,Num pf aq,Num aq ñ f a Ñ f a Ñ a

u ¨ v “ dot pu :# vq

type Matm,n a “ Vecn pVecm aq

p$̂q :: pIsNat m,Num aq ñ Matm,n a Ñ Vecm a Ñ Vecn a

mat $̂ vec “ p¨vecq ă$ąmat

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 47 / 57

Page 53: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

p$̂q ::Mat2,3 Int Ñ Vec2 Int Ñ Vec3 Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

Out

32

add

32

3232

add

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 48 / 57

Page 54: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

p$̂q ::Mat4,2 Int Ñ Vec4 Int Ñ Vec2 Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

add

32

add

32

32

3232

Out

32

add

32

add

32

add

32

32

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 49 / 57

Page 55: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Generalizing linear transformations

p$̂q :: pIsNat m,Num aq ñ

Vecn pVecm aq Ñ Vecm a Ñ Vecn a

mat $̂ vec “ p¨vecq ă$ąmat

More simply and generally,

p$̂q :: pFoldable m,Applicative m,Functor n,Num aq ñ

n pm aq Ñ m a Ñ n a

For instance,

type MatTm,n a “ Treen pTreem aq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 50 / 57

Page 56: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

p$̂q ::MatT 2,1 Int Ñ Tree2 Int Ñ Tree1 Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

Out

32

add

32

32

add

32

32

add

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 51 / 57

Page 57: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

p$̂q ::MatT 2,2 Int Ñ Tree2 Int Ñ Tree2 Int

In

mul

32

32

mul

32

32

mul

32

32

mul 32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

Out

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 52 / 57

Page 58: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Composing linear transformations

Transform columns:

pˆ̋q :: pIsNat m, IsNat n, IsNat o,Num aq ñ

Matn,o a Ñ Matm,n a Ñ Matm,o a

no ˆ̋ mn “ transpose ppno $̂q ă$ą transpose mnq

More simply and generally,

pˆ̋q :: pApplicative o,Traversable n,Applicative n

,Traversable m,Applicative m,Num aq ñ

o pn aq Ñ n pm aq Ñ o pm aq

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 53 / 57

Page 59: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

pˆ̋q ::Mat3,4 Int Ñ Mat2,3 Int Ñ Mat2,4 Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

add

32

32

32

Out

32

add

32

add

32

32

32 32

add

32

add

32

32

32

32

add

32

add

32

32

32

32

add

32

add

32

32

32

32

add

32

add

32

32

3232

add

32

add

32

32

32

32

add

32

add

32

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 54 / 57

Page 60: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

pˆ̋q ::MatT 2,2 Int Ñ MatT 2,2 Int Ñ MatT 2,2 Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul 32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

Out

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

3232

add

32

32

add

32

32

add

32

32

32

add

32

32

add 32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add 32

32

add

32

32

32

add

32

32

add 32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add

32

32

add

32

32

32

add

32

32

add 32

32

add

32

32

32

add

32

32

add 32

32

add

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 55 / 57

Page 61: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

pˆ̋q ::MatT 3,2 Int Ñ MatT 2,3 Int Ñ MatT 2,2 Int

In

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul 32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

mul

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

Out

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add 32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add 32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

32

add

32

add

32

32

32

32

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 56 / 57

Page 62: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware

Status and future

GitHub repository

Looking for collaboration and hiring recommendations

To do:

Improve performance

More examples

Genuine sums for circuits

Memory and computation management

More interpretations (CCCs)

Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 57 / 57