From f6639750460f7dd0b0d5f388334f91a2ba88fccd Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 15 Oct 2021 00:50:16 +0100 Subject: [PATCH 1/3] wip --- taichi/backends/vulkan/runtime.cpp | 4 ++++ taichi/backends/vulkan/spirv_ir_builder.cpp | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/taichi/backends/vulkan/runtime.cpp b/taichi/backends/vulkan/runtime.cpp index ae6d5d6abc50e..65d7904799d5b 100644 --- a/taichi/backends/vulkan/runtime.cpp +++ b/taichi/backends/vulkan/runtime.cpp @@ -448,6 +448,10 @@ class VkRuntime ::Impl { } void synchronize() { + if (current_cmdlist_) { + device_->get_compute_stream()->submit_synced(current_cmdlist_.get()); + current_cmdlist_ = nullptr; + } device_->get_compute_stream()->command_sync(); } diff --git a/taichi/backends/vulkan/spirv_ir_builder.cpp b/taichi/backends/vulkan/spirv_ir_builder.cpp index 37ac969d8dfee..d4d7756f9f4eb 100644 --- a/taichi/backends/vulkan/spirv_ir_builder.cpp +++ b/taichi/backends/vulkan/spirv_ir_builder.cpp @@ -705,7 +705,9 @@ Value IRBuilder::float_atomic(AtomicOpType op_type, .commit(&func_); ib_.begin(spv::OpLabel).add(true_label).commit(&func_); Value tmp2 = load_variable(addr_ptr, t_int32_); - store_variable(old_val, tmp2); + Value tmp2_int = new_value(t_int32_, ValueKind::kNormal); + ib_.begin(spv::OpBitcast).add_seq(t_int32_, tmp2_int, tmp2).commit(&func_); + store_variable(old_val, tmp2_int); Value tmp3 = load_variable(old_val, t_int32_); Value tmp4 = new_value(t_fp32_, ValueKind::kNormal); ib_.begin(spv::OpBitcast).add_seq(t_fp32_, tmp4, tmp3).commit(&func_); From f48a98d807eab5085ad55d51598ca68ef4996989 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 15 Oct 2021 00:50:55 +0100 Subject: [PATCH 2/3] snode --- taichi/backends/vulkan/snode_struct_compiler.cpp | 14 ++++++++------ taichi/backends/vulkan/snode_struct_compiler.h | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/taichi/backends/vulkan/snode_struct_compiler.cpp b/taichi/backends/vulkan/snode_struct_compiler.cpp index 88b60bc45e02f..c66dc9dbecaf5 100644 --- a/taichi/backends/vulkan/snode_struct_compiler.cpp +++ b/taichi/backends/vulkan/snode_struct_compiler.cpp @@ -9,7 +9,7 @@ namespace { class StructCompiler { public: - CompiledSNodeStructs run(const SNode &root) { + CompiledSNodeStructs run(SNode &root) { TI_ASSERT(root.type == SNodeType::root); CompiledSNodeStructs result; @@ -21,7 +21,7 @@ class StructCompiler { } private: - std::size_t compute_snode_size(const SNode *sn) { + std::size_t compute_snode_size(SNode *sn) { const bool is_place = sn->is_place(); SNodeDescriptor sn_desc; @@ -31,9 +31,9 @@ class StructCompiler { sn_desc.container_stride = sn_desc.cell_stride; } else { std::size_t cell_stride = 0; - for (const auto &ch : sn->ch) { - const auto child_offset = cell_stride; - const auto *ch_snode = ch.get(); + for (auto &ch : sn->ch) { + auto child_offset = cell_stride; + auto *ch_snode = ch.get(); cell_stride += compute_snode_size(ch_snode); snode_descriptors_.find(ch_snode->id) ->second.mem_offset_in_parent_cell = child_offset; @@ -43,6 +43,8 @@ class StructCompiler { cell_stride * sn_desc.cells_per_container_pot(); } + sn->cell_size_bytes = sn_desc.cell_stride; + sn_desc.total_num_cells_from_root = 1; for (const auto &e : sn->extractors) { // Note that the extractors are set in two places: @@ -77,7 +79,7 @@ int SNodeDescriptor::cells_per_container_pot() const { return snode->num_cells_per_container; } -CompiledSNodeStructs compile_snode_structs(const SNode &root) { +CompiledSNodeStructs compile_snode_structs(SNode &root) { StructCompiler compiler; return compiler.run(root); } diff --git a/taichi/backends/vulkan/snode_struct_compiler.h b/taichi/backends/vulkan/snode_struct_compiler.h index a9371f5a90de4..068556fd90c9b 100644 --- a/taichi/backends/vulkan/snode_struct_compiler.h +++ b/taichi/backends/vulkan/snode_struct_compiler.h @@ -48,7 +48,7 @@ struct CompiledSNodeStructs { SNodeDescriptorsMap snode_descriptors; }; -CompiledSNodeStructs compile_snode_structs(const SNode &root); +CompiledSNodeStructs compile_snode_structs(SNode &root); } // namespace vulkan } // namespace lang From ce959e9338e9d4490464a924d9acb69edc260dc3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 15 Oct 2021 01:44:01 +0100 Subject: [PATCH 3/3] i'm dumb. --- taichi/backends/vulkan/spirv_ir_builder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/taichi/backends/vulkan/spirv_ir_builder.cpp b/taichi/backends/vulkan/spirv_ir_builder.cpp index d4d7756f9f4eb..657b8b6aabf71 100644 --- a/taichi/backends/vulkan/spirv_ir_builder.cpp +++ b/taichi/backends/vulkan/spirv_ir_builder.cpp @@ -704,7 +704,7 @@ Value IRBuilder::float_atomic(AtomicOpType op_type, .add_seq(tmp1, true_label, merge_label) .commit(&func_); ib_.begin(spv::OpLabel).add(true_label).commit(&func_); - Value tmp2 = load_variable(addr_ptr, t_int32_); + Value tmp2 = load_variable(addr_ptr, t_fp32_); Value tmp2_int = new_value(t_int32_, ValueKind::kNormal); ib_.begin(spv::OpBitcast).add_seq(t_int32_, tmp2_int, tmp2).commit(&func_); store_variable(old_val, tmp2_int);