Loading graph_framework/arithmetic.hpp +21 −0 Original line number Diff line number Diff line Loading @@ -603,19 +603,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -1428,19 +1432,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -2288,19 +2296,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -3262,19 +3274,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -4654,22 +4670,27 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> m = this->middle->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading graph_framework/cpu_context.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -449,16 +449,19 @@ namespace gpu { /// @param[in] outputs Output nodes of the graph to compute. /// @param[in] setters Map outputs back to input values. /// @param[in,out] registers Map of used registers. /// @param[in,out] indices Map of used indices. /// @param[in] usage List of register usage count. //------------------------------------------------------------------------------ void create_kernel_postfix(std::ostringstream &source_buffer, graph::output_nodes<T, SAFE_MATH> &outputs, graph::map_nodes<T, SAFE_MATH> &setters, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { for (auto &[out, in] : setters) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('v', in.get()); source_buffer << "[i] = "; Loading @@ -484,6 +487,7 @@ namespace gpu { for (auto &out : outputs) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('o', out.get()); source_buffer << "[i] = "; Loading graph_framework/cuda_context.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -739,6 +739,7 @@ namespace gpu { /// @param[in] outputs Output nodes of the graph to compute. /// @param[in] setters Map outputs back to input values. /// @param[in,out] registers Map of used registers. /// @param[in,out] indices Map of used indices. /// @param[in] usage List of register usage count. //------------------------------------------------------------------------------ void create_kernel_postfix(std::ostringstream &source_buffer, Loading @@ -749,6 +750,7 @@ namespace gpu { for (auto &[out, in] : setters) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('v', in.get()) << "[index] = "; Loading @@ -775,6 +777,7 @@ namespace gpu { for (auto &out : outputs) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('o', out.get()) << "[index] = "; Loading graph_framework/dispersion.hpp +3 −3 Original line number Diff line number Diff line Loading @@ -905,7 +905,7 @@ namespace dispersion { auto ne = eq->get_electron_density(x, y, z); auto te = eq->get_electron_temperature(x, y, z); auto ve = graph::sqrt(2.0*physics<T, SAFE_MATH>::q*te / auto ve = graph::sqrt(static_cast<T> (2.0)*physics<T, SAFE_MATH>::q*te / physics<T, SAFE_MATH>::me) / physics<T, SAFE_MATH>::c; Loading Loading @@ -1009,7 +1009,7 @@ namespace dispersion { auto ne = eq->get_electron_density(x, y, z); auto te = eq->get_electron_temperature(x, y, z); auto ve = graph::sqrt(2.0*physics<T, SAFE_MATH>::q*te / auto ve = graph::sqrt(static_cast<T> (2.0)*physics<T, SAFE_MATH>::q*te / physics<T, SAFE_MATH>::me) / physics<T, SAFE_MATH>::c; Loading Loading @@ -1122,7 +1122,7 @@ namespace dispersion { auto ne = eq->get_electron_density(x, y, z); auto te = eq->get_electron_temperature(x, y, z); auto ve = graph::sqrt(2.0*physics<T, SAFE_MATH>::q*te / auto ve = graph::sqrt(static_cast<T> (2.0)*physics<T, SAFE_MATH>::q*te / physics<T, SAFE_MATH>::me); // Setup characteristic frequencies. Loading graph_framework/jit.hpp +5 −3 Original line number Diff line number Diff line Loading @@ -144,15 +144,17 @@ namespace jit { kernel_1dtextures[name], kernel_2dtextures[name]); register_map indices; for (auto &[out, in] : setters) { out->compile(source_buffer, registers, usage); out->compile(source_buffer, registers, indices, usage); } for (auto &out : outputs) { out->compile(source_buffer, registers, usage); out->compile(source_buffer, registers, indices, usage); } gpu_context.create_kernel_postfix(source_buffer, outputs, setters, registers, usage); setters, registers, indices, usage); // Delete the registers so that they can be used again in other kernels. std::vector<void *> removed_elements; Loading Loading
graph_framework/arithmetic.hpp +21 −0 Original line number Diff line number Diff line Loading @@ -603,19 +603,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -1428,19 +1432,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -2288,19 +2296,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -3262,19 +3274,23 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading Loading @@ -4654,22 +4670,27 @@ namespace graph { /// /// @param[in,out] stream String buffer stream. /// @param[in,out] registers List of defined registers. /// @param[in,out] indices List of defined indices. /// @param[in] usage List of register usage count. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> compile(std::ostringstream &stream, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { if (registers.find(this) == registers.end()) { shared_leaf<T, SAFE_MATH> l = this->left->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> m = this->middle->compile(stream, registers, indices, usage); shared_leaf<T, SAFE_MATH> r = this->right->compile(stream, registers, indices, usage); registers[this] = jit::to_string('r', this); Loading
graph_framework/cpu_context.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -449,16 +449,19 @@ namespace gpu { /// @param[in] outputs Output nodes of the graph to compute. /// @param[in] setters Map outputs back to input values. /// @param[in,out] registers Map of used registers. /// @param[in,out] indices Map of used indices. /// @param[in] usage List of register usage count. //------------------------------------------------------------------------------ void create_kernel_postfix(std::ostringstream &source_buffer, graph::output_nodes<T, SAFE_MATH> &outputs, graph::map_nodes<T, SAFE_MATH> &setters, jit::register_map ®isters, jit::register_map &indices, const jit::register_usage &usage) { for (auto &[out, in] : setters) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('v', in.get()); source_buffer << "[i] = "; Loading @@ -484,6 +487,7 @@ namespace gpu { for (auto &out : outputs) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('o', out.get()); source_buffer << "[i] = "; Loading
graph_framework/cuda_context.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -739,6 +739,7 @@ namespace gpu { /// @param[in] outputs Output nodes of the graph to compute. /// @param[in] setters Map outputs back to input values. /// @param[in,out] registers Map of used registers. /// @param[in,out] indices Map of used indices. /// @param[in] usage List of register usage count. //------------------------------------------------------------------------------ void create_kernel_postfix(std::ostringstream &source_buffer, Loading @@ -749,6 +750,7 @@ namespace gpu { for (auto &[out, in] : setters) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('v', in.get()) << "[index] = "; Loading @@ -775,6 +777,7 @@ namespace gpu { for (auto &out : outputs) { graph::shared_leaf<T, SAFE_MATH> a = out->compile(source_buffer, registers, indices, usage); source_buffer << " " << jit::to_string('o', out.get()) << "[index] = "; Loading
graph_framework/dispersion.hpp +3 −3 Original line number Diff line number Diff line Loading @@ -905,7 +905,7 @@ namespace dispersion { auto ne = eq->get_electron_density(x, y, z); auto te = eq->get_electron_temperature(x, y, z); auto ve = graph::sqrt(2.0*physics<T, SAFE_MATH>::q*te / auto ve = graph::sqrt(static_cast<T> (2.0)*physics<T, SAFE_MATH>::q*te / physics<T, SAFE_MATH>::me) / physics<T, SAFE_MATH>::c; Loading Loading @@ -1009,7 +1009,7 @@ namespace dispersion { auto ne = eq->get_electron_density(x, y, z); auto te = eq->get_electron_temperature(x, y, z); auto ve = graph::sqrt(2.0*physics<T, SAFE_MATH>::q*te / auto ve = graph::sqrt(static_cast<T> (2.0)*physics<T, SAFE_MATH>::q*te / physics<T, SAFE_MATH>::me) / physics<T, SAFE_MATH>::c; Loading Loading @@ -1122,7 +1122,7 @@ namespace dispersion { auto ne = eq->get_electron_density(x, y, z); auto te = eq->get_electron_temperature(x, y, z); auto ve = graph::sqrt(2.0*physics<T, SAFE_MATH>::q*te / auto ve = graph::sqrt(static_cast<T> (2.0)*physics<T, SAFE_MATH>::q*te / physics<T, SAFE_MATH>::me); // Setup characteristic frequencies. Loading
graph_framework/jit.hpp +5 −3 Original line number Diff line number Diff line Loading @@ -144,15 +144,17 @@ namespace jit { kernel_1dtextures[name], kernel_2dtextures[name]); register_map indices; for (auto &[out, in] : setters) { out->compile(source_buffer, registers, usage); out->compile(source_buffer, registers, indices, usage); } for (auto &out : outputs) { out->compile(source_buffer, registers, usage); out->compile(source_buffer, registers, indices, usage); } gpu_context.create_kernel_postfix(source_buffer, outputs, setters, registers, usage); setters, registers, indices, usage); // Delete the registers so that they can be used again in other kernels. std::vector<void *> removed_elements; Loading