Created
June 22, 2011 09:48
-
-
Save Ahnfelt/1039786 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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