Skip to content

Instantly share code, notes, and snippets.

@Ahnfelt
Created June 22, 2011 09:48
Show Gist options
  • Save Ahnfelt/1039786 to your computer and use it in GitHub Desktop.
Save Ahnfelt/1039786 to your computer and use it in GitHub Desktop.
// System.OpenCL.Private.Synchronization:
module System.OpenCL.Private.Synchronization (
enqueueMarker, enqueueBarrier, enqueueWaitForEvents, waitForEvents
) where
// [..snip..]
waitForEvents :: [Event] -> IO ()
waitForEvents events =
withForeignPtrs (map eventPtr events) $ \event_ptrs ->
withArrayLen event_ptrs $ \n event_array -> do
err <- clWaitForEvents (fromIntegral n) event_array
checkOCL "waitForEvents" err
// [..snip..]
foreign import ccall "CL/cl.h clWaitForEvents" clWaitForEvents
:: T.UInt -> Ptr CLEvent -> IO T.Int
// System.OpenCL.Synchronization:
module System.OpenCL.Synchronization (
enqueueMarker, enqueueBarrier, enqueueWaitForEvents, waitForEvents
) where
import System.OpenCL.Private.Synchronization
// Eksempel med asynkrone kald og events
globalBuffer <- mallocArray context [MemObjectReadWrite] groupCount :: IO (MemObject Double)
setKernelArgs simulateKernel [VArg seed', HollowArg (fromIntegral $ groupSize * doubleSize), MObjArg globalBuffer]
simulateEvent <- enqueueNDRangeKernel queue simulateKernel []
[fromIntegral $ groupCount * groupSize] [fromIntegral $ groupSize]
[]
setKernelArgs sumKernel [MObjArg globalBuffer]
sumEvent <- enqueueNDRangeKernel queue sumKernel []
[fromIntegral $ groupCount `div` 2] [fromIntegral $ groupCount `div` 2]
[simulateEvent]
readEvent <- enqueueReadBuffer queue globalBuffer False 0 (fromIntegral $ doubleSize) array [sumEvent]
waitForEvents [readEvent]
[result] <- peekArray 1 array :: IO [Double]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment