Focal Module

Header module for all focal parameters, types and interfaces



Contents

fclGetErrorString fclHandleError fclHandleBuildError fclDefaultErrorHandler fclRuntimeError fclAllocHost fclFreeHost assignment(=) fclBufferSwap fclInitBuffer fclInitSubBuffer fclMemWriteScalar fclMemWriteScalarInt32 fclMemWriteScalarFloat fclMemWriteScalarDouble fclMemWrite fclMemWriteInt32 fclMemWriteFloat fclMemWriteDouble fclMemRead fclMemReadInt32 fclMemReadFloat fclMemReadDouble fclMemCopy fclMemCopyInt32 fclMemCopyFloat fclMemCopyDouble fclFreeBuffer fclGetPlatformInfo fclGetDeviceInfo fclGetKernelInfo fclGetKernelWorkGroupInfo fclGetKernelArgInfo fclGetEventInfo fclGetPlatforms fclGetPlatform fclGetPlatformDevices fclGetDevice fclCreateContext fclFilterDevices fclInit fclSetDefaultContext fclFindDevices fclCreateCommandQ fclCreateCommandQPool fclCommandQPool_Next fclCommandQPool_Current fclSetDefaultCommandQ fclCompileProgram fclDumpBuildLog fclGetProgramKernel fclReleaseProgram fclLaunchKernelAfter fclLocalInt32 fclLocalFloat fclLocalDouble fclLaunchKernel fclProcessKernelArgs fclSetKernelArgs fclSetKernelArg fclReleaseKernel fclBarrier fclWait assignment(=) fclReleaseEvent fclRetainEvent fclSetDependency fclPopDependencies fclClearDependencies fclCreateUserEvent fclSetUserEvent fclProfilerAdd fclGetEventDurations fclEnableProfiling fclPushProfileEvent fclDumpProfileData fclDumpKernelProfileData fclDumpBufferProfileData fclDumpTracingData fclDbgOptions fclDbgCheckContext fclDbgCheckDevice fclDbgCheckBufferInit fclDbgCheckBufferSize fclDbgCheckCopyBufferSize fclDbgCheckKernelNArg fclDbgCheckKernelArgType fclDbgCheckKernelArgQualifier fclDbgWait fclGetKernelResource fclSourceFromFile strStripNum upperStr str_noesc splitStr

Variables

Type Visibility Attributes Name Initial
integer, public, parameter :: errStringLen = 50

Max length of OpenCL error code strings

integer, public, parameter :: fclAllocationSize = 10

Default allocation increment for dynamically growing lists

integer, public, parameter :: CL_PLATFORM_NOT_FOUND_KHR = -1001

Extension error: No valid ICDs found

integer, public, parameter :: NV_ILLEGAL_BUFFER_READ_WRITE = -9999

Vendor error: Illegal read or write to a buffer in NDRangeKernel

type(fclCommandQ), public, target :: fclDefaultCmdQ

Default command queue: used when command queue is omittetd in focal api calls

type(fclContext), public, target :: fclDefaultCtx

Default context: used when context is omittetd in focal api calls

type(fclProfiler), public :: fclDefaultProfiler

Default profiler: used when profile is omitted in focal api calls

type(fclEvent), public, target :: fclLastWriteEvent

Focal event object for the most recent write event (host-to-device) to be enqueued

type(fclEvent), public, target :: fclLastReadEvent

Focal event object for the most recent read event (device-to-host) to be enqueued

type(fclEvent), public, target :: fclLastCopyEvent

Focal event object for the most recent copy event (device-to-device) to be enqueued

type(fclEvent), public, target :: fclLastKernelEvent

Focal event object for the most recent kernel event to be enqueued

type(fclEvent), public, target :: fclLastBarrierEvent

Focal event object for the most recent barrier event to be enqueued

character(kind=c_char, len=1), public, target, bind(C,name="0") :: fclKernelStart

c interoperable character for start of fclKernels binary resource

character(kind=c_char, len=1), public, target, bind(C,name="0") :: fclKernelEnd

c interoperable character for sendtart of fclKernels binary resource

procedure(fclHandleErrorInterface), public, pointer :: fclErrorHandler => NULL()

Procedure pointer for custom OpenCL runtime error handler

integer(kind=c_intptr_t), public, allocatable :: fclHostPtrMap(:,:)

Map allocated host pointers to cl_buffer pointers (needed for deallocation)


Interfaces

interface

  • public module function fclGetErrorString(errcode) result(errstr)

    Return the text representation for an openCL error code

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: errcode

    OpenCL API error code

    Return Value character(len=errStringLen)

    Returns OpenCL error string

interface

  • public module subroutine fclHandleError(errcode, focalCall, oclCall)

    Wrapper to invoke fclErrorHandle procedure pointer (fixes issue with ifort)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_int32_t), intent(in) :: errcode
    character(len=*), intent(in) :: focalCall
    character(len=*), intent(in) :: oclCall

interface

  • public module subroutine fclHandleBuildError(builderrcode, prog, ctx)

    Check an openCL error code and print build log if necessary

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: builderrcode

    OpenCL API error code

    type(fclProgram), intent(in) :: prog

    Focal program object

    type(fclContext), intent(in) :: ctx

    Focal context object

interface

  • public module subroutine fclDefaultErrorHandler(errcode, focalCall, oclCall)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_int32_t), intent(in) :: errcode
    character(len=*), intent(in) :: focalCall
    character(len=*), intent(in) :: oclCall

interface

  • public module subroutine fclRuntimeError(descrip)

    Stop and print message for Focal errors not caused by openCL API call

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in), optional :: descrip

    Description of current API call

public interface fclAllocHost

Generic interface for allocating host arrays using 'pinned' (non-paged) memory. This is required for asynchronous transfers.

Currently implements interfaces for 1D and 2D int32, float and double arrays.

Example: Allocate a 1D integer array with 100 elements

integer, pointer :: hostArray(:)

call fclAllocHost(cmdq,hostArray,100)

NB: cmdq is optional, if omitted then the default command queue is used

  • public module subroutine fclAllocHostPtr_1(cmdq, hostPtr, nBytes)

    Allocate a 'pinned' (non-paged) host array

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq

    Command Q with which to associate the allocated device memory

    type(c_ptr), intent(out) :: hostPtr

    c pointer to allocated host memory

    integer(kind=c_int64_t), intent(in) :: nBytes

    Desired array size in bytes

  • public module subroutine fclAllocHostPtr_2(hostPtr, nBytes)

    Allocate a 'pinned' (non-paged) host array on default cmdq

    Arguments

    Type IntentOptional Attributes Name
    type(c_ptr), intent(out) :: hostPtr

    c pointer to allocated host memory

    integer(kind=c_int64_t), intent(in) :: nBytes

    Desired array size in bytes

  • public module subroutine fclAllocHostInt32D1_1(cmdq, hostPtr, dim)

    Allocate a 1D 'pinned' host array for 32bit integers

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq

    Command Q with which to associate the allocated device memory

    integer(kind=c_int32_t), intent(inout), pointer :: hostPtr(:)

    Host array pointer to allocate

    integer, intent(in) :: dim

    Size of array to allocate

  • public module subroutine fclAllocHostInt32D1_2(hostPtr, dim)

    Allocate a 1D 'pinned' host array for 32bit integers on default cmdq

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_int32_t), intent(inout), pointer :: hostPtr(:)

    Host array pointer to allocate

    integer, intent(in) :: dim

    Size of array to allocate

  • public module subroutine fclAllocHostFloatD1_1(cmdq, hostPtr, dim)

    Allocate a 1D 'pinned' host array for 32bit reals

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq

    Command Q with which to associate the allocated device memory

    real(kind=c_Float), intent(inout), pointer :: hostPtr(:)

    Host array pointer to allocate

    integer, intent(in) :: dim

    Size of array to allocate

  • public module subroutine fclAllocHostFloatD1_2(hostPtr, dim)

    Allocate a 1D 'pinned' host array for 32bit reals on default cmdq

    Arguments

    Type IntentOptional Attributes Name
    real(kind=c_Float), intent(inout), pointer :: hostPtr(:)

    Host array pointer to allocate

    integer, intent(in) :: dim

    Size of array to allocate

  • public module subroutine fclAllocHostDoubleD1_1(cmdq, hostPtr, dim)

    Allocate a 1D 'pinned' host array for 64bit reals

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq

    Command Q with which to associate the allocated device memory

    real(kind=c_Double), intent(inout), pointer :: hostPtr(:)

    Host array pointer to allocate

    integer, intent(in) :: dim

    Size of array to allocate

  • public module subroutine fclAllocHostDoubleD1_2(hostPtr, dim)

    Allocate a 1D 'pinned' host array for 64bit reals on default cmdq

    Arguments

    Type IntentOptional Attributes Name
    real(kind=c_Double), intent(inout), pointer :: hostPtr(:)

    Host array pointer to allocate

    integer, intent(in) :: dim

    Size of array to allocate

