Skip to content

Commit 998f371

Browse files
committed
GPU version fixed.
1 parent 548a5c8 commit 998f371

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

src/ImageProcessing/ImageProcessing.fs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,7 @@ let applyFilterGPUKernel (clContext: ClContext) localWorkSize =
8888

8989
let kernel = clContext.Compile kernel
9090

91-
fun (commandQueue: MailboxProcessor<_>) (filter: ClArray<float32>) filterD (img: ClArray<byte>) imgH imgW ->
92-
93-
let result = clContext.CreateClArray(img.Length, allocationMode = AllocationMode.Default)
91+
fun (commandQueue: MailboxProcessor<_>) (filter: ClArray<float32>) filterD (img: ClArray<byte>) imgH imgW (result:ClArray<_>)->
9492

9593
let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
9694

@@ -114,24 +112,23 @@ let applyFiltersGPU (clContext: ClContext) localWorkSize =
114112
|]
115113
let clImage = clContext.CreateClArray<_> img
116114

117-
let mutable res = None
115+
//let mutable res = None
116+
let mutable input = clImage// clContext.CreateClArray(img.Length, allocationMode = AllocationMode.Default)
117+
let mutable output = clContext.CreateClArray(img.Length, allocationMode = AllocationMode.Default)
118118

119119
for filter in filters do
120120
let filter = Array.concat filter
121121
let filterD = (Array.length filter) / 2
122122
let clFilter = clContext.CreateClArray<_> filter
123-
match res with
124-
| None ->
125-
res <- Some (kernel queue clFilter filterD clImage imgH imgW)
126-
| Some img ->
127-
res <- Some (kernel queue clFilter filterD img imgH imgW)
128-
queue.Post(Msg.CreateFreeMsg img)
123+
let oldInput = input
124+
input <- kernel queue clFilter filterD input imgH imgW output
125+
output <- oldInput
129126
queue.Post(Msg.CreateFreeMsg clFilter)
130127

131128
let result' = Array.zeroCreate (imgH * imgW)
132-
let result' = queue.PostAndReply(fun ch -> Msg.CreateToHostMsg(res.Value, result', ch))
129+
let result' = queue.PostAndReply(fun ch -> Msg.CreateToHostMsg(input, result', ch))
133130
let result = Array2D.zeroCreate imgH imgW
134131
Array.Parallel.iteri (fun x v -> result.[x / imgW, x % imgW] <- v) result'
135-
queue.Post(Msg.CreateFreeMsg clImage)
136-
queue.Post(Msg.CreateFreeMsg res.Value)
132+
queue.Post(Msg.CreateFreeMsg input)
133+
queue.Post(Msg.CreateFreeMsg output)
137134
result

src/ImageProcessing/Main.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module Main =
99
[<EntryPoint>]
1010
let main (argv: string array) =
1111
let device =
12-
//ClDevice.GetAvailableDevices(platform=Platform.Nvidia) |> Seq.head
13-
ClDevice.GetFirstAppropriateDevice()
12+
ClDevice.GetAvailableDevices(platform=Platform.Nvidia) |> Seq.head
13+
//ClDevice.GetFirstAppropriateDevice()
1414
printfn $"Device: %A{device.Name}"
1515

1616
let context = ClContext(device)

0 commit comments

Comments
 (0)