Example: /MacFrameworks/OpenCL/OpenCL HelloWorld

Online Documentation   -   Statistics   -   FAQ   -   Plugin Parts (All, Dependencies)   -   Class hierarchy

New in Version 22.2 22.3 22.4 22.5 23.0 23.1 23.2 23.3 23.4 23.5 24.0 24.1

The list of the   topics,   classes,   interfaces,   controls,   modules,   global methods by category,   global methods by name,   screenshots,   licenses   and   examples.

Platforms to show: All Mac Windows Linux Cross-Platform

/MacFrameworks/OpenCL/OpenCL HelloWorld


Required plugins for this example: MBS MacFrameworks Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacFrameworks/OpenCL/OpenCL HelloWorld

This example is the version from Fri, 29th Jan 2015.

Project "OpenCL HelloWorld.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class Window1 Inherits Window
Control List Inherits Listbox
ControlInstance List Inherits Listbox
End Control
EventHandler Sub Open() // OpenCL example. // based on an example from Apple // http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/Example:Hello,World/Example:Hello,World.html // //////////////////////////////////////////////////////////////////////////////// // Use a static data size for simplicity // const DATA_SIZE = 1024 //////////////////////////////////////////////////////////////////////////////// // Simple compute kernel that computes the square of an input array. // dim KernelSource as string = EndOfLine+_ "__kernel void square( "+EndOfLine+_ " __global float* input, "+EndOfLine+_ " __global float* output, "+EndOfLine+_ " const unsigned int count) "+EndOfLine+_ "{ "+EndOfLine+_ " int i = get_global_id(0); "+EndOfLine+_ " if(i < count) "+EndOfLine+_ " output[i] = input[i] * input[i]; "+EndOfLine+_ "} "+EndOfLine+_ "" //////////////////////////////////////////////////////////////////////////////// // Get data on which to operate // dim outputdata as new MemoryBlock(DATA_SIZE*4) dim inputdata as new MemoryBlock(DATA_SIZE*4) for i as integer = 0 to DATA_SIZE-1 inputdata.SingleValue(i*4)=rnd next // Get an ID for the device dim devices(-1) as CLDeviceMBS = OpenCLMBS.AllDevices(CLDeviceMBS.kDeviceTypeGPU) if UBound(devices)=-1 then MsgBox "no devices found." Return end if dim device as CLDeviceMBS = devices(0) // we use first one // Create a context // dim context as new CLContextMBS(device, CLContextMBS.kErrorModeLogMessagesToSystemLog) // Create a command queue // dim queue as new CLCommandQueueMBS(context, device, 0) // Create the compute program from the source buffer // dim program as new CLProgramMBS(context, KernelSource) // Build the program executable // program.BuildProgram if program.lasterror <> 0 then MsgBox "Error: Failed to build program executable"+EndOfLine+EndOfLine+Program.BuildLog(device) Return end if // take a look on the code 'dim binarysizes(-1) as UInt64 = Program.BinarySizes 'dim binaries(-1) as string = Program.Binaries // Create the compute kernel in the program we wish to run // dim kernel as new clKernelMBS(program, "square") // Create the input and output arrays in device memory for our calculation dim input as new CLMemMBS(context, CLMEMMBS.kMemoryReadOnly, inputdata.Size) dim output as new CLMemMBS(context, CLMEMMBS.kMemoryWriteOnly, outputdata.Size) // Write our data set into the input array in device memory queue.EnqueueWriteBuffer(input, 0, inputdata.Size, inputdata) // Set the arguments to our compute kernel // kernel.SetKernelArgMem(0, input) kernel.SetKernelArgMem(1, output) kernel.SetKernelArgInt32(2, DATA_SIZE) // Get the maximum work-group size for executing the kernel on the device dim localsize as integer = kernel.GetKernelWorkGroupSize(Device) // Execute the kernel over the entire range of the data set // dim globalsize as integer = DATA_SIZE queue.EnqueueNDRangeKernel(kernel, globalsize, localsize) // Wait for the command queue to get serviced before reading back results queue.finish // Read the results from the device // queue.EnqueueReadBuffer(output, 0, outputdata.size, outputdata) // Show result for i as integer = 0 to DATA_SIZE-1 List.AddRow str(i+1) List.Cell(List.LastIndex,1) = str(inputdata.SingleValue(i*4)) List.Cell(List.LastIndex,2) = str(outputdata.SingleValue(i*4)) next End EventHandler
End Class
MenuBar MenuBar1
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem UntitledMenu0 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
End Project

See also:

The items on this page are in the following plugins: MBS MacFrameworks Plugin.


💬 Ask a question or report a problem