PXL
context.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: Apache-2.0
2 // Copyright 2024 XCENA Inc.
3 
4 #pragma once
5 #include <cstdint>
6 #include <functional>
7 #include <optional>
8 
9 #include "pxl/type.hpp"
10 
11 namespace pxl
12 {
13 class Job;
14 
26 class Context
27 {
28 public:
37  using AsyncCallback = std::function<void(Job* job, void* arg)>;
38 
42  Context(const Context&) = delete;
43 
47  Context& operator=(const Context&) = delete;
48 
67  virtual Job* createJob() = 0;
68 
86  virtual Job* createJob(const uint32_t numSub) = 0;
87 
130  virtual Result createJobForceAsync(const uint32_t numSub, const AsyncCallback& callback, void* arg, uint32_t timeout = 0) = 0;
131 
165  virtual Result destroyJob(Job* job) = 0;
166 
182  virtual void* memAlloc(const size_t size) = 0;
183 
203  virtual void* memCalloc(const size_t num, const size_t size) = 0;
204 
220  virtual void memFree(const void* ptr) = 0;
221 
232  virtual uint32_t deviceId() const = 0;
233 
239  virtual uint32_t availableSubCount() const = 0;
240 
246  virtual uint64_t availableMemSize() const = 0;
247 
265  virtual Result getAttribute(DeviceAttr attr, uint64_t& value) const = 0;
266 
288  virtual void* memRealloc(void* ptr, const size_t size) = 0;
289 
290 protected:
291  Context() = default;
292  virtual ~Context() = default;
293 };
294 
305 uint32_t getNumDevice();
306 
314 uint32_t availableSubCount(uint32_t deviceId);
315 
326 std::optional<uint32_t> getDefaultDeviceId();
327 
335 
347 
359 Context* createContext(uint32_t deviceId);
360 
390 void destroyContext(Context* context);
391 
392 } // namespace pxl
An execution abstraction of a Device object.
Definition: context.hpp:27
virtual Result createJobForceAsync(const uint32_t numSub, const AsyncCallback &callback, void *arg, uint32_t timeout=0)=0
Creates a new job with the specified number of sub asynchronously.
Context(const Context &)=delete
Deleted copy constructor.
virtual void * memCalloc(const size_t num, const size_t size)=0
Allocates zero-initialized memory on the device.
virtual Result destroyJob(Job *job)=0
Destroys the specified job.
virtual void * memAlloc(const size_t size)=0
Allocates memory on the device.
virtual uint32_t availableSubCount() const =0
Returns the available number of Sub.
virtual void memFree(const void *ptr)=0
Frees previously allocated memory on the device.
Context()=default
virtual uint32_t deviceId() const =0
Returns the ID of the device.
virtual Job * createJob(const uint32_t numSub)=0
Creates a new job with the specified number of sub.
virtual uint64_t availableMemSize() const =0
Returns the available memory size of the device.
virtual void * memRealloc(void *ptr, const size_t size)=0
Resizes previously allocated device memory.
virtual Result getAttribute(DeviceAttr attr, uint64_t &value) const =0
Returns information about the device attribute.
virtual Job * createJob()=0
Creates a new job with the default number of sub.
std::function< void(Job *job, void *arg)> AsyncCallback
Callback function type for job creation.
Definition: context.hpp:37
Context & operator=(const Context &)=delete
Deleted copy assignment operator.
virtual ~Context()=default
Manages device compute resources and offloads user applications.
Definition: job.hpp:32
Definition: config.hpp:11
Result
Definition: type.hpp:55
void destroyContext(Context *context)
Destroys the specified context.
void clearDefaultDeviceId()
Clears the cached default device ID.
uint32_t getNumDevice()
Retrieves the number of available devices.
std::optional< uint32_t > getDefaultDeviceId()
Returns the current process-wide default device ID.
uint32_t availableSubCount(uint32_t deviceId)
Returns the number of currently available compute resources (Subs) on a device, without creating a Co...
Context * createContext()
Creates a context. Defaults to the first available device.
DeviceAttr
Definition: type.hpp:80