public interface fclFreeHost

Generic interface to free pinned host pointer

  • public module subroutine fclFreeHostPtr_1(cmdq, hostPtr)

    Enqueue unmap/free command to specific command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq
    type(c_ptr), intent(in) :: hostPtr
  • public module subroutine fclFreeHostPtr_2(hostPtr)

    Enqueue unmap/free command to default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(c_ptr), intent(inout) :: hostPtr
  • public module subroutine fclFreeHostInt32_1(cmdq, hostPtr)

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq
    integer(kind=c_int32_t), intent(inout), pointer :: hostPtr(:)
  • public module subroutine fclFreeHostInt32_2(hostPtr)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_int32_t), intent(inout), pointer :: hostPtr(:)
  • public module subroutine fclFreeHostFloat_1(cmdq, hostPtr)

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq
    real(kind=c_float), intent(inout), pointer :: hostPtr(:)
  • public module subroutine fclFreeHostFloat_2(hostPtr)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=c_float), intent(inout), pointer :: hostPtr(:)
  • public module subroutine fclFreeHostDouble_1(cmdq, hostPtr)

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq
    real(kind=c_double), intent(inout), pointer :: hostPtr(:)
  • public module subroutine fclFreeHostDouble_2(hostPtr)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=c_double), intent(inout), pointer :: hostPtr(:)

public interface assignment(=)

Generic interface for assignment of fclBuffer objects by operator-overloading

interface

  • public module subroutine fclBufferSwap(memObject1, memObject2)

    Helper routine for swapping device buffer pointers. Also swaps the command queue pointers associated with each buffer if different.

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer), intent(inout) :: memObject1

    Buffer objects with which to swap pointers

    class(fclDeviceBuffer), intent(inout) :: memObject2

    Buffer objects with which to swap pointers

public interface fclInitBuffer

Generic interface to initialise buffers on the device

  • public module subroutine fclInitBufferUntyped_1(cmdq, buffer, nBytes, profileName, access)

    Initialise untyped buffer object on specified command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceBuffer), intent(inout) :: buffer

    Focal memory object to initialise

    integer(kind=c_size_t), intent(in) :: nBytes

    Size of buffer in bytes

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitBufferUntyped_2(buffer, nBytes, profileName, access)

    Initialise untyped buffer object on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceBuffer), intent(inout) :: buffer

    Focal memory object to initialise

    integer(kind=c_size_t), intent(in) :: nBytes

    Size of buffer in bytes

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitBufferFloat_1(cmdq, buffer, dim, profileName, access)

    Initialise float buffer object on specific command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceFloat), intent(inout) :: buffer

    Focal memory object to initialise

    integer, intent(in) :: dim

    Dimension of buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitBufferFloat_2(buffer, dim, profileName, access)

    Initialise float buffer object on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceFloat), intent(inout) :: buffer

    Focal memory object to initialise

    integer, intent(in) :: dim

    Dimension of buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitBufferDouble_1(cmdq, buffer, dim, profileName, access)

    Initialise double buffer object on specific command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceDouble), intent(inout) :: buffer

    Focal memory object to initialise

    integer, intent(in) :: dim

    Dimension of buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitBufferDouble_2(buffer, dim, profileName, access)

    Initialise double buffer object on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceDouble), intent(inout) :: buffer

    Focal memory object to initialise

    integer, intent(in) :: dim

    Dimension of buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitBufferInt32_1(cmdq, buffer, dim, profileName, access)

    Initialise 32bit integer buffer object on specific command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceInt32), intent(inout) :: buffer

    Focal memory object to initialise

    integer, intent(in) :: dim

    Dimension of buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitBufferInt32_2(buffer, dim, profileName, access)

    Initialise 32bit integer buffer object on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceInt32), intent(inout) :: buffer

    Focal memory object to initialise

    integer, intent(in) :: dim

    Dimension of buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

public interface fclInitSubBuffer

Generic interface to initialise sub-buffers on the device

  • public module subroutine fclInitSubBufferUntyped_1(cmdq, subBuffer, sourceBuffer, offset, size, profileName, access)

    Initialise an untyped sub-buffer from an existing buffer

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceBuffer), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    class(fclDeviceBuffer), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer(kind=c_size_t), intent(in) :: offset

    Offset in bytes of sub-buffer within sourceBuffer

    integer(kind=c_size_t), intent(in) :: size

    Size in bytes of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitSubBufferUntyped_2(subBuffer, sourceBuffer, offset, size, profileName, access)

    Initialise an untyped sub-buffer from an existing buffer on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceBuffer), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    class(fclDeviceBuffer), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer(kind=c_size_t), intent(in) :: offset

    Offset in bytes of sub-buffer within sourceBuffer

    integer(kind=c_size_t), intent(in) :: size

    Size in bytes of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitSubBufferFloat_1(cmdq, subBuffer, sourceBuffer, start, length, profileName, access)

    Initialise a float sub-buffer from an existing float buffer

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceFloat), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    type(fclDeviceFloat), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer, intent(in) :: start

    Zero-based start element of sub-buffer within sourceBuffer

    integer, intent(in) :: length

    Length (no. of elements) of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitSubBufferFloat_2(subBuffer, sourceBuffer, start, length, profileName, access)

    Initialise a float sub-buffer from an existing float buffer on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceFloat), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    type(fclDeviceFloat), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer, intent(in) :: start

    Zero-based start element of sub-buffer within sourceBuffer

    integer, intent(in) :: length

    Length (no. of elements) of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitSubBufferDouble_1(cmdq, subBuffer, sourceBuffer, start, length, profileName, access)

    Initialise a double sub-buffer from an existing float buffer

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceDouble), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    type(fclDeviceDouble), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer, intent(in) :: start

    Zero-based start element of sub-buffer within sourceBuffer

    integer, intent(in) :: length

    Length (no. of elements) of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitSubBufferDouble_2(subBuffer, sourceBuffer, start, length, profileName, access)

    Initialise a double sub-buffer from an existing float buffer on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceDouble), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    type(fclDeviceDouble), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer, intent(in) :: start

    Zero-based start element of sub-buffer within sourceBuffer

    integer, intent(in) :: length

    Length (no. of elements) of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitSubBufferint32_1(cmdq, subBuffer, sourceBuffer, start, length, profileName, access)

    Initialise a 32bit integer sub-buffer from an existing float buffer

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in), target :: cmdq

    Queue with which to associate new buffer

    type(fclDeviceInt32), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    type(fclDeviceInt32), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer, intent(in) :: start

    Zero-based start element of sub-buffer within sourceBuffer

    integer, intent(in) :: length

    Length (no. of elements) of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

  • public module subroutine fclInitSubBufferint32_2(subBuffer, sourceBuffer, start, length, profileName, access)

    Initialise a 32bit integer sub-buffer from an existing float buffer on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclDeviceInt32), intent(inout) :: subBuffer

    Focal memory object to initialise as new sub-buffer

    type(fclDeviceInt32), intent(inout) :: sourceBuffer

    Focal memory object in which to create sub-buffer

    integer, intent(in) :: start

    Zero-based start element of sub-buffer within sourceBuffer

    integer, intent(in) :: length

    Length (no. of elements) of sub-buffer

    character(len=*), intent(in), optional :: profileName

    Descriptive name for profiling output

    character(len=*), intent(in), optional :: access

    Read/write access of kernels to buffer 'rw' = read&write (default), 'r'=read-only, 'w'=write-only

interface

  • public module subroutine fclMemWriteScalar(memObject, hostBufferPtr, nBytesPattern)

    Fill device buffer with scalar pattern

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer), intent(inout), target :: memObject

    Focal memory object to fill

    type(c_ptr), intent(in) :: hostBufferPtr

    C Pointer to host scalar patter

    integer(kind=c_size_t), intent(in) :: nBytesPattern

    Size of scalar pattern in bytes

interface

  • public module subroutine fclMemWriteScalarInt32(memObject, hostValue)

    Assign a scalar integer to a device integer memory buffer Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceInt32), intent(inout) :: memObject

    Focal memory object to fill

    integer(kind=c_int32_t), intent(in), target :: hostValue

    Host value with which to fill

interface

  • public module subroutine fclMemWriteScalarFloat(memObject, hostValue)

    Assign a scalar float to a device float memory buffer Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceFloat), intent(inout) :: memObject

    Focal memory object to fill

    real(kind=c_float), intent(in), target :: hostValue

    Host value with which to fill

interface

  • public module subroutine fclMemWriteScalarDouble(memObject, hostValue)

    Assign a scalar double to a device double memory buffer Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceDouble), intent(inout) :: memObject

    Focal memory object to fill

    real(kind=c_double), intent(in), target :: hostValue

    Host value with which to fill

