スプライン#

ヘッダーファイル#

#include<oneapi/mkl/experimental/data_fitting.hpp>

名前空間#

oneapi::mkl::experimental::data_fitiing

すべてのスプラインタイプに共通する API#

template < 
  typename FpType, 
  typename SplineType, 
  int Dimensions = 1> 
class spline { 
public: 
    using value_type = FpType; 
    using spline_type = SplineType; 

    spline( 
      const sycl::queue& q, 
      std::int64_t ny = 1, 
      bool were_coeffs_computed = false); 

    spline( 
      const sycl::device& dev, 
      const sycl::context& ctx, 
      std::int64_t ny = 1, 
      bool were_coeffs_computed = false); 

    ~spline(); 

    spline(const spline<FpType, SplineType, Dimensions>& other) = delete; 
    spline(spline<FpType, SplineType, Dimensions>&& other) = delete; 
    spline<FpType, SplineType, Dimensions>& operator=( 
        const spline<FpType, SplineType, Dimensions>& other) = delete; 
    spline<FpType, SplineType, Dimensions>& operator=( 
        spline<FpType, SplineType, Dimensions>&& other) = delete; 

    spline& set_partitions( 
      FpType* input_data, 
      std::int64_t nx, 
      partition_hint PartitionHint = partition_hint::non_uniform); 

    spline& set_function_values( 
      FpType* input_data, 
      function_hint FunctionHint = storage_hint::row_major); 

    spline& set_coefficients( 
      FpType* data, 
      coefficient_hint CoeffHint = storage_hint::row_major); 

    bool is_initialized() const; 

    std::int64_t get_required_coeffs_size() const; 

    sycl::event construct(const std::vector<sycl::event>& dependencies = {}); 
};

spline<T, ST, N> のインスタンスは、T データタイプで動作する N 次元のスプラインを作成します。ST はスプラインのタイプです。Tfloat または double のみにできます。

コンストラクター

説明

spline(const sycl::queue& q, std::int64_t ny = 1, bool were_coeffs_computed = false);

q SYCL* キューと ny 個の関数を持つオブジェクトを作成します。スプライン係数がすでに計算されている場合は、3 番目のパラメーターとして true を指定します。デフォルトでは were_coeffs_computed == false です。つまり、スプライン係数を計算するには、construct を呼び出す必要があります。

spline(const sycl::device& dev, const sycl::context& ctx, std::int64_t ny = 1, bool were_coeffs_computed = false);

dev SYCL* デバイス、ctx コンテキスト、および ny 個の関数を使用してオブジェクトを作成します。スプライン係数がすでに計算されている場合は、3 番目のパラメーターとして true を指定します。デフォルトでは were_coeffs_computed == false です。つまり、スプライン係数を計算するには、construct を呼び出す必要があります。

メンバー関数

説明

spline& set_partitions(FpType* input_data, std::int64_t nx, partition_hint PartitionHint = partition_hint::non_uniform);

input_data メモリーポインターと nx パーティション値によって指定されたパーティション値を設定します。ユーザーは PartitionHint でデータのレイアウトを指定できます。デフォルトのレイアウトは non_uniform です。uniform が指定されている場合、nx2 に等しく、input_data にはパーティションの左境界と右境界の 2 つの値のみが含まれている必要があります。そうでない場合の動作不定です。input_data レイアウトが PartitionHint の要件を満たさない場合、動作は未定義になります。パーティションが設定されているスプライン・オブジェクトへの参照を返します。

たとえば、uniform の場合、\(\left\{ i \right\}_{i=1,\cdots,n}\) をパーティションとします。したがって、input_data には 2 つの値のみを含める必要があります: 1、n

spline& set_function_values(FpType* input_data, function_hint FunctionHint = storage_hint::row_major);

input_data メモリーポインターによって指定された関数値を設定します。関数値の数は ny * nx 要素と等しくなければなりません。ユーザーは FunctionHint でデータのレイアウトを指定できます。デフォルトのレイアウトは row_major です。input_data レイアウトが FunctionHint の要件を満たさない場合、動作は未定義になります。関数値が設定されているスプライン・オブジェクトへの参照を返します。

spline& set_coefficients(FpType* data, coefficient_hint CoeffHint = storage_hint::row_major);

data メモリーポインターによって指定された係数を設定します。メモリー内の係数の数は、get_required_coeffs_size() の戻り値と等しくなければなりません。ユーザーは CoeffHint でデータのレイアウトを指定できます。デフォルトのレイアウトは row_major です。data レイアウトが CoeffHint の要件を満たさない場合、動作は未定義になります。were_coeffs_computed == false の場合、construct 呼び出し中に data が書き換えられます。係数が設定されているスプライン・オブジェクトへの参照を返します。

bool is_initialized() const;

必要なデータがすべて設定されている場合は true を返します (たとえば、パーティション、関数値、係数など)。

std::int64_t get_required_coeffs_size() const;

係数の保存に必要なメモリーの量を返します。

sycl::event construct(const std::vector<sycl::event>& dependencies = {});

スプラインを構築します (were_coeffs_computed == false の場合はスプライン係数を計算します)。この関数は SYCL* カーネルを送信し、計算が完了したことを確認するため待機する SYCL* イベントを返します。dependencies は、計算を開始する前に待機する SYCL* イベントのリストです。

内部条件と境界条件の設定が必要なスプラインがいくつかあります。このようなスプラインタイプの場合、次のメンバー関数を呼び出す必要があります。

spline& set_internal_conditions( 
  FpType* input_data); 

spline& set_boundary_conditions( 
  bc_type BCType = bc_type::free_end, 
  FpType input_value = {});

メンバー関数

説明

spline& set_internal_conditions(FpType* input_data);

input_data メモリーポインターによって指定された内部条件を設定します。内部条件値の数は nx - 2 と等しくなければなりません。内部条件が設定されているスプライン・オブジェクトへの参照を返します。

spline& set_boundary_conditions(bc_type BCType = bc_type::free_end, FpType input_value = {});

BCType に対応する input_value 境界条件を設定します。一部の境界条件は値を指定する必要がないため、input_value のデフォルト値は空になります。境界条件値が設定されているスプライン・オブジェクトへの参照を返します。

spline クラスはユーザーが提供するメモリーのラッパーにすぎないため、コピー/移動コンストラクターとコピー/移動割り当て演算子は削除されます。メモリー管理の責任はユーザーにあります。

サポートされるスプラインタイプ#

現在、DPC++ データ適合 API は次のスプラインタイプをサポートしています (詳細については、対応するリンクを参照してください)。

線形スプライン

3 次スプライン