From b2519be01b828eb0c8b568022ed5b90cf679898c Mon Sep 17 00:00:00 2001 From: emprice Date: Mon, 17 Jun 2024 02:36:26 +0000 Subject: [PATCH] Build: (8ab4827) Updating pyproject.toml and README --- genindex.html | 74 +--------------------- highlevel.html | 162 ++----------------------------------------------- objects.inv | Bin 7443 -> 7286 bytes searchindex.js | 2 +- 4 files changed, 6 insertions(+), 232 deletions(-) diff --git a/genindex.html b/genindex.html index 5842df3..3b890bf 100644 --- a/genindex.html +++ b/genindex.html @@ -563,7 +563,7 @@

Index

-
_ | B | C | D | F | H | I | L | N | P
+
_ | C | I | N | P

_

@@ -595,67 +595,11 @@

_

-
-

B

- - -
-
-

C

- -
-
- -
-

D

- - - -
-
- -
-

F

- - -
-
- -
-

H

- -
@@ -671,20 +615,6 @@

I

-
-

L

- - - -
-
-

N

@@ -699,8 +629,6 @@

N

P

    -
  • Platform (class in pocky) -
  • pocky_api (C var)
  • pocky_api_object (C struct) diff --git a/highlevel.html b/highlevel.html index 59af26b..40034c6 100644 --- a/highlevel.html +++ b/highlevel.html @@ -574,144 +574,15 @@

    High-level Python APIOpenCL interface

    Platforms

    -
    -
    -class pocky.Platform(id: Capsule, name: str, version: str)
    -

    Encapsulated OpenCL platform ID with basic information.

    -
    -
    Parameters:
    -
      -
    • id – Unique platform ID

    • -
    • name – Platform name, as reported by the hardware

    • -
    • version – Platform version, as reported by the hardware

    • -
    -
    -
    -
    -

    Danger

    -

    Do not instantiate this class directly! Rather, use valid output from pocky.list_all_platforms().

    -
    -
    - -
    -
    -pocky.list_all_platforms() list[Platform]
    -

    Get a list of all available OpenCL platforms.

    -
    -
    Returns:
    -

    A list of available platforms

    -
    -
    -
    -

    Devices

    -
    -
    -class pocky.Device(iterable=(), /)
    -

    This is a stub

    -
    - -
    -
    -pocky.list_all_devices(platform: Platform) list[Device]
    -

    Get a list of all available OpenCL devices for a platform.

    -
    -
    Parameters:
    -

    platform – The platform to query for available devices

    -
    -
    Returns:
    -

    A list of devices available on the platform

    -
    -
    -
    -

    Contexts

    -
    -
    -class pocky.Context
    -

    Opaque object encapsulating the OpenCL context, command queues, kernels, and program.

    -
    -

    Danger

    -

    Do not instantiate this class directly! Rather, use valid output from pocky.Context.default() or pocky.Context.from_device_list().

    -
    -
    -
    -default() Context
    -

    Create a context with the default OpenCL platform and devices.

    -
    -
    Returns:
    -

    An initialized Context

    -
    -
    -
    - -
    -
    -devices
    -

    This is a stub

    -
    - -
    -
    -from_device_list(devices: list[Device]) Context
    -

    Create a context from a subset of OpenCL devices on the same platform.

    -
    -
    Parameters:
    -

    devices – The devices to include in the returned context

    -
    -
    Returns:
    -

    An initialized Context

    -
    -
    -
    - -
    -

    Buffers

    -
    -
    -class pocky.BufferPair(context: Context, host_array: numpy.ndarray)
    -

    Pair of buffers, one host and one device, used for input and output to compiled kernels. Copy operations are carried out before and after each kernel execution.

    -
    -
    Parameters:
    -
      -
    • context – Valid existing OpenCL context

    • -
    • host_array – NumPy array to serve as host memory buffer

    • -
    -
    -
    -
    -
    -copy_from_device()
    -

    Copy the specified device data to the host

    -
    - -
    -
    -copy_to_device()
    -

    Copy the host data to the specified device

    -
    - -
    -
    -dirty
    -

    Indicates that the host array needs to be copied to the device (True) or that it is unchanged since the last copy (False). This can be used by external modules to avoid redundant copies, but it is not updated dynamically by pocky.

    -
    - -
    -
    -host
    -

    Exposes the underlying NumPy host array. The size of the array cannot be increased after the BufferPair is created, but the array can be replaced by one of the same dtype and equal or smaller size.

    -
    - -
    -
    @@ -773,35 +644,10 @@

    Buffers
    • High-level Python API diff --git a/objects.inv b/objects.inv index df1ea0fb89112a1fd7cfd8c2a5c5881f020b75ee..f1beebb93ef67db3d8638b2688a59681fe80e3ef 100644 GIT binary patch delta 7221 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 ryp%W)O{rq|a+ZByQ7FaJt*M0(eNQ%qL=|+@f