interface

  • public module subroutine fclMemWrite(memObject, hostBufferPtr, nBytes)

    Transfer host buffer to device buffer

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer), intent(inout), target :: memObject

    Focal memory object (target)

    type(c_ptr), intent(in) :: hostBufferPtr

    C Pointer to host array (source)

    integer(kind=c_size_t), intent(in) :: nBytes

    Size of buffers in bytes

interface

  • public module subroutine fclMemWriteInt32(memObject, hostBuffer)

    Transfer host integer array to device integer array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceInt32), intent(inout) :: memObject

    Focal memory object (target)

    integer(kind=c_int32_t), intent(in), target :: hostBuffer(:)

    Host array (source)

interface

  • public module subroutine fclMemWriteFloat(memObject, hostBuffer)

    Transfer host float array to device float array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceFloat), intent(inout) :: memObject

    Focal memory object (target)

    real(kind=c_float), intent(in), target :: hostBuffer(:)

    Host array (source)

interface

  • public module subroutine fclMemWriteDouble(memObject, hostBuffer)

    Transfer host double array to device double array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceDouble), intent(inout) :: memObject

    Focal memory object (target)

    real(kind=c_double), intent(in), target :: hostBuffer(:)

    Host array (source)

interface

  • public module subroutine fclMemRead(hostBufferPtr, memObject, nBytes)

    Transfer device buffer to host buffer

    Arguments

    Type IntentOptional Attributes Name
    type(c_ptr), intent(in) :: hostBufferPtr

    C pointer to host buffer (target)

    class(fclDeviceBuffer), intent(in), target :: memObject

    Focal memory object (source)

    integer(kind=c_size_t), intent(in) :: nBytes

    Size of buffers in bytes

interface

  • public module subroutine fclMemReadInt32(hostBuffer, memObject)

    Transfer device integer array to host integer array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_int32_t), intent(inout), target :: hostBuffer(:)

    Host array (target)

    class(fclDeviceInt32), intent(in) :: memObject

    Focal memory object (source)

interface

  • public module subroutine fclMemReadFloat(hostBuffer, memObject)

    Transfer device float array to host float array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=c_float), intent(inout), target :: hostBuffer(:)

    Host array (target)

    class(fclDeviceFloat), intent(in) :: memObject

    Focal memory object (source)

interface

  • public module subroutine fclMemReadDouble(hostBuffer, memObject)

    Transfer device double array to host double array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=c_double), intent(inout), target :: hostBuffer(:)

    Host array (target)

    class(fclDeviceDouble), intent(in) :: memObject

    Focal memory object (source)

interface

  • public module subroutine fclMemCopy(memObject1, memObject2)

    Transfer device buffer to device buffer

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer), intent(inout), target :: memObject1

    Focal memory object (target)

    class(fclDeviceBuffer), intent(in) :: memObject2

    Focal memory object (source)

interface

  • public module subroutine fclMemCopyInt32(memObject1, memObject2)

    Transfer device integer array to device integer array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceInt32), intent(inout), target :: memObject1

    Focal memory object (target)

    class(fclDeviceInt32), intent(in) :: memObject2

    Focal memory object (source)

interface

  • public module subroutine fclMemCopyFloat(memObject1, memObject2)

    Transfer device float array to device float array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceFloat), intent(inout), target :: memObject1

    Focal memory object (target)

    class(fclDeviceFloat), intent(in) :: memObject2

    Focal memory object (source)

interface

  • public module subroutine fclMemCopyDouble(memObject1, memObject2)

    Transfer device double array to device double array Called by operator-overloading of assignment(=)

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceDouble), intent(inout), target :: memObject1

    Focal memory object (target)

    class(fclDeviceDouble), intent(in) :: memObject2

    Focal memory object (source)

interface

  • public module subroutine fclFreeBuffer(memObject)

    Release device memory associated with memObject

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer) :: memObject

interface

  • public module subroutine fclGetPlatformInfo(platform, key, value)

    Query platform information. See clGetPlatformInfo for values of 'key' argument containined in clfortran module.

    Arguments

    Type IntentOptional Attributes Name
    type(fclPlatform), intent(in) :: platform
    integer(kind=c_int32_t), intent(in) :: key
    character(len=:), intent(out), allocatable, target :: value

public interface fclGetDeviceInfo

Generic interface to query device information. See clGetDeviceInfo for values of 'key' argument contained in clfortran module.

  • public module subroutine fclGetDeviceInfoString(device, key, value)

    Arguments

    Type IntentOptional Attributes Name
    type(fclDevice), intent(in) :: device
    integer(kind=c_int32_t), intent(in) :: key
    character(len=:), intent(out), allocatable, target :: value
  • public module subroutine fclGetDeviceInfoInt32(device, key, value)

    Arguments

    Type IntentOptional Attributes Name
    type(fclDevice), intent(in) :: device
    integer(kind=c_int32_t), intent(in) :: key
    integer(kind=c_int32_t), intent(out), target :: value
  • public module subroutine fclGetDeviceInfoInt64(device, key, value)

    Arguments

    Type IntentOptional Attributes Name
    type(fclDevice), intent(in) :: device
    integer(kind=c_int32_t), intent(in) :: key
    integer(kind=c_int64_t), intent(out), target :: value

public interface fclGetKernelInfo

Generic interface to query kernel information. See clGetDeviceInfo for values of 'key' argument contained in clfortran module.

  • public module subroutine fclGetKernelInfoString(kernel, key, value)

    Query kernel information for string info. See clGetPlatformInfo for values of 'key' argument containined in clfortran module.

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    integer(kind=c_int32_t), intent(in) :: key
    character(len=:), intent(out), allocatable, target :: value
  • public module subroutine fclGetKernelInfoInt32(kernel, key, value)

    Query kernel information for 32bit integer. See clGetPlatformInfo for values of 'key' argument containined in clfortran module.

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    integer(kind=c_int32_t), intent(in) :: key
    integer(kind=c_int32_t), intent(out), target :: value

public interface fclGetKernelWorkGroupInfo

  • public module subroutine fclGetKernelWorkGroupInfoInt64(kernel, device, key, value)

    Query kernel work group information for 64bit integer. See clGetPlatformInfo for values of 'key' argument containined in clfortran module.

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    type(fclDevice), intent(in) :: device
    integer(kind=c_int32_t), intent(in) :: key
    integer(kind=c_int64_t), intent(out), target :: value

public interface fclGetKernelArgInfo

Generic interface to query kernel argument information. See clGetDeviceInfo for values of 'key' argument contained in clfortran module.

  • public module subroutine fclGetKernelArgInfoString(kernel, argNo, key, value)

    Query kernel information for string info. See clGetPlatformInfo for values of 'key' argument containined in clfortran module.

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    integer, intent(in) :: argNo
    integer(kind=c_int32_t), intent(in) :: key
    character(len=:), intent(out), allocatable, target :: value
  • public module subroutine fclGetKernelArgInfoInt32(kernel, argNo, key, value)

    Query kernel information for 32bit integer. See clGetPlatformInfo for values of 'key' argument containined in clfortran module.

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    integer, intent(in) :: argNo
    integer(kind=c_int32_t), intent(in) :: key
    integer(kind=c_int32_t), intent(out), target :: value

interface

  • public module subroutine fclGetEventInfo(event, key, value)

    Query kernel information for 32bit integer. See clGetPlatformInfo for values of 'key' argument containined in clfortran module.

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in) :: event
    integer(kind=c_int32_t), intent(in) :: key
    integer(kind=c_int32_t), intent(out), target :: value

interface

  • public module function fclGetPlatforms() result(platforms)

    Return pointer to array of available fclPlatforms

    Arguments

    None

    Return Value type(fclPlatform), allocatable, (:)

interface

  • public module function fclGetPlatform(platform_id) result(platform)

    Return fclPlatform object for OpenCL platform id

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_intptr_t), intent(in) :: platform_id

    OpenCL platform id

    Return Value type(fclPlatform), target

interface

  • public module function fclGetPlatformDevices(platform_id) result(devices)

    Return pointer to array of fclDevices on platform id

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_intptr_t), intent(in) :: platform_id

    OpenCL platform id

    Return Value type(fclDevice), allocatable, (:)

interface

  • public module function fclGetDevice(device_id) result(device)

    Return fclDevice for OpenCL device id

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_intptr_t), intent(in) :: device_id

    OpenCL device id

    Return Value type(fclDevice), target

public interface fclCreateContext

Generic interface to create a context

  • public module function fclCreateContextWithPlatform(platform) result(ctx)

    Create a context with fclPlatform object

    Arguments

    Type IntentOptional Attributes Name
    type(fclPlatform), intent(inout), target :: platform

    Return Value type(fclContext), target

  • public module function fclCreateContextWithVendor(vendor) result(ctx)

    Create a context with the first platform where the vendor property contains a specified string (case-insensitive).

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: vendor

    String with which to match platform vendor. Separate multiple vendors with commas. First matching vendor in list is used. Matching is case-insensitive substring.

    e.g. vendor='i' matches 'nvidia' and 'intel' platforms

    e.g. vendor='nvidia,intel' matches nvidia platform if available, then intel platform if available, then fails fatally if neither are available.

    Return Value type(fclContext), target

interface

  • public module function fclFilterDevices(devices, vendor, type, nameLike, extensions, sortBy) result(deviceList)

    Filter and sort list of devices based on criteria

    Arguments

    Type IntentOptional Attributes Name
    type(fclDevice), intent(in) :: devices(:)
    character(len=*), intent(in), optional :: vendor

    Filter device list based on platform vendor. Specify multiple possible vendors in comma-separate list

    character(len=*), intent(in), optional :: type

    Filter device list based on device type. Specify at least one of 'cpu', 'gpu', default: 'cpu,gpu' (both)

    character(len=*), intent(in), optional :: nameLike

    Filter devices based on device name. Look for this substring in device name.

    character(len=*), intent(in), optional :: extensions

    Filter devices based on supported device extensions. Specify comma-separated list of OpenCL extension names, e.g. cl_khr_fp64. See clGetDeviceInfo Extensions specified are requirements: devices are filtered-out if they don't support all extensions specified.

    character(len=*), intent(in), optional :: sortBy

    Sort device list based on either 'memory': total global memory, 'cores': total number of compute units, 'clock': maximum clock speed

    Return Value type(fclDevice), allocatable, (:)

    Filtered and sorted list. Unallocated if no matching devices found.

interface

  • public module function fclInit(vendor, type, nameLike, extensions, sortBy) result(device)

    Quick setup helper function: find a single device based on criteria and set the default context accordingly. Raises runtime error if no matching device is found.

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in), optional :: vendor

    Filter device based on platform vendor Specify multiple possible vendors in comma-separate list

    character(len=*), intent(in), optional :: type

    Filter device list based on device type. Specify at least one of 'cpu', 'gpu', default: 'cpu,gpu' (both)

    character(len=*), intent(in), optional :: nameLike

    Filter devices based on device name. Look for this substring in device name.

    character(len=*), intent(in), optional :: extensions

    Filter devices based on supported device extensions. Specify comma-separated list of OpenCL extension names, e.g. cl_khr_fp64. See clGetDeviceInfo Extensions specified are requirements: devices are filtered-out if they don't support all extensions specified.

    character(len=*), intent(in), optional :: sortBy

    Sort device list based on either 'memory': total global memory, 'cores': total number of compute units, 'clock': maximum clock speed

    Return Value type(fclDevice), allocatable

    The device chosen based on the user criteria

interface

  • public module subroutine fclSetDefaultContext(ctx)

    Set the global default context

    Arguments

    Type IntentOptional Attributes Name
    type(fclContext), intent(in) :: ctx

public interface fclFindDevices

Generic interface to list devices, sorted and filtered by properties Raises runtime error if no matching device is found.

  • public module function fclFindDevices_1(ctx, vendor, type, nameLike, extensions, sortBy) result(deviceList)

    Arguments

    Type IntentOptional Attributes Name
    type(fclContext), intent(in), target :: ctx

    Context containing device for command queue

    character(len=*), intent(in), optional :: vendor

    Filter device list based on platform vendor. Specify multiple possible vendors in comma-separate list

    character(len=*), intent(in), optional :: type

    Filter device list based on device type. Specify at least one of 'cpu', 'gpu', default: 'cpu,gpu' (both)

    character(len=*), intent(in), optional :: nameLike

    Filter devices based on device name. Look for this substring in device name.

    character(len=*), intent(in), optional :: extensions

    Filter devices based on supported device extensions. Specify comma-separated list of OpenCL extension names, e.g. cl_khr_fp64. See clGetDeviceInfo Extensions specified are requirements: devices are filtered-out if they don't support all extensions specified.

    character(len=*), intent(in), optional :: sortBy

    Sort device list based on either 'memory': total global memory, 'cores': total number of compute units, 'clock': maximum clock speed

    Return Value type(fclDevice), allocatable, (:)

  • public module function fclFindDevices_2(vendor, type, nameLike, extensions, sortBy) result(deviceList)

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in), optional :: vendor

    Filter device list based on platform vendor. Specify multiple possible vendors in comma-separate list

    character(len=*), intent(in), optional :: type

    Filter device list based on device type. Specify at least one of 'cpu', 'gpu', default: 'cpu,gpu' (both)

    character(len=*), intent(in), optional :: nameLike

    Filter devices based on device name. Look for this substring in device name.

    character(len=*), intent(in), optional :: extensions

    Filter devices based on supported device extensions. Specify comma-separated list of OpenCL extension names, e.g. cl_khr_fp64. See clGetDeviceInfo Extensions specified are requirements: devices are filtered-out if they don't support all extensions specified.

    character(len=*), intent(in), optional :: sortBy

    Sort device list based on either 'memory': total global memory, 'cores': total number of compute units, 'clock': maximum clock speed

    Return Value type(fclDevice), allocatable, (:)

public interface fclCreateCommandQ

Generic interface to create a device command queue

  • public module function fclCreateCommandQ_1(ctx, device, enableProfiling, outOfOrderExec, blockingWrite, blockingRead) result(cmdq)

    Create a command queue with a Focal device object

    Arguments

    Type IntentOptional Attributes Name
    type(fclContext), intent(in), target :: ctx

    Context containing device for command queue

    type(fclDevice), intent(inout), target :: device

    Device on which to create command queue

    logical, intent(in), optional :: enableProfiling

    Enable OpenCL profiling

    logical, intent(in), optional :: outOfOrderExec

    Enable out of order execution

    logical, intent(in), optional :: blockingWrite

    Enable/disable host-blocking write to device

    logical, intent(in), optional :: blockingRead

    Enable/disable host-blocking read from device

    Return Value type(fclCommandQ)

    Returns fclCommandQ object

  • public module function fclCreateCommandQ_2(device, enableProfiling, outOfOrderExec, blockingWrite, blockingRead) result(cmdq)

    Create a command queue with a Focal device object using default context

    Arguments

    Type IntentOptional Attributes Name
    type(fclDevice), intent(inout), target :: device

    Device on which to create command queue

    logical, intent(in), optional :: enableProfiling

    Enable OpenCL profiling

    logical, intent(in), optional :: outOfOrderExec

    Enable out of order execution

    logical, intent(in), optional :: blockingWrite

    Enable/disable host-blocking write to device

    logical, intent(in), optional :: blockingRead

    Enable/disable host-blocking read from device

    Return Value type(fclCommandQ)

    Returns fclCommandQ object

public interface fclCreateCommandQPool

Generic interface to create a pool of command queues

  • public module function fclCreateCommandQPool_1(ctx, N, device, enableProfiling, outOfOrderExec, blockingWrite, blockingRead) result(qPool)

    Create a command queue pool with a Focal device object

    Arguments

    Type IntentOptional Attributes Name
    type(fclContext), intent(in), target :: ctx

    Context containing device for command queue

    integer, intent(in) :: N

    Number of command queues to create in pool

    type(fclDevice), intent(inout), target :: device

    Device on which to create command queue

    logical, intent(in), optional :: enableProfiling

    Enable OpenCL profiling

    logical, intent(in), optional :: outOfOrderExec

    Enable out of order execution

    logical, intent(in), optional :: blockingWrite

    Enable/disable host-blocking write to device

    logical, intent(in), optional :: blockingRead

    Enable/disable host-blocking read from device

    Return Value type(fclCommandQPool)

    Returns fclCommandQPool object

  • public module function fclCreateCommandQPool_2(N, device, enableProfiling, outOfOrderExec, blockingWrite, blockingRead) result(qPool)

    Create a command queue pool with a Focal device object using default context

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: N

    Number of command queues to create in pool

    type(fclDevice), intent(inout), target :: device

    Device on which to create command queue

    logical, intent(in), optional :: enableProfiling

    Enable OpenCL profiling

    logical, intent(in), optional :: outOfOrderExec

    Enable out of order execution

    logical, intent(in), optional :: blockingWrite

    Enable/disable host-blocking write to device

    logical, intent(in), optional :: blockingRead

    Enable/disable host-blocking read from device

    Return Value type(fclCommandQPool)

    Returns fclCommandQPool object

interface

  • public module function fclCommandQPool_Next(qPool) result(cmdQ)

    Returns next scheduled queue in queue pool

    Arguments

    Type IntentOptional Attributes Name
    class(fclCommandQPool), intent(inout), target :: qPool

    Return Value type(fclCommandQ), pointer

interface

  • public module function fclCommandQPool_Current(qPool) result(cmdQ)

    Returns current scheduled queue in queue pool

    Arguments

    Type IntentOptional Attributes Name
    class(fclCommandQPool), intent(in), target :: qPool

    Return Value type(fclCommandQ), pointer

interface

  • public module subroutine fclSetDefaultCommandQ(cmdq)

    Set the global default command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq

public interface fclCompileProgram

