代码拉取完成,页面将自动刷新
同步操作将从 Gitee 极速下载/Halide 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "DeviceArgument.h"
#include "CodeGen_GPU_Dev.h"
#include "IRPrinter.h"
namespace Halide {
namespace Internal {
std::vector<DeviceArgument> HostClosure::arguments() {
if (debug::debug_level() >= 2) {
debug(2) << *this;
}
std::vector<DeviceArgument> res;
for (const auto &v : vars) {
res.emplace_back(v.first, false, MemoryType::Auto, v.second, 0);
}
for (const auto &b : buffers) {
DeviceArgument arg(b.first, true, b.second.memory_type, b.second.type, b.second.dimensions, b.second.size);
arg.read = b.second.read;
arg.write = b.second.write;
res.push_back(arg);
}
return res;
}
void HostClosure::visit(const Call *op) {
if (op->is_intrinsic(Call::image_load) ||
op->is_intrinsic(Call::image_store)) {
// The argument to the call is either a StringImm or a broadcasted
// StringImm if this is part of a vectorized expression
const StringImm *string_imm = op->args[0].as<StringImm>();
if (!string_imm) {
internal_assert(op->args[0].as<Broadcast>());
string_imm = op->args[0].as<Broadcast>()->value.as<StringImm>();
}
internal_assert(string_imm);
std::string bufname = string_imm->value;
Buffer &ref = buffers[bufname];
ref.type = op->type;
ref.memory_type = op->is_intrinsic(Call::image_load) ||
op->is_intrinsic(Call::image_store) ?
MemoryType::GPUTexture :
MemoryType::Auto;
if (op->is_intrinsic(Call::image_load)) {
ref.read = true;
ref.dimensions = (op->args.size() - 2) / 2;
} else if (op->is_intrinsic(Call::image_store)) {
ref.write = true;
ref.dimensions = op->args.size() - 3;
}
// The Func's name and the associated .buffer are mentioned in the
// argument lists, but don't treat them as free variables.
ScopedBinding<> p1(ignore, bufname);
ScopedBinding<> p2(ignore, bufname + ".buffer");
Internal::Closure::visit(op);
} else {
Internal::Closure::visit(op);
}
}
void HostClosure::visit(const For *loop) {
if (CodeGen_GPU_Dev::is_gpu_var(loop->name)) {
// The size of the threads and blocks is not part of the closure
ScopedBinding<> p(ignore, loop->name);
loop->body.accept(this);
} else {
Internal::Closure::visit(loop);
}
}
} // namespace Internal
} // namespace Halide
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。