From 6711398b597b44d57f176a6ae6570c057cc1c4c0 Mon Sep 17 00:00:00 2001 From: Simon Marlow <marlowsd@gmail.com> Date: Tue, 9 Mar 2010 15:22:32 +0000 Subject: [PATCH] add a raw callback performance benchmark --- smp/callback002/Main.hs | 28 ++++++++++++++++++++++++++++ smp/callback002/Makefile | 10 ++++++++++ smp/callback002/cbits.c | 8 ++++++++ smp/callback002/cbits.h | 3 +++ 4 files changed, 49 insertions(+) create mode 100644 smp/callback002/Main.hs create mode 100644 smp/callback002/Makefile create mode 100644 smp/callback002/cbits.c create mode 100644 smp/callback002/cbits.h diff --git a/smp/callback002/Main.hs b/smp/callback002/Main.hs new file mode 100644 index 00000000..d0ad9c98 --- /dev/null +++ b/smp/callback002/Main.hs @@ -0,0 +1,28 @@ +{-# OPTIONS_GHC -fffi #-} +-- Measure raw callback performance. + +module Main where + +import Control.Concurrent +import Control.Monad +import Foreign +import Foreign.C +import Data.IORef +import System.Environment +import System.IO + +main = do + [s] <- getArgs + poke pcount (fromIntegral (read s)) + callC =<< mkFunc (return ()) + +type FUNC = IO () + +foreign import ccall "&count" pcount :: Ptr CInt + +foreign import ccall unsafe "wrapper" + mkFunc :: FUNC -> IO (FunPtr FUNC) + +foreign import ccall threadsafe "cbits.h callC" + callC:: FunPtr FUNC -> IO () + diff --git a/smp/callback002/Makefile b/smp/callback002/Makefile new file mode 100644 index 00000000..5ad0b5c2 --- /dev/null +++ b/smp/callback002/Makefile @@ -0,0 +1,10 @@ +TOP = ../.. +include $(TOP)/mk/boilerplate.mk + +FAST_OPTS = 300000 +NORM_OPTS = 3000000 +SLOW_OPTS = 30000000 + +OBJS += Main_stub.o + +include $(TOP)/mk/target.mk diff --git a/smp/callback002/cbits.c b/smp/callback002/cbits.c new file mode 100644 index 00000000..47ac47f1 --- /dev/null +++ b/smp/callback002/cbits.c @@ -0,0 +1,8 @@ +#include "cbits.h" + +int count; + +void callC( FUNC* f) { + int i; + for(i=0;i<count;i++) f(); +} diff --git a/smp/callback002/cbits.h b/smp/callback002/cbits.h new file mode 100644 index 00000000..d0d8517c --- /dev/null +++ b/smp/callback002/cbits.h @@ -0,0 +1,3 @@ +typedef void FUNC(); + +void callC( FUNC* f); -- GitLab