Generic interface to compile an openCL program

  • public module function fclCompileProgram_1(ctx, source, options) result(prog)

    Compile program source on context ctx

    Arguments

    Type IntentOptional Attributes Name
    type(fclContext), intent(in), target :: ctx
    character(len=*), intent(in) :: source

    Program source code

    character(len=*), intent(in), optional :: options

    OpenCL compilation options

    Return Value type(fclProgram)

    Returns fclProgram object

  • public module function fclCompileProgram_2(source, options) result(prog)

    Compile program source on fclDefaultContext

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: source

    Program source code

    character(len=*), intent(in), optional :: options

    OpenCL compilation options

    Return Value type(fclProgram)

    Returns fclProgram object

public interface fclDumpBuildLog

  • public module subroutine fclDumpBuildLog_1(ctx, prog, device, outputUnit)

    Arguments

    Type IntentOptional Attributes Name
    type(fclContext), intent(in) :: ctx
    type(fclProgram), intent(in) :: prog
    type(fclDevice), intent(in) :: device
    integer, intent(in), optional :: outputUnit
  • public module subroutine fclDumpBuildLog_2(prog, device, outputUnit)

    Arguments

    Type IntentOptional Attributes Name
    type(fclProgram), intent(in) :: prog
    type(fclDevice), intent(in) :: device
    integer, intent(in), optional :: outputUnit

interface

  • public module function fclGetProgramKernel(prog, kernelName, global_work_size, local_work_size, work_dim, global_work_offset) result(kern)

    Extract a kernel object for execution from a compiled program object

    Arguments

    Type IntentOptional Attributes Name
    type(fclProgram), intent(in) :: prog

    Compiled program object containing kernel

    character(len=*), intent(in) :: kernelName

    Name of kernel to extract for execution

    integer, intent(in), optional :: global_work_size(:)

    Global work group dimensions, default unset (must set prior to launching)

    integer, intent(in), optional :: local_work_size(:)

    Local work group dimensions, default zeros (decided by OpenCL runtime)

    integer, intent(in), optional :: work_dim

    Number of dimensions for kernel work group, default 1

    integer, intent(in), optional :: global_work_offset(:)

    Global work group offsets, default zeros

    Return Value type(fclKernel)

    Returns fclKernel object for execution

interface

  • public module subroutine fclReleaseProgram(prog)

    Release underlying memory associated with OpenCL program pointer

    Arguments

    Type IntentOptional Attributes Name
    type(fclProgram), intent(in) :: prog

    Compiled program object containing kernel

public interface fclLaunchKernelAfter

Generic interface to launch a kernel with event dependencies

  • public module subroutine fclLaunchKernelAfterEvent_1(kernel, cmdQ, event)

    Specific interface for a single event dependency on a specific command queue

    Arguments

    Type IntentOptional Attributes Name
    class(fclKernel), intent(inout) :: kernel

    Focal kernel object to launch

    type(fclCommandQ), intent(inout) :: cmdQ

    CmdQ on which to launch kernel

    type(fclEvent), intent(in) :: event

    Event dependency for kernel

  • public module subroutine fclLaunchKernelAfterEvent_2(kernel, event)

    Specific interface a single event dependency on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    class(fclKernel), intent(inout) :: kernel

    Focal kernel object to launch

    type(fclEvent), intent(in) :: event

    Event dependency for kernel

  • public module subroutine fclLaunchKernelAfterEventList_1(kernel, cmdQ, eventList)

    Specific interface for a multiple event dependencies on a specific command queue

    Arguments

    Type IntentOptional Attributes Name
    class(fclKernel), intent(inout) :: kernel

    Focal kernel object to launch

    type(fclCommandQ), intent(inout) :: cmdQ

    CmdQ on which to launch kernel

    type(fclEvent), intent(in) :: eventList(:)

    Event dependency list for kernel

  • public module subroutine fclLaunchKernelAfterEventList_2(kernel, eventList)

    Specific interface for a multiple event dependencies on the default command queue

    Arguments

    Type IntentOptional Attributes Name
    class(fclKernel), intent(inout) :: kernel

    Focal kernel object to launch

    type(fclEvent), intent(in) :: eventList(:)

    Event dependency list for kernel

interface

  • public module function fclLocalInt32(nElem) result(localArg)

    Create a integer local kernel argument object for launching kernels

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nElem

    No of array elements

    Return Value type(fclLocalArgInt32)

    Returns local argument object

interface

  • public module function fclLocalFloat(nElem) result(localArg)

    Create a float local kernel argument object for launching kernels

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nElem

    No of array elements

    Return Value type(fclLocalArgFloat)

    Returns local argument object

interface

  • public module function fclLocalDouble(nElem) result(localArg)

    Create a double local kernel argument object for launching kernels

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nElem

    No of array elements

    Return Value type(fclLocalArgDouble)

    Returns local argument object

interface

  • public module subroutine fclLaunchKernel(kernel, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, a100, a101, a102, a103, a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114, a115, a116, a117, a118, a119, a120, a121, a122, a123, a124, a125, a126, a127, a128, a129)

    Enqueue a kernel with command arguments

    Arguments

    Type IntentOptional Attributes Name
    class(fclKernel), intent(inout), target :: kernel

    Focal kernel object

    class(*), intent(in), optional, target :: a0

    Focal command queue or first kernel argument

    class(*), intent(in), optional, target :: a1

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a2

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a3

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a4

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a5

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a6

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a7

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a8

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a9

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a10

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a11

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a12

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a13

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a14

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a15

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a16

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a17

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a18

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a19

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a20

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a21

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a22

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a23

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a24

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a25

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a26

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a27

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a28

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a29

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a30

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a31

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a32

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a33

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a34

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a35

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a36

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a37

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a38

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a39

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a40

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a41

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a42

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a43

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a44

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a45

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a46

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a47

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a48

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a49

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a50

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a51

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a52

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a53

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a54

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a55

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a56

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a57

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a58

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a59

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a60

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a61

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a62

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a63

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a64

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a65

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a66

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a67

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a68

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a69

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a70

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a71

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a72

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a73

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a74

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a75

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a76

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a77

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a78

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a79

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a80

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a81

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a82

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a83

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a84

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a85

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a86

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a87

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a88

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a89

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a90

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a91

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a92

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a93

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a94

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a95

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a96

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a97

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a98

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a99

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a100

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a101

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a102

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a103

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a104

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a105

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a106

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a107

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a108

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a109

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a110

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a111

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a112

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a113

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a114

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a115

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a116

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a117

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a118

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a119

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a120

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a121

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a122

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a123

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a124

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a125

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a126

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a127

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a128

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a129

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

interface

  • public module subroutine fclProcessKernelArgs(kernel, cmdq, narg, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, a100, a101, a102, a103, a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114, a115, a116, a117, a118, a119, a120, a121, a122, a123, a124, a125, a126, a127, a128, a129)

    Sets kernel arguments and parses argument list for optional cmdq and actual number of arguments.

    Arguments

    Type IntentOptional Attributes Name
    class(fclKernel), intent(in), target :: kernel

    Focal kernel object

    type(fclCommandQ), intent(out), pointer :: cmdq

    Returns a0 if it is cmdq, otherwise returns fclDefaultCommandQ

    integer, intent(out) :: narg

    Returns the actual number of arguments passed

    class(*), intent(in), optional, target :: a0

    Focal command queue or first kernel argument

    class(*), intent(in), optional, target :: a1

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a2

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a3

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a4

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a5

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a6

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a7

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a8

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a9

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a10

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a11

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a12

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a13

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a14

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a15

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a16

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a17

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a18

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a19

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a20

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a21

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a22

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a23

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a24

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a25

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a26

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a27

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a28

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a29

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a30

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a31

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a32

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a33

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a34

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a35

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a36

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a37

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a38

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a39

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a40

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a41

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a42

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a43

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a44

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a45

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a46

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a47

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a48

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a49

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a50

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a51

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a52

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a53

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a54

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a55

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a56

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a57

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a58

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a59

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a60

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a61

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a62

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a63

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a64

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a65

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a66

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a67

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a68

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a69

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a70

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a71

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a72

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a73

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a74

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a75

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a76

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a77

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a78

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a79

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a80

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a81

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a82

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a83

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a84

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a85

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a86

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a87

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a88

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a89

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a90

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a91

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a92

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a93

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a94

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a95

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a96

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a97

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a98

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a99

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a100

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a101

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a102

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a103

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a104

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a105

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a106

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a107

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a108

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a109

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a110

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a111

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a112

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a113

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a114

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a115

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a116

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a117

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a118

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a119

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a120

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a121

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a122

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a123

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a124

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a125

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a126

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a127

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a128

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a129

    Subsequent kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

interface

  • public module subroutine fclSetKernelArgs(kernel, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, a100, a101, a102, a103, a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114, a115, a116, a117, a118, a119, a120, a121, a122, a123, a124, a125, a126, a127, a128, a129)

    Set all kernel arguments at once without launching kernel.

    Arguments

    Type IntentOptional Attributes Name
    class(fclKernel), intent(in), target :: kernel

    Focal kernel object

    class(*), intent(in), optional, target :: a0

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a1

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a2

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a3

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a4

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a5

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a6

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a7

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a8

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a9

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a10

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a11

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a12

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a13

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a14

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a15

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a16

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a17

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a18

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a19

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a20

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a21

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a22

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a23

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a24

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a25

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a26

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a27

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a28

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a29

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a30

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a31

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a32

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a33

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a34

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a35

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a36

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a37

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a38

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a39

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a40

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a41

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a42

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a43

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a44

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a45

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a46

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a47

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a48

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a49

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a50

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a51

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a52

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a53

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a54

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a55

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a56

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a57

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a58

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a59

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a60

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a61

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a62

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a63

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a64

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a65

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a66

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a67

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a68

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a69

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a70

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a71

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a72

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a73

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a74

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a75

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a76

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a77

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a78

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a79

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a80

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a81

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a82

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a83

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a84

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a85

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a86

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a87

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a88

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a89

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a90

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a91

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a92

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a93

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a94

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a95

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a96

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a97

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a98

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a99

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a100

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a101

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a102

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a103

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a104

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a105

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a106

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a107

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a108

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a109

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a110

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a111

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a112

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a113

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a114

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a115

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a116

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a117

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a118

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a119

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a120

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a121

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a122

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a123

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a124

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a125

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a126

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a127

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a128

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

    class(*), intent(in), optional, target :: a129

    Kernel arguments. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

interface

  • public module subroutine fclSetKernelArg(kernel, argIndex, argValue)

    Set or change a single kernel argument

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel

    Focal kernel object

    integer(kind=c_int32_t), intent(in) :: argIndex

    Index of kernel argument to set

    class(*), intent(in), target :: argValue

    Value of kernel argument. Can be a scalar, an fclDeviceBuffer object, or an fclLocalArgument

interface

  • public module subroutine fclReleaseKernel(kernel)

    Release OpenCL memory associated with underlying kernel pointer

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(inout) :: kernel

    Focal kernel object

public interface fclBarrier

Generic interface to enqueue a command queue barrier Wait on device for all preceding queue events to complete before subsequent events can proceed.

  • public module subroutine fclBarrier_1(cmdq)

    Enqueue barrier on all events in command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(inout), target :: cmdq
  • public module subroutine fclBarrier_2()

    Enqueue barrier on all events in default command queue

    Arguments

    None

public interface fclWait

Generic interface to wait on host for events

  • public module subroutine fclFinish_1(cmdq)

    Wait on host for all events in user-specified command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(in) :: cmdq
  • public module subroutine fclFinish_2()

    Wait on host for all events in focal default command queue

    Arguments

    None
  • public module subroutine fclFinish_3(qPool)

    Wait on host for all events in all queues in a queue pool

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQPool), intent(in) :: qPool
  • public module subroutine fclWaitEvent(event)

    Wait on host for a specific event

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in), target :: event
  • public module subroutine fclWaitEventList(eventList)

    Wait on host for set of events

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in), target :: eventList(:)

public interface assignment(=)

  • public module subroutine fclEventCopy(target, source)

    Overloaded assignment for event assignment. Handles opencl reference counting for the underlying event object

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(inout) :: target
    type(fclEvent), intent(in) :: source

interface

  • public module subroutine fclReleaseEvent(event)

    Light weight wrapper for clReleaseEvent (decrement reference count)

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in) :: event

    Focal event object to release

interface

  • public module subroutine fclRetainEvent(event)

    Light weight wrapper for clRetainEvent (increment reference count)

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in) :: event

    Focal event object to retain

public interface fclSetDependency

Generic interface to set pre-requisite events for the next enqueued action. This does not append to any existing dependencies - it overwrites the dependency list.

  • public module subroutine fclSetDependencyEvent_1(cmdQ, event, hold)

    Interface for specifying a single event dependency on specific cmdq

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), target :: cmdQ

    Command queue

    type(fclEvent), intent(in) :: event

    Event dependency

    logical, intent(in), optional :: hold

    Hold dependency list: set to true to not automatically clear dependencies after enqueueing. Use for applying the same dependency to multiple commands. Default false.

  • public module subroutine fclSetDependencyEvent_2(event, hold)

    Interface for specifying a single event dependency on default cmdq

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in) :: event

    Event dependency

    logical, intent(in), optional :: hold

    Hold dependency list: set to true to not automatically clear dependencies after enqueueing. Use for applying the same dependency to multiple commands. Default false.

  • public module subroutine fclSetDependencyEventList_1(cmdQ, eventList, hold)

    Interface for specifying a list of dependent events on specific cmdq

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), target :: cmdQ

    Command queue

    type(fclEvent), intent(in) :: eventList(:)

    List of event dependencies

    logical, intent(in), optional :: hold

    Hold dependency list: set to true to not automatically clear dependencies after enqueueing. Use for applying the same dependency to multiple commands. Default false.

  • public module subroutine fclSetDependencyEventList_2(eventList, hold)

    Interface for specifying a list of dependent events on default cmdq

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in) :: eventList(:)

    List of event dependencies

    logical, intent(in), optional :: hold

    Event dependency Hold dependency list: set to true to not automatically clear dependencies after enqueueing. Use for applying the same dependency to multiple commands. Default false.

interface

  • public module subroutine fclPopDependencies(cmdq)

    Called after every enqueue operation: Clear dependencies unless dependency hold is .true.

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(inout) :: cmdq

public interface fclClearDependencies

Generic interface to clear dependency list and reset dependency hold to .false.

  • public module subroutine fclClearDependencies_1(cmdq)

    Interface for specific command queue

    Arguments

    Type IntentOptional Attributes Name
    type(fclCommandQ), intent(inout) :: cmdq
  • public module subroutine fclClearDependencies_2()

    Interface for default command queueu

    Arguments

    None

public interface fclCreateUserEvent

Generic interface to create a user event

  • public module function fclCreateUserEvent_1(ctx) result(userEvent)

    Create user event in a specific context

    Arguments

    Type IntentOptional Attributes Name
    type(fclContext), intent(in) :: ctx

    Return Value type(fclEvent)

  • public module function fclCreateUserEvent_2() result(userEvent)

    Create user event in the default context

    Arguments

    None

    Return Value type(fclEvent)

interface

  • public module subroutine fclSetUserEvent(event, stat)

    Set status of a user event

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(inout) :: event
    integer(kind=c_int32_t), intent(in), optional :: stat

public interface fclProfilerAdd

  • public module subroutine fclProfilerAdd_1(profiler, profileSize, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)

    Enable profiling for multiple container (kernel/buffer) and add to profiler collection

    Arguments

    Type IntentOptional Attributes Name
    class(fclProfiler), intent(inout) :: profiler

    Profiler - collection of objects to profile

    integer, intent(in) :: profileSize

    Number of events to save for profiling (allocation size)

    class(fclProfileContainer), intent(inout), target :: c0

    Object (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c1

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c2

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c3

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c4

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c5

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c6

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c7

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c8

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c9

    Subsequent objects (kernel/buffer) for which to enable profiling

  • public module subroutine fclProfilerAdd_2(profileSize, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)

    Enable profiling for multiple container (kernel/buffer) and add to the default profiler

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: profileSize

    Number of events to save for profiling (allocation size)

    class(fclProfileContainer), intent(inout), target :: c0

    Object (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c1

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c2

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c3

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c4

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c5

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c6

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c7

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c8

    Subsequent objects (kernel/buffer) for which to enable profiling

    class(fclProfileContainer), intent(inout), optional, target :: c9

    Subsequent objects (kernel/buffer) for which to enable profiling

interface

  • public module function fclGetEventDurations(eventList) result(durations)

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in) :: eventList(:)

    Return Value integer(kind=c_int64_t), (size(eventList,1))

interface

  • public module subroutine fclEnableProfiling(container, profileSize, profiler)

    Enable profiling on a specific container by allocating space to save events

    Arguments

    Type IntentOptional Attributes Name
    class(fclProfileContainer), intent(inout), target :: container

    Container on which to enable profiling. This can be one of: fclKernel,fclDeviceBuffer,fclProfileContainer.

    integer, intent(in) :: profileSize

    Number of events to allocate space for

    type(fclProfiler), intent(inout), optional :: profiler

    Profiler collection object to which to add the kernel/buffer.

interface

  • public module subroutine fclPushProfileEvent(container, event, type)

    If profiling is enabled for the container, save an event to it

    Arguments

    Type IntentOptional Attributes Name
    class(fclProfileContainer), intent(in) :: container

    Profiling container (fclKernel,fclDeviceBuffer,fclProfileContainer)

    type(fclEvent), intent(in) :: event

    Event to push to container

    integer, intent(in), optional :: type

    For buffer object events only, indicates transfer type

public interface fclDumpProfileData

  • public module subroutine fclDumpProfileData_1(profiler, outputUnit)

    Dump summary of profiler data for list of kernels to specific output unit

    Arguments

    Type IntentOptional Attributes Name
    class(fclProfiler), intent(in) :: profiler

    Profiler object containing collection of kernels & buffers to profile

    integer, intent(in), optional :: outputUnit

    Output unit to write summary data

  • public module subroutine fclDumpProfileData_2(outputUnit)

    Dump summary of default profiler data for list of kernels to specific output unit

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in), optional :: outputUnit

    Output unit to write summary data

