开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 3

xiongying/Halide

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
main
分支 (1093)
标签 (17)
main
xtensa-codegen
vksnk/dma-limit-channels
rootjalex/trs-codegen-cross
abadams/fix_7374
abadams/remove_hack_from_gpu_only_aottest
srj/gpu-cache
srj/generator_aot_gpu_multi_context_threaded
srj/xtensa-merge
abadams/vector_scan
abadams/fix_7365
darya-ver/ir-viz
vulkan-phase2-runtime
srj/param-map-deprecation
srj/rt-return-types
srj/main-vs2022
release/15.x
srj/param-map
abadams/ir_builder_unique_ptr
vksnk/restrict
v14.0.0
v13.0.4
v13.0.3
v13.0.2
v13.0.1
v13.0.0
v12.0.1
v12.0.0
v11.0.1
v11.0.0
v10.0.1
v10.0.0
release_2019_08_27
release_8.0.0
v8.0.0
release_2018_02_15
release_2013_11_11
main
分支 (1093)
标签 (17)
main
xtensa-codegen
vksnk/dma-limit-channels
rootjalex/trs-codegen-cross
abadams/fix_7374
abadams/remove_hack_from_gpu_only_aottest
srj/gpu-cache
srj/generator_aot_gpu_multi_context_threaded
srj/xtensa-merge
abadams/vector_scan
abadams/fix_7365
darya-ver/ir-viz
vulkan-phase2-runtime
srj/param-map-deprecation
srj/rt-return-types
srj/main-vs2022
release/15.x
srj/param-map
abadams/ir_builder_unique_ptr
vksnk/restrict
v14.0.0
v13.0.4
v13.0.3
v13.0.2
v13.0.1
v13.0.0
v12.0.1
v12.0.0
v11.0.1
v11.0.0
v10.0.1
v10.0.0
release_2019_08_27
release_8.0.0
v8.0.0
release_2018_02_15
release_2013_11_11
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
main
分支 (1093)
标签 (17)
main
xtensa-codegen
vksnk/dma-limit-channels
rootjalex/trs-codegen-cross
abadams/fix_7374
abadams/remove_hack_from_gpu_only_aottest
srj/gpu-cache
srj/generator_aot_gpu_multi_context_threaded
srj/xtensa-merge
abadams/vector_scan
abadams/fix_7365
darya-ver/ir-viz
vulkan-phase2-runtime
srj/param-map-deprecation
srj/rt-return-types
srj/main-vs2022
release/15.x
srj/param-map
abadams/ir_builder_unique_ptr
vksnk/restrict
v14.0.0
v13.0.4
v13.0.3
v13.0.2
v13.0.1
v13.0.0
v12.0.1
v12.0.0
v11.0.1
v11.0.0
v10.0.1
v10.0.0
release_2019_08_27
release_8.0.0
v8.0.0
release_2018_02_15
release_2013_11_11
Halide
/
src
/
DeviceInterface.cpp
Halide
/
src
/
DeviceInterface.cpp
DeviceInterface.cpp 6.84 KB
一键复制 编辑 原始数据 按行查看 历史
Andrew Adams 提交于 2021年10月21日 06:32 +08:00 . Add ability to pass a user context in JIT mode (#6313)
#include "DeviceInterface.h"
#include "IR.h"
#include "IROperator.h"
#include "JITModule.h"
#include "Target.h"
#include "runtime/HalideBuffer.h"
using namespace Halide;
using namespace Halide::Internal;
namespace Halide {
namespace {
template<typename fn_type>
bool lookup_runtime_routine(const std::string &name,
const Target &target,
fn_type &result) {
std::vector<JITModule> runtime(
JITSharedRuntime::get(nullptr, target.with_feature(Target::JIT)));
for (const auto &module : runtime) {
std::map<std::string, JITModule::Symbol>::const_iterator f =
module.exports().find(name);
if (f != module.exports().end()) {
result = reinterpret_bits<fn_type>(f->second.address);
return true;
}
}
return false;
}
} // namespace
bool host_supports_target_device(const Target &t) {
const DeviceAPI d = t.get_required_device_api();
if (d == DeviceAPI::None) {
// If the target requires no DeviceAPI, then
// the host trivially supports the target device.
return true;
}
const struct halide_device_interface_t *i = get_device_interface_for_device_api(d, t);
if (!i) {
debug(1) << "host_supports_device_api: get_device_interface_for_device_api() failed for d=" << (int)d << " t=" << t << "\n";
return false;
}
Halide::Runtime::Buffer<uint8_t> temp(8, 8, 3);
temp.fill(0);
temp.set_host_dirty();
Halide::JITHandlers handlers;
handlers.custom_error = [](JITUserContext *user_context, const char *msg) {
debug(1) << "host_supports_device_api: saw error (" << msg << ")\n";
};
Halide::JITHandlers old_handlers = Halide::Internal::JITSharedRuntime::set_default_handlers(handlers);
int result = temp.copy_to_device(i);
Halide::Internal::JITSharedRuntime::set_default_handlers(old_handlers);
if (result != 0) {
debug(1) << "host_supports_device_api: copy_to_device() failed for with result=" << result << " for d=" << (int)d << " t=" << t << "\n";
return false;
}
return true;
}
const halide_device_interface_t *get_device_interface_for_device_api(DeviceAPI d,
const Target &t,
const char *error_site) {
if (d == DeviceAPI::Default_GPU) {
d = get_default_device_api_for_target(t);
if (d == DeviceAPI::Host) {
if (error_site) {
user_error
<< "get_device_interface_for_device_api called from "
<< error_site
<< " requested a default GPU but no GPU feature is specified in target ("
<< t.to_string()
<< ").\n";
}
return nullptr;
}
}
const struct halide_device_interface_t *(*fn)();
std::string name;
if (d == DeviceAPI::Metal) {
name = "metal";
} else if (d == DeviceAPI::OpenCL) {
name = "opencl";
} else if (d == DeviceAPI::CUDA) {
name = "cuda";
} else if (d == DeviceAPI::OpenGLCompute) {
name = "openglcompute";
} else if (d == DeviceAPI::Hexagon) {
name = "hexagon";
} else if (d == DeviceAPI::HexagonDma) {
name = "hexagon_dma";
} else if (d == DeviceAPI::D3D12Compute) {
name = "d3d12compute";
} else {
if (error_site) {
user_error
<< "get_device_interface_for_device_api called from "
<< error_site
<< " requested unknown DeviceAPI ("
<< (int)d
<< ").\n";
}
return nullptr;
}
if (!t.supports_device_api(d)) {
if (error_site) {
user_error
<< "get_device_interface_for_device_api called from "
<< error_site
<< " DeviceAPI ("
<< name
<< ") is not supported by target ("
<< t.to_string()
<< ").\n";
}
return nullptr;
}
if (lookup_runtime_routine("halide_" + name + "_device_interface", t, fn)) {
return (*fn)();
} else {
if (error_site) {
user_error
<< "get_device_interface_for_device_api called from "
<< error_site
<< " cannot find runtime or device interface symbol for "
<< name
<< ".\n";
}
return nullptr;
}
}
DeviceAPI get_default_device_api_for_target(const Target &target) {
if (target.has_feature(Target::Metal)) {
return DeviceAPI::Metal;
} else if (target.has_feature(Target::OpenCL)) {
return DeviceAPI::OpenCL;
} else if (target.has_feature(Target::CUDA)) {
return DeviceAPI::CUDA;
} else if (target.has_feature(Target::OpenGLCompute)) {
return DeviceAPI::OpenGLCompute;
} else if (target.arch != Target::Hexagon && target.has_feature(Target::HVX)) {
return DeviceAPI::Hexagon;
} else if (target.has_feature(Target::HexagonDma)) {
return DeviceAPI::HexagonDma;
} else if (target.has_feature(Target::D3D12Compute)) {
return DeviceAPI::D3D12Compute;
} else {
return DeviceAPI::Host;
}
}
namespace Internal {
Expr make_device_interface_call(DeviceAPI device_api, MemoryType memory_type) {
if (device_api == DeviceAPI::Host) {
return make_zero(type_of<const halide_device_interface_t *>());
}
std::string interface_name;
switch (device_api) {
case DeviceAPI::CUDA:
interface_name = "halide_cuda_device_interface";
break;
case DeviceAPI::OpenCL:
if (memory_type == MemoryType::GPUTexture) {
interface_name = "halide_opencl_image_device_interface";
} else {
interface_name = "halide_opencl_device_interface";
}
break;
case DeviceAPI::Metal:
interface_name = "halide_metal_device_interface";
break;
case DeviceAPI::OpenGLCompute:
interface_name = "halide_openglcompute_device_interface";
break;
case DeviceAPI::Hexagon:
interface_name = "halide_hexagon_device_interface";
break;
case DeviceAPI::HexagonDma:
interface_name = "halide_hexagon_dma_device_interface";
break;
case DeviceAPI::D3D12Compute:
interface_name = "halide_d3d12compute_device_interface";
break;
case DeviceAPI::Default_GPU:
// Will be resolved later
interface_name = "halide_default_device_interface";
break;
default:
internal_error << "Bad DeviceAPI " << static_cast<int>(device_api) << "\n";
break;
}
return Call::make(type_of<const halide_device_interface_t *>(), interface_name, {}, Call::Extern);
}
} // namespace Internal
} // namespace Halide
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

MIT计算机科学和人工智能实验室的研究人员创造出一种专门设计简化图像处理的程序语言Halide,源代码托管在GitHub上,目前二进制程序只支持Mac OS X和Ubuntu 12
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C/C++
1
https://gitee.com/VisionDeveloper/Halide.git
git@gitee.com:VisionDeveloper/Halide.git
VisionDeveloper
Halide
Halide
main
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /