docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg::cuda::CUDATransform Class Reference

Offloads a top-level loop to a CUDA kernel (X grid dimension). More...

#include <sdfg/transformations/offloading/cuda_transform.h>

Inheritance diagram for sdfg::cuda::CUDATransform:
[legend]

Public Member Functions

 CUDATransform (structured_control_flow::StructuredLoop &loop, int block_size=32, bool allow_dynamic_sizes=false)
std::string name () const override
 Get the name of this transformation.
bool can_be_applied (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
 Check if this transformation can be safely applied.
void to_json (nlohmann::json &j) const override
 Serialize this transformation to JSON.
Public Member Functions inherited from sdfg::transformations::OffloadTransform
 OffloadTransform (structured_control_flow::StructuredLoop &loop, bool allow_dynamic_sizes=false)
bool can_be_applied (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
 Check if this transformation can be safely applied.
void apply (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
 Apply this transformation to the SDFG.
Public Member Functions inherited from sdfg::transformations::Transformation
virtual ~Transformation ()=default
virtual void set_report (PassReportConsumer *report)
 Set the report consumer for transformation feedback.
virtual bool try_apply (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager)
 Attempt to apply the transformation if possible.

Static Public Member Functions

static CUDATransform from_json (builder::StructuredSDFGBuilder &builder, const nlohmann::json &desc)

Protected Member Functions

types::StorageType local_device_storage_type () override
types::StorageType global_device_storage_type (symbolic::Expression arg_size) override
ScheduleType transformed_schedule_type () override
std::string copy_prefix () override
void add_device_buffer (builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression arg_size) override
void allocate_device_arg (builder::StructuredSDFGBuilder &builder, Block &alloc_block, std::string host_arg_name, std::string device_arg_name, symbolic::Expression arg_size, symbolic::Expression page_size) override
void deallocate_device_arg (builder::StructuredSDFGBuilder &builder, Block &dealloc_block, std::string device_arg_name, symbolic::Expression arg_size, symbolic::Expression page_size) override
void copy_to_device (builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size, Block &copy_block) override
void copy_to_device_with_allocation (builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size, Block &copy_block) override
void copy_from_device (builder::StructuredSDFGBuilder &builder, Block &copy_out_block, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size) override
void copy_from_device_with_free (builder::StructuredSDFGBuilder &builder, Block &copy_out_block, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size) override
void setup_device (builder::StructuredSDFGBuilder &builder, Block &global_alloc_block) override
void teardown_device (builder::StructuredSDFGBuilder &builder, Block &global_alloc_block) override
Protected Member Functions inherited from sdfg::transformations::OffloadTransform
template<class Container>
void allocate_locals_on_device_stack (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, Container &locals)
void handle_device_setup_and_teardown (builder::StructuredSDFGBuilder &builder, const std::map< std::string, analysis::RegionArgument > &arguments, const std::unordered_map< std::string, symbolic::Expression > &argument_sizes, std::string prefix)
void update_loop_containers (const std::map< std::string, analysis::RegionArgument > &arguments, std::string prefix)

Additional Inherited Members

Protected Attributes inherited from sdfg::transformations::OffloadTransform
structured_control_flow::StructuredLoop & loop_
bool allow_dynamic_sizes_ = false
bool skip_unneeded_d2h_ = true
Protected Attributes inherited from sdfg::transformations::Transformation
PassReportConsumer * report_ = nullptr

Detailed Description

Offloads a top-level loop to a CUDA kernel (X grid dimension).

This transformation does not perform blocking or tiling on its own. It expects the scheduler to have already identified a suitable loop for GPU offloading. The transformation assigns the loop to the CUDA X grid dimension and handles data transfers between host and device.

The resulting grid X-dimension is validated against CUDA hardware limits (2^31 - 1 blocks). If the grid would exceed this limit, the transformation is rejected (can_be_applied returns false).

Constructor & Destructor Documentation

◆ CUDATransform()

sdfg::cuda::CUDATransform::CUDATransform ( structured_control_flow::StructuredLoop & loop,
int block_size = 32,
bool allow_dynamic_sizes = false )
inlineexplicit

Member Function Documentation

◆ add_device_buffer()

void sdfg::cuda::CUDATransform::add_device_buffer ( builder::StructuredSDFGBuilder & builder,
std::string host_arg_name,
std::string device_arg_name,
symbolic::Expression arg_size )
overrideprotectedvirtual

◆ allocate_device_arg()

void sdfg::cuda::CUDATransform::allocate_device_arg ( builder::StructuredSDFGBuilder & builder,
Block & alloc_block,
std::string host_arg_name,
std::string device_arg_name,
symbolic::Expression arg_size,
symbolic::Expression page_size )
overrideprotectedvirtual

◆ can_be_applied()

bool sdfg::cuda::CUDATransform::can_be_applied ( builder::StructuredSDFGBuilder & builder,
analysis::AnalysisManager & analysis_manager )
overridevirtual

Check if this transformation can be safely applied.

Parameters
builderThe SDFG builder
analysis_managerThe analysis manager providing necessary analyses
Returns
true if all preconditions are met

Implements sdfg::transformations::Transformation.

◆ copy_from_device()

void sdfg::cuda::CUDATransform::copy_from_device ( builder::StructuredSDFGBuilder & builder,
Block & copy_out_block,
std::string host_arg_name,
std::string device_arg_name,
symbolic::Expression size,
symbolic::Expression page_size )
overrideprotectedvirtual

◆ copy_from_device_with_free()

void sdfg::cuda::CUDATransform::copy_from_device_with_free ( builder::StructuredSDFGBuilder & builder,
Block & copy_out_block,
std::string host_arg_name,
std::string device_arg_name,
symbolic::Expression size,
symbolic::Expression page_size )
overrideprotectedvirtual

◆ copy_prefix()

std::string sdfg::cuda::CUDATransform::copy_prefix ( )
inlineoverrideprotectedvirtual

◆ copy_to_device()

void sdfg::cuda::CUDATransform::copy_to_device ( builder::StructuredSDFGBuilder & builder,
std::string host_arg_name,
std::string device_arg_name,
symbolic::Expression size,
symbolic::Expression page_size,
Block & copy_block )
overrideprotectedvirtual

◆ copy_to_device_with_allocation()

void sdfg::cuda::CUDATransform::copy_to_device_with_allocation ( builder::StructuredSDFGBuilder & builder,
std::string host_arg_name,
std::string device_arg_name,
symbolic::Expression size,
symbolic::Expression page_size,
Block & copy_block )
overrideprotectedvirtual

◆ deallocate_device_arg()

void sdfg::cuda::CUDATransform::deallocate_device_arg ( builder::StructuredSDFGBuilder & builder,
Block & dealloc_block,
std::string device_arg_name,
symbolic::Expression arg_size,
symbolic::Expression page_size )
overrideprotectedvirtual

◆ from_json()

CUDATransform sdfg::cuda::CUDATransform::from_json ( builder::StructuredSDFGBuilder & builder,
const nlohmann::json & desc )
static

◆ global_device_storage_type()

types::StorageType sdfg::cuda::CUDATransform::global_device_storage_type ( symbolic::Expression arg_size)
inlineoverrideprotectedvirtual

◆ local_device_storage_type()

types::StorageType sdfg::cuda::CUDATransform::local_device_storage_type ( )
inlineoverrideprotectedvirtual

◆ name()

std::string sdfg::cuda::CUDATransform::name ( ) const
overridevirtual

Get the name of this transformation.

Returns
The transformation name (e.g., "LoopInterchange")

Implements sdfg::transformations::Transformation.

◆ setup_device()

void sdfg::cuda::CUDATransform::setup_device ( builder::StructuredSDFGBuilder & builder,
Block & global_alloc_block )
inlineoverrideprotectedvirtual

◆ teardown_device()

void sdfg::cuda::CUDATransform::teardown_device ( builder::StructuredSDFGBuilder & builder,
Block & global_alloc_block )
inlineoverrideprotectedvirtual

◆ to_json()

void sdfg::cuda::CUDATransform::to_json ( nlohmann::json & j) const
overridevirtual

Serialize this transformation to JSON.

Parameters
jJSON object to populate with transformation description
Exceptions
std::logic_errorif not implemented

Implements sdfg::transformations::Transformation.

◆ transformed_schedule_type()

ScheduleType sdfg::cuda::CUDATransform::transformed_schedule_type ( )
inlineoverrideprotectedvirtual

The documentation for this class was generated from the following file: