Brahma.FSharp.OpenCL.Shared 2.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Brahma.FSharp.OpenCL.Shared --version 2.0.0                
NuGet\Install-Package Brahma.FSharp.OpenCL.Shared -Version 2.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Brahma.FSharp.OpenCL.Shared" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Brahma.FSharp.OpenCL.Shared --version 2.0.0                
#r "nuget: Brahma.FSharp.OpenCL.Shared, 2.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Brahma.FSharp.OpenCL.Shared as a Cake Addin
#addin nuget:?package=Brahma.FSharp.OpenCL.Shared&version=2.0.0

// Install Brahma.FSharp.OpenCL.Shared as a Cake Tool
#tool nuget:?package=Brahma.FSharp.OpenCL.Shared&version=2.0.0                

Brahma.FSharp

FAKE Build NuGet Badge NuGet Badge License

Brahma.FSharp provides a way to utilize GPGPU in your F# programs. It is based on F# quotations to OpenCL translation.

Features

  • Utilization of OpenCL for communication with GPU. So, you can work not only with NVIDIA devices but with any device which supports OpenCL (e.g. with AMD ot Intel devices).
  • Not only primitive types, but also discriminated unions, structs, records are supported.
  • Pattern matching, mutable and immutable bindings, nested bindings are supported.
  • Custom atomics.
  • Fine-grained memory management and kernels compilation process.
  • Mailbox processor based interface for communication with devices.

More details are available here.

Installation

Install Brahma.FSharp by running:

dotnet add package Brahma.FSharp

Setup BRAHMA_OCL_PATH environment variable to opencl.dll location if it differs from default.

Quick Start

open Brahma.FSharp

let device = ClDevice.GetFirstAppropriateDevice()
let context = RuntimeContext(device)

let kernel =
    <@
        fun (range: Range1D) (buffer: int clarray) ->
            let gid = range.GlobalID0
            buffer.[gid] <- buffer.[gid] + 1
    @>

opencl {
    use! buffer = ClArray.alloc<int> 1024
    do! runCommand kernel <| fun kernel ->
        kernel
        <| Range1D(1024, 256)
        <| buffer

    return! ClArray.toHost buffer
}
|> ClTask.runSync context

Contributing

Contributions, issues and feature requests are welcome. Feel free to check issues page if you want to contribute.

Build

Make sure the following requirements are installed on your system:

  • dotnet SDK 5.0 or higher
  • OpenCL-compatible device and respective OpenCL driver

To build and run all tests:

  • on Windows
build.cmd 
  • on Linux/macOS
./build.sh 

To find more options look at MiniScaffold. We use it in our project.

License

This project licensed under EPL-1.0 License. License text can be found in the license file.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Brahma.FSharp.OpenCL.Shared:

Package Downloads
Brahma.FSharp

Core components of Brahma.FSharp.

Brahma.FSharp.OpenCL.Translator

F# quotations to OpenCL C translator.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.0.0-alpha1.5 183 4/17/2024
3.0.0-alpha1.3 68 4/12/2024
3.0.0-alpha1.2 61 4/12/2024
3.0.0-alpha1.1 63 4/9/2024
2.0.5 2,763 2/10/2023
2.0.4 1,034 1/13/2023
2.0.3 3,350 1/4/2023
2.0.2 985 12/28/2022
2.0.1 2,258 8/5/2022
2.0.0 1,733 7/5/2022
2.0.0-alpha9.6 191 6/3/2022
2.0.0-alpha9.5 158 5/7/2022
2.0.0-alpha9.4 150 4/8/2022
2.0.0-alpha9.3 145 3/24/2022
2.0.0-alpha9.2 1,411 11/26/2021

## [2.0.0] - 2022-07-05

[2.0.0]: https://github.com/YaccConstructor/Brahma.FSharp/compare/v1.1.5...v2.0.0

### Fixed
- Blittable types transfer
- Performance issues
- Pointers to private variables are explicitly private
- Performance of blittable types
- Performance of kernels creation
- Issue #135
- Native opencl library linking
- Atomics
- ClArray memory management
- API for buffers manipulation
- Boolean type support (issue ##116, https://github.com/YaccConstructor/Brahma.FSharp/issues/116)
- Nested functions
- Complex let bindings
- ToHost behaviour on non-gpu arrays
- printf/printfn without arguments
- Boolean binary operators
- Transfer arrays of boolean
- Local memory semantic. It is forbidden to initialize variables in the local memory.

- Blittable types transfer
- Performance issues
- Pointers to private variables are explicitly private
- Performance of blittable types
- Performance of kernels creation
- Issue #135
- Native opencl library linking
- Atomics
- ClArray memory management
- API for buffers manipulation
- Boolean type support (issue ##116, https://github.com/YaccConstructor/Brahma.FSharp/issues/116)
- Nested functions
- Complex let bindings
- ToHost behaviour on non-gpu arrays
- printf/printfn without arguments
- Boolean binary operators
- Transfer arrays of boolean
- Local memory semantic. It is forbidden to initialize variables in the local memory.

### Added
- New abstraction for OpenCL device
- Getting workGroupSize inside kernels
- Discriminated unions inside kernel functions
- Stepped and non-integer loops
- ```ClCell``` support
- support of following types
 - ```Tuple``` and ```ValueTuple```
 - Records including generic records
- Workflow builder for OpenCL computations
- New mailbox processor based API
- Targeting .net 5.0
- Kernel compilation caching
- Mutable variables in closures
- support of printf call inside kernel code
- While and for loops in workflow builders
- Basic workflow builders for designing computations

- New abstraction for OpenCL device
- Getting workGroupSize inside kernels
- Discriminated unions inside kernel functions
- Stepped and non-integer loops
- ```ClCell``` support
- support of following types
 - ```Tuple``` and ```ValueTuple```
 - Records including generic records
- Workflow builder for OpenCL computations
- New mailbox processor based API
- Targeting .net 5.0
- Kernel compilation caching
- Mutable variables in closures
- support of printf call inside kernel code
- While and for loops in workflow builders
- Basic workflow builders for designing computations