blob: 7eb3c27472b0f1a382154419cf6d1ab809414223 [file] [log] [blame]
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef IREE_HAL_VMLA_VMLA_EXECUTABLE_H_
#define IREE_HAL_VMLA_VMLA_EXECUTABLE_H_
#include <vector>
#include "absl/container/inlined_vector.h"
#include "absl/types/span.h"
#include "iree/base/status.h"
#include "iree/hal/executable_spec.h"
#include "iree/hal/host/host_executable.h"
#include "iree/vm/api.h"
namespace iree {
namespace hal {
namespace vmla {
class Interface;
class VMLAExecutable final : public HostExecutable {
public:
static StatusOr<ref_ptr<VMLAExecutable>> Load(iree_vm_instance_t* instance,
iree_vm_module_t* vmla_module,
ExecutableSpec spec,
bool allow_aliasing_data);
VMLAExecutable(ExecutableSpec spec, bool allow_aliasing_data);
~VMLAExecutable() override;
bool supports_debugging() const override { return false; }
// Reference to the bytecode blob contents.
absl::Span<const uint8_t> executable_data() const {
return spec_.executable_data;
}
// VM context containing the loaded executable module.
iree_vm_context_t* context() const { return context_; }
// Entry point functions in export order.
absl::Span<const iree_vm_function_t> entry_functions() const {
return absl::MakeConstSpan(entry_functions_);
}
StatusOr<ref_ptr<DispatchState>> PrepareDispatch(
const DispatchParams& params) override;
Status DispatchTile(DispatchState* state,
std::array<uint32_t, 3> workgroup_xyz) override;
private:
Status Initialize(iree_vm_instance_t* instance,
iree_vm_module_t* vmla_module);
ExecutableSpec spec_;
std::vector<uint8_t> cloned_executable_data_;
iree_vm_context_t* context_ = nullptr;
absl::InlinedVector<iree_vm_function_t, 4> entry_functions_;
};
} // namespace vmla
} // namespace hal
} // namespace iree
#endif // IREE_HAL_VMLA_VMLA_EXECUTABLE_H_