interface

  • public module subroutine fclDumpKernelProfileData(outputUnit, kernelList, device)

    Dump summary of profile data for list of kernels to specific output unit

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: outputUnit

    Output unit to write summary data

    class(fclKernel), intent(in) :: kernelList(:)

    List of kernels for which to dump profile data

    type(fclDevice), intent(in) :: device

    Device on which the kernels were executed Needed for kernel work group info.

interface

  • public module subroutine fclDumpBufferProfileData(outputUnit, bufferList1, bufferList2, bufferList3)

    Dump summary of profile data for list of buffers to specific output unit.

    Three buffer list inputs are provided for different buffer types

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: outputUnit

    Output unit to write summary data.

    class(fclDeviceBuffer), intent(in), target :: bufferList1(:)

    List of buffers for which to dump profile data

    class(fclDeviceBuffer), intent(in), optional, target :: bufferList2(:)

    List of buffers for which to dump profile data

    class(fclDeviceBuffer), intent(in), optional, target :: bufferList3(:)

    List of buffers for which to dump profile data

public interface fclDumpTracingData

  • public module subroutine fclDumpTracingData_1(profiler, filename)

    Writes a chrome://tracing data format for profiled events

    Arguments

    Type IntentOptional Attributes Name
    class(fclProfiler), intent(in) :: profiler

    Profiler collection object containing kernels/buffers that have been profiled

    character(len=*), intent(in) :: filename

    Filename to which to write chrome://tracing format

  • public module subroutine fclDumpTracingData_2(filename)

    Writes a chrome://tracing data format for the default profiler

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: filename

    Filename to which to write chrome://tracing format

interface

  • public module function fclDbgOptions() result(options)

    Returns OpenCL compile options as interoperable string for debug mode

    Arguments

    None

    Return Value character(len=:), allocatable

interface

  • public module subroutine fclDbgCheckContext(descrip, ctx)

    Check the (default) context is initialised. Assumes uninitialised contexts have cl_context = -1.

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: descrip

    Description of program location for error output

    type(fclContext), intent(in), optional :: ctx

    Context to test. Uses fclDefaultContext if not present.

interface

  • public module subroutine fclDbgCheckDevice(device, descrip)

    Check a device object is valid Assumes uninitialised devices have cl_device_id = -1.

    Arguments

    Type IntentOptional Attributes Name
    type(fclDevice), intent(in) :: device

    Device object to check

    character(len=*), intent(in) :: descrip

    Description of program location for error output

interface

  • public module subroutine fclDbgCheckBufferInit(memObject, descrip)

    Check that a device buffer object has been initialised.

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer), intent(in) :: memObject
    character(len=*), intent(in) :: descrip

interface

  • public module subroutine fclDbgCheckBufferSize(memObject, hostBytes, descrip)

    Check that a host buffer matches the size in bytes of a device buffer.

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer), intent(in) :: memObject
    integer(kind=c_size_t), intent(in) :: hostBytes
    character(len=*), intent(in) :: descrip

interface

  • public module subroutine fclDbgCheckCopyBufferSize(memObject1, memObject2)

    Check that a host buffer matches the size in bytes of a device buffer.

    Arguments

    Type IntentOptional Attributes Name
    class(fclDeviceBuffer), intent(in) :: memObject1
    class(fclDeviceBuffer), intent(in) :: memObject2

interface

  • public module subroutine fclDbgCheckKernelNArg(kernel, nArg)

    Check that number of actual args matches number of kernel args.

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    integer, intent(in) :: nArg

interface

  • public module subroutine fclDbgCheckKernelArgType(kernel, argNo, type)

    Checks the types of arguments passed to kernels

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    integer, intent(in) :: argNo
    character(len=*), intent(in) :: type

interface

  • public module subroutine fclDbgCheckKernelArgQualifier(kernel, argNo, qualifier)

    Checks the address qualifier of arguments passed to kernels.

    Arguments

    Type IntentOptional Attributes Name
    type(fclKernel), intent(in) :: kernel
    integer, intent(in) :: argNo
    character(len=*), intent(in) :: qualifier

interface

  • public module subroutine fclDbgWait(event, descrip)

    Wait for an event to complete and check for successful completion. Throw runtime error if status is not CL_COMPLETE.

    Arguments

    Type IntentOptional Attributes Name
    type(fclEvent), intent(in), target :: event

    Event object to check

    character(len=*), intent(in), optional :: descrip

    Description for debugging

interface

  • public module subroutine fclGetKernelResource(kernelString)

    Retrieve kernel source linked as a binary resource. Use linker ld to include kernel source with: ld -r -b binary -o fclKernels.o fclKernels.cl (Object file MUST be called fclKernels.o, with no path) Then link resulting object file as normal

    Arguments

    Type IntentOptional Attributes Name
    character(len=:), intent(out), allocatable :: kernelString

    Kernel source as fortran character string

interface

  • public module subroutine fclSourceFromFile(filename, sourceString)

    Allocate and fill character string from file

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: filename
    character(len=:), intent(out), allocatable :: sourceString

interface

  • public module function strStripNum(linei)

    Return copy of string with numerical characters removed

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: linei

    Input string

    Return Value character(len=len)

    Converted string output

interface

  • public pure elemental module function upperStr(str) result(string)

    Convert string to uppercase (for case-insensitive comparison)

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: str

    Return Value character(len=len(str))

interface

  • public elemental module function str_noesc(INSTR)

    convert non-printable characters to a space. AUTHOR: John S. Urban LICENSE: Public Domain

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: INSTR

    string that might contain nonprintable characters

    Return Value character(len=len)

interface

  • public module subroutine splitStr(input_line, array, delimiters, order, nulls)

    parse string into an array using specified delimiters AUTHOR: John S. Urban LICENSE: Public Domain

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: input_line
    character(len=:), intent(out), allocatable :: array(:)
    character(len=*), intent(in), optional :: delimiters
    character(len=*), intent(in), optional :: order
    character(len=*), intent(in), optional :: nulls

Abstract Interfaces

abstract interface

  • public subroutine fclHandleErrorInterface(errcode, focalCall, oclCall)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=c_int32_t), intent(in) :: errcode
    character(len=*), intent(in) :: focalCall
    character(len=*), intent(in) :: oclCall

Derived Types

type, public ::  fclDevice

Type wrapper for openCL device objects

Components

Type Visibility Attributes Name Initial
integer(kind=c_int64_t), public :: cl_device_type

Device type

character(len=:), public, allocatable :: name

Device name

integer(kind=c_int32_t), public :: nComputeUnits

Number of device compute units

integer(kind=c_int64_t), public :: global_memory

Total global memory, bytes

integer(kind=c_int32_t), public :: clock_freq

Max clock frequency, MHz

character(len=:), public, allocatable :: version

OpenCL version

character(len=:), public, allocatable :: extensions

Supported OpenCL extensions

type(fclPlatform), public, pointer :: platform

Pointer to containing platform

character(len=:), public, allocatable :: platformName

Name of containing platform

character(len=:), public, allocatable :: platformVendor

Vendor of containing platform

type, public ::  fclPlatform

Type wrapper for openCL platform objects

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: profile

OpenCL Profile string

character(len=:), public, allocatable :: version

OpenCL Version

character(len=:), public, allocatable :: name

Platform name

character(len=:), public, allocatable :: vendor

Platform vendor

character(len=:), public, allocatable :: extensions

Platform extensions

integer, public :: numDevice

No. of devices

type(fclDevice), public, allocatable :: devices(:)

Focal device objects

type, public ::  fclContext

Type wrapper for openCL context objects

Components

Type Visibility Attributes Name Initial
integer(kind=c_intptr_t), public :: cl_context = -1

openCL context pointer

type(fclPlatform), public :: platform

Focal platform object

type, public ::  fclEvent

Type wrapper for OpenCL event pointers

Components

Type Visibility Attributes Name Initial
integer(kind=c_intptr_t), public :: cl_event = -1

OpenCL event pointer

Finalizations Procedures

final :: fclReleaseEvent

Decrement cl reference counter

type, public ::  fclCommandQ

Type wrapper for openCL command queue objects

Components

Type Visibility Attributes Name Initial
logical, public :: blockingWrite = .true.

Enable/disable blocking writes when copying from host to device

logical, public :: blockingRead = .true.

Enable/disable block reads when copying from device to host

type(fclEvent), public :: lastWriteEvent

Focal event object for the most recent write event (host-to-device) to be enqueued

type(fclEvent), public :: lastReadEvent

Focal event object for the most recent read event (device-to-host) to be enqueued

type(fclEvent), public :: lastCopyEvent

Focal event object for the most recent copy event (device-to-device) to be enqueued

type(fclEvent), public :: lastKernelEvent

Focal event object for the most recent kernel event to be enqueued

type(fclEvent), public :: lastBarrierEvent

Focal event object for the most recent barrier event to be enqueued

integer(kind=c_intptr_t), public, allocatable :: dependencyList(:)

List of pre-requisite events for next enqueued action. All events in this list are used as dependencies for the next enqueued operation. At enqueueing, the list is cleared unless holdDependencies is .true.

type(c_ptr), public :: dependencyListPtr = C_NULL_PTR

C pointer to dependency list. C_NULL_PTR when nDependency is zero.

integer, public :: nDependency = 0

Number of items in dependency list

logical, public :: holdDependencies = .false.

Set to true to not automatically clear dependencies after enqueueing. Use for applying the same dependencies to multiple commands. Use fclClearDependencies to clear and reset.

type, public ::  fclCommandQPool

Collection of fclCommandQ objects with round-robin scheduling. Allows easy handling of multiple command queues for parallel kernels data transfers.

Components

Type Visibility Attributes Name Initial
integer, public :: length

Number of command queues

type(fclCommandQ), public, allocatable :: queues(:)

Array of command queues

integer, public :: idx = 1

Index of current command queue

Type-Bound Procedures

procedure , public , pass :: next => fclCommandQPool_Next Interface

Returns next scheduled queue in queue pool

procedure , public , pass :: current => fclCommandQPool_Current Interface

Returns current scheduled queue in queue pool

type, public ::  fclProgram

Type wrapper for openCL program objects

Finalizations Procedures

final :: fclReleaseProgram

type, public ::  fclKernelPointer

Wrapper type for implementing an array of pointers to kernel objects

type, public ::  fclBufferPointer

Wrapper type for implementing an array of pointers to buffer objects

type, public ::  fclProfiler

Helper type to collect objects (kernels and buffers) that are profiled to simply user code.

Components

Type Visibility Attributes Name Initial
type(fclDevice), public :: device

Device for which to dump profile data

Type-Bound Procedures

procedure , public , pass :: add => fclProfilerAdd_1 Subroutine

type, public ::  fclProfileContainer

Base container type for event profiling

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: profileName

Descriptive name for output of profiling information

logical, public :: profilingEnabled = .false.

Switch to enable saving of events for profiling

type(fclEvent), public, pointer :: profileEvents(:) => NULL()

Array of events for profiling

integer, public :: profileSize = 0

Allocation size of profileEvents(:) array

integer, public, pointer :: nProfileEvent => NULL()

Number of events saved to profileEvents(:) array

integer, public, pointer :: profileEventType(:) => NULL()

Integer for indicating type of buffer event

Type-Bound Procedures

procedure , public , pass :: pushProfileEvent => fclPushProfileEvent Interface

type, public, extends(fclProfileContainer) ::  fclKernel

Type wrapper for openCL kernel objects

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: profileName

Descriptive name for output of profiling information

logical, public :: profilingEnabled = .false.

Switch to enable saving of events for profiling

type(fclEvent), public, pointer :: profileEvents(:) => NULL()

Array of events for profiling

integer, public :: profileSize = 0

Allocation size of profileEvents(:) array

integer, public, pointer :: nProfileEvent => NULL()

Number of events saved to profileEvents(:) array

integer, public, pointer :: profileEventType(:) => NULL()

Integer for indicating type of buffer event

character(len=:), public, allocatable :: name

Kernel name

integer(kind=c_int32_t), public :: work_dim = 1

Number of work-range dimensions

integer(kind=c_size_t), public :: global_work_offset(3) = 0

Global work dimension offsets

integer(kind=c_size_t), public :: global_work_size(3) = 0

Global work-range dimensions

integer(kind=c_size_t), public :: local_work_size(3) = 0

Local work-group dimensions

Finalizations Procedures

final :: fclReleaseKernel

Type-Bound Procedures

procedure , public , pass :: pushProfileEvent => fclPushProfileEvent Interface
procedure , public , pass :: setArgs => fclSetKernelArgs Interface

Set kernel arguments without launching

procedure , public , pass :: launch => fclLaunchKernel Interface

Launch the kernel

generic, public , :: launchAfter => launchKernelAfterEvent_1, launchKernelAfterEvent_2, launchKernelAfterEventList_1, launchKernelAfterEventList_2

Launch a kernel with event dependencies

type, public, extends(fclProfileContainer) ::  fclDeviceBuffer

Type wrapper for openCL memory objects

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: profileName

Descriptive name for output of profiling information

logical, public :: profilingEnabled = .false.

Switch to enable saving of events for profiling

type(fclEvent), public, pointer :: profileEvents(:) => NULL()

Array of events for profiling

integer, public :: profileSize = 0

Allocation size of profileEvents(:) array

integer, public, pointer :: nProfileEvent => NULL()

Number of events saved to profileEvents(:) array

integer, public, pointer :: profileEventType(:) => NULL()

Integer for indicating type of buffer event

integer(kind=c_size_t), public :: nBytes = -1

Size of buffer in bytes

Type-Bound Procedures

procedure , public , pass :: pushProfileEvent => fclPushProfileEvent Interface

type, public, extends(fclDeviceBuffer) ::  fclDeviceInt32

Type wrapper for memory objects representing int32

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: profileName

Descriptive name for output of profiling information

logical, public :: profilingEnabled = .false.

Switch to enable saving of events for profiling

type(fclEvent), public, pointer :: profileEvents(:) => NULL()

Array of events for profiling

integer, public :: profileSize = 0

Allocation size of profileEvents(:) array

integer, public, pointer :: nProfileEvent => NULL()

Number of events saved to profileEvents(:) array

integer, public, pointer :: profileEventType(:) => NULL()

Integer for indicating type of buffer event

integer(kind=c_size_t), public :: nBytes = -1

Size of buffer in bytes

Type-Bound Procedures

procedure , public , pass :: pushProfileEvent => fclPushProfileEvent Interface

type, public, extends(fclDeviceBuffer) ::  fclDeviceFloat

Type wrapper for memory objects representing float

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: profileName

Descriptive name for output of profiling information

logical, public :: profilingEnabled = .false.

Switch to enable saving of events for profiling

type(fclEvent), public, pointer :: profileEvents(:) => NULL()

Array of events for profiling

integer, public :: profileSize = 0

Allocation size of profileEvents(:) array

integer, public, pointer :: nProfileEvent => NULL()

Number of events saved to profileEvents(:) array

integer, public, pointer :: profileEventType(:) => NULL()

Integer for indicating type of buffer event

integer(kind=c_size_t), public :: nBytes = -1

Size of buffer in bytes

Type-Bound Procedures

procedure , public , pass :: pushProfileEvent => fclPushProfileEvent Interface

type, public, extends(fclDeviceBuffer) ::  fclDeviceDouble

Type wrapper for memory objects representing double

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: profileName

Descriptive name for output of profiling information

logical, public :: profilingEnabled = .false.

Switch to enable saving of events for profiling

type(fclEvent), public, pointer :: profileEvents(:) => NULL()

Array of events for profiling

integer, public :: profileSize = 0

Allocation size of profileEvents(:) array

integer, public, pointer :: nProfileEvent => NULL()

Number of events saved to profileEvents(:) array

integer, public, pointer :: profileEventType(:) => NULL()

Integer for indicating type of buffer event

integer(kind=c_size_t), public :: nBytes = -1

Size of buffer in bytes

Type-Bound Procedures

procedure , public , pass :: pushProfileEvent => fclPushProfileEvent Interface

type, public ::  fclLocalArgument

Type for specifying local kernel arguments. Instantiate with on of: fclLocalInt32, fclLocalFloat, fclLocalDouble

Components

Type Visibility Attributes Name Initial
integer(kind=c_size_t), public :: nBytes

Size of local argument in bytes

type, public, extends(fclLocalArgument) ::  fclLocalArgInt32

Type wrapper for local kernel arguments representing 32 bit integers

Components

Type Visibility Attributes Name Initial
integer(kind=c_size_t), public :: nBytes

Size of local argument in bytes

type, public, extends(fclLocalArgument) ::  fclLocalArgFloat

Type wrapper for local kernel arguments representing floats

Components

Type Visibility Attributes Name Initial
integer(kind=c_size_t), public :: nBytes

Size of local argument in bytes

type, public, extends(fclLocalArgument) ::  fclLocalArgDouble

Type wrapper for local kernel arguments representing doubles

Components

Type Visibility Attributes Name Initial
integer(kind=c_size_t), public :: nBytes

Size of local argument in bytes