Loading graph_benchmark/xrays_bench.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ void bench_runner() { ky->set(static_cast<T> (0.0)); kz->set(static_cast<T> (0.0)); auto eq = equilibrium::make_efit<T> (NC_FILE); auto eq = equilibrium::make_efit<T> (EFIT_FILE); const T endtime = static_cast<T> (1.0); const T dt = endtime/static_cast<T> (NUM_TIMES); Loading graph_driver/xrays.cpp +259 −49 Original line number Diff line number Diff line Loading @@ -17,6 +17,96 @@ const bool write_step = true; const bool print_expressions = false; const bool verbose = true; //------------------------------------------------------------------------------ /// @brief Initalize random rays for efit. /// /// @tparam T Base type of the calculation. /// @tparam B Base type of T. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in,out] omega Frequency variable. /// @params[in,out] x X variable. /// @params[in,out] y Y variable. /// @params[in,out] z Z variable. /// @params[in,out] ky Ky variable. /// @params[in,out] kz Kz variable. /// @params[in,out] engine Random engine. /// @params[in] num_rays Numbers of rays. //------------------------------------------------------------------------------ template<typename T, typename B, bool SAFE_MATH> void init_efit(graph::shared_leaf<T, SAFE_MATH> omega, graph::shared_leaf<T, SAFE_MATH> x, graph::shared_leaf<T, SAFE_MATH> y, graph::shared_leaf<T, SAFE_MATH> z, graph::shared_leaf<T, SAFE_MATH> ky, graph::shared_leaf<T, SAFE_MATH> kz, std::mt19937_64 engine, const size_t num_rays) { std::normal_distribution<B> norm_dist1(static_cast<B> (700.0), static_cast<B> (10.0)); std::normal_distribution<B> norm_dist2(static_cast<B> (0.0), static_cast<B> (0.05)); std::normal_distribution<B> norm_dist3(static_cast<B> (-100.0), static_cast<B> (10.0)); std::normal_distribution<B> norm_dist4(static_cast<B> (0.0), static_cast<B> (10.0)); for (size_t j = 0; j < num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5))); y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5))); z->set(j, static_cast<T> (norm_dist2(engine))); ky->set(j, static_cast<T> (norm_dist3(engine))); kz->set(j, static_cast<T> (norm_dist4(engine))); } } //------------------------------------------------------------------------------ /// @brief Initalize random rays for vmec. /// /// @tparam T Base type of the calculation. /// @tparam B Base type of T. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in,out] omega Frequency variable. /// @params[in,out] x X variable. /// @params[in,out] y Y variable. /// @params[in,out] z Z variable. /// @params[in,out] ky Ky variable. /// @params[in,out] kz Kz variable. /// @params[in,out] engine Random engine. /// @params[in] num_rays Numbers of rays. //------------------------------------------------------------------------------ template<typename T, typename B, bool SAFE_MATH> void init_vmec(graph::shared_leaf<T, SAFE_MATH> omega, graph::shared_leaf<T, SAFE_MATH> x, graph::shared_leaf<T, SAFE_MATH> y, graph::shared_leaf<T, SAFE_MATH> z, graph::shared_leaf<T, SAFE_MATH> ky, graph::shared_leaf<T, SAFE_MATH> kz, std::mt19937_64 engine, const size_t num_rays) { std::normal_distribution<B> norm_dist1(static_cast<B> (430.0), static_cast<B> (1.0)); std::normal_distribution<B> norm_dist2(static_cast<B> (M_PI), static_cast<B> (0.05)); std::normal_distribution<B> norm_dist3(static_cast<B> (0.0), static_cast<B> (0.05)); std::normal_distribution<B> norm_dist4(static_cast<B> (0.0), static_cast<B> (1.0)); std::normal_distribution<B> norm_dist5(static_cast<B> (-150.0), static_cast<B> (1.0)); x->set(static_cast<T> (1.0)); for (size_t j = 0; j < num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); y->set(j, static_cast<T> (norm_dist2(engine))); z->set(j, static_cast<T> (norm_dist3(engine))); ky->set(j, static_cast<T> (norm_dist4(engine))); kz->set(j, static_cast<T> (norm_dist5(engine))); } } //------------------------------------------------------------------------------ /// @brief Trace the rays. /// Loading Loading @@ -48,7 +138,9 @@ void trace_ray(const size_t num_times, const size_t local_num_rays = batch + (extra > thread_number ? 1 : 0); std::mt19937_64 engine((thread_number + 1)*static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()))); const uint64_t seed = static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())); //const uint64_t seed = 0; std::mt19937_64 engine((thread_number + 1)*seed); std::uniform_int_distribution<size_t> int_dist(0, local_num_rays - 1); auto omega = graph::variable<T, SAFE_MATH> (local_num_rays, "\\omega"); Loading @@ -64,50 +156,42 @@ void trace_ray(const size_t num_times, // Inital conditions. if constexpr (jit::is_float<T> ()) { std::normal_distribution<float> norm_dist1(static_cast<float> (700.0), static_cast<float> (10.0)); std::normal_distribution<float> norm_dist2(static_cast<float> (0.0), static_cast<float> (0.05)); std::normal_distribution<float> norm_dist3(static_cast<float> (-100.0), static_cast<float> (10.0)); std::normal_distribution<float> norm_dist4(static_cast<float> (0.0), static_cast<float> (10.0)); for (size_t j = 0; j < local_num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5))); y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5))); z->set(j, static_cast<T> (norm_dist2(engine))); ky->set(j, static_cast<T> (norm_dist3(engine))); kz->set(j, static_cast<T> (norm_dist4(engine))); } #if 0 init_efit<T, float, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #else init_vmec<T, float, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #endif } else { std::normal_distribution<double> norm_dist1(static_cast<double> (700.0), static_cast<double> (10.0)); std::normal_distribution<double> norm_dist2(static_cast<double> (0.0), static_cast<double> (0.05)); std::normal_distribution<double> norm_dist3(static_cast<double> (-100.0), static_cast<double> (10.0)); std::normal_distribution<double> norm_dist4(static_cast<double> (0.0), static_cast<double> (10.0)); for (size_t j = 0; j < local_num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5))); y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5))); z->set(j, static_cast<T> (norm_dist2(engine))); ky->set(j, static_cast<T> (norm_dist3(engine))); kz->set(j, static_cast<T> (norm_dist4(engine))); } #if 0 init_efit<T, double, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #else init_vmec<T, double, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #endif } #if 0 kx->set(static_cast<T> (-700.0)); auto eq = equilibrium::make_efit<T, SAFE_MATH> (NC_FILE); #else kx->set(static_cast<T> (-30.0)); #endif auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE); //auto eq = equilibrium::make_efit<T, SAFE_MATH> (EFIT_FILE); //auto eq = equilibrium::make_slab_density<T, SAFE_MATH> (); //auto eq = equilibrium::make_slab_field<T, SAFE_MATH> (); //auto eq = equilibrium::make_no_magnetic_field<T, SAFE_MATH> (); #if 0 const T endtime = static_cast<T> (2.0); #else const T endtime = static_cast<T> (0.2); #endif const T dt = endtime/static_cast<T> (num_times); //auto dt_var = graph::variable(num_rays, static_cast<T> (dt), "dt"); Loading @@ -124,7 +208,7 @@ void trace_ray(const size_t num_times, //solver::rk4<dispersion::cold_plasma<T, SAFE_MATH>> //solver::adaptive_rk4<dispersion::ordinary_wave<T, SAFE_MATH>> //solver::rk4<dispersion::hot_plasma<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>> //solver::rk4<dispersion::hot_plasma_expandion<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>> //solver::rk4<dispersion::hot_plasma_expansion<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>> solve(omega, kx, ky, kz, x, y, z, t, dt, eq, stream.str(), local_num_rays, thread_number); solve.init(kx); Loading Loading @@ -201,6 +285,10 @@ void trace_ray(const size_t num_times, /// /// @tparam T Base type of the calculation. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in] num_times Total number of time steps. /// @params[in] sub_steps Number of substeps to push the rays. /// @params[in] num_rays Number of rays to trace. //------------------------------------------------------------------------------ template<jit::float_scalar T, bool SAFE_MATH=false> void calculate_power(const size_t num_times, Loading Loading @@ -235,17 +323,8 @@ void calculate_power(const size_t num_times, auto t = graph::variable<T, SAFE_MATH> (local_num_rays, "t"); auto kamp = graph::variable<T, SAFE_MATH> (local_num_rays, "kamp"); omega->set(static_cast<T> (0.0)); graph::shared_variable<T, SAFE_MATH> omega_var = graph::variable_cast(omega); graph::shared_variable<T, SAFE_MATH> kx_var = graph::variable_cast(kx); graph::shared_variable<T, SAFE_MATH> ky_var = graph::variable_cast(ky); graph::shared_variable<T, SAFE_MATH> kz_var = graph::variable_cast(kz); graph::shared_variable<T, SAFE_MATH> x_var = graph::variable_cast(x); graph::shared_variable<T, SAFE_MATH> y_var = graph::variable_cast(y); graph::shared_variable<T, SAFE_MATH> z_var = graph::variable_cast(z); graph::shared_variable<T, SAFE_MATH> t_var = graph::variable_cast(t); auto eq = equilibrium::make_efit<T, SAFE_MATH> (NC_FILE); auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE); //auto eq = equilibrium::make_efit<T, SAFE_MATH> (EFIT_FILE); //auto eq = equilibrium::make_slab_density<T, SAFE_MATH> (); //auto eq = equilibrium::make_slab_field<T, SAFE_MATH> (); //auto eq = equilibrium::make_no_magnetic_field<T, SAFE_MATH> (); Loading @@ -268,6 +347,136 @@ void calculate_power(const size_t num_times, total.print(); } //------------------------------------------------------------------------------ /// @brief Bin power. /// /// @tparam T Base type of the calculation. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in] num_times Total number of time steps. /// @params[in] sub_steps Number of substeps to push the rays. /// @params[in] num_rays Number of rays to trace. //------------------------------------------------------------------------------ template<jit::float_scalar T, bool SAFE_MATH=false> void bin_power(const size_t num_times, const size_t sub_steps, const size_t num_rays) { const timeing::measure_diagnostic total("Power Time"); std::vector<std::thread> threads(std::max(std::min(static_cast<unsigned int> (jit::context<T, SAFE_MATH>::max_concurrency()), static_cast<unsigned int> (num_rays)), static_cast<unsigned int> (1))); const size_t batch = num_rays/threads.size(); const size_t extra = num_rays%threads.size(); for (size_t i = 0, ie = threads.size(); i < ie; i++) { threads[i] = std::thread([num_times, sub_steps, num_rays, batch, extra] (const size_t thread_number, const size_t num_threads) -> void { std::ostringstream stream; stream << "result" << thread_number << ".nc"; const size_t num_steps = num_times/sub_steps; const size_t local_num_rays = batch + (extra > thread_number ? 1 : 0); auto x = graph::variable<T, SAFE_MATH> (local_num_rays, "x"); auto y = graph::variable<T, SAFE_MATH> (local_num_rays, "y"); auto z = graph::variable<T, SAFE_MATH> (local_num_rays, "z"); auto x_last = graph::variable<T, SAFE_MATH> (local_num_rays, "x_last"); auto y_last = graph::variable<T, SAFE_MATH> (local_num_rays, "y_last"); auto z_last = graph::variable<T, SAFE_MATH> (local_num_rays, "z_last"); auto kamp = graph::variable<T, SAFE_MATH> (local_num_rays, "kamp"); auto power = graph::variable<T, SAFE_MATH> (local_num_rays, static_cast<T> (1.0), "power"); auto k_sum = graph::variable<T, SAFE_MATH> (local_num_rays, static_cast<T> (0.0), "k_sum"); auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE); auto x_real = eq->get_x(x, y, z); auto y_real = eq->get_y(x, y, z); auto z_real = eq->get_z(x, y, z); auto x_real_last = eq->get_x(x_last, y_last, z_last); auto y_real_last = eq->get_y(x_last, y_last, z_last); auto z_real_last = eq->get_z(x_last, y_last, z_last); auto dlvec = graph::vector(x_real - x_real_last, y_real - y_real_last, z_real - z_real_last); auto dl = dlvec->length(); auto kdl = kamp*dl; auto k_next = kdl + k_sum; auto p_next = graph::exp(graph::none<T, SAFE_MATH> ()*graph::two<T, SAFE_MATH> ()*k_sum); auto d_power = p_next - power; d_power = graph::sqrt(d_power*d_power); workflow::manager<T, SAFE_MATH> work(thread_number); work.add_item({ graph::variable_cast(x), graph::variable_cast(y), graph::variable_cast(z), graph::variable_cast(x_last), graph::variable_cast(y_last), graph::variable_cast(z_last), graph::variable_cast(kamp), graph::variable_cast(power), graph::variable_cast(k_sum), }, {d_power}, { {x, graph::variable_cast(x_last)}, {y, graph::variable_cast(y_last)}, {z, graph::variable_cast(z_last)}, {p_next, graph::variable_cast(power)}, {k_next, graph::variable_cast(k_sum)} }, "power"); work.compile(); output::result_file file(stream.str()); output::data_set<T> dataset(file); dataset.create_variable(file, "power", power, work.get_context()); dataset.create_variable(file, "d_power", d_power, work.get_context()); dataset.reference_variable(file, "x", graph::variable_cast(x)); dataset.reference_variable(file, "y", graph::variable_cast(y)); dataset.reference_variable(file, "z", graph::variable_cast(z)); dataset.reference_imag_variable(file, "kamp", graph::variable_cast(kamp)); file.end_define_mode(); dataset.read(file, 0); x_last->set(x->evaluate()); y_last->set(y->evaluate()); z_last->set(z->evaluate()); dataset.write(file, 0); std::thread sync([]{}); work.copy_to_device(x_last, graph::variable_cast(x_last)->data()); work.copy_to_device(y_last, graph::variable_cast(y_last)->data()); work.copy_to_device(z_last, graph::variable_cast(z_last)->data()); for (size_t j = 1, je = num_steps + 1; j < je; j++) { dataset.read(file, j); work.copy_to_device(x, graph::variable_cast(x)->data()); work.copy_to_device(y, graph::variable_cast(y)->data()); work.copy_to_device(z, graph::variable_cast(z)->data()); work.copy_to_device(kamp, graph::variable_cast(kamp)->data()); work.run(); sync.join(); work.wait(); sync = std::thread([&file, &dataset] (const size_t k) -> void { dataset.write(file, k); }, j); } sync.join(); }, i, threads.size()); } for (std::thread &t : threads) { t.join(); } total.print(); } //------------------------------------------------------------------------------ /// @brief Main program of the driver. /// Loading @@ -292,6 +501,7 @@ int main(int argc, const char * argv[]) { calculate_power<std::complex<base>, use_safe_math> (num_times, sub_steps, num_rays); bin_power<base> (num_times, sub_steps, num_rays); std::cout << std::endl << "Timing:" << std::endl; total.print(); Loading graph_framework.xcodeproj/project.pbxproj +21 −13 Original line number Diff line number Diff line Loading @@ -296,6 +296,7 @@ C73BBE7D29F816E60027BB7F /* piecewise_test.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; path = piecewise_test.cpp; sourceTree = "<group>"; }; C73BBE9629F8669F0027BB7F /* newton.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = newton.hpp; sourceTree = "<group>"; }; C74DF4572AA8BC7300319113 /* graph_benchmark */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = graph_benchmark; sourceTree = BUILT_PRODUCTS_DIR; }; C7678FBD2B45C2850025F37E /* bin.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = bin.py; sourceTree = "<group>"; }; C77E6DF522DD64E700469621 /* trigonometry.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = trigonometry.hpp; sourceTree = "<group>"; }; C79141A622DA9BF200E0BA0D /* libgraph_framework.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgraph_framework.a; sourceTree = BUILT_PRODUCTS_DIR; }; C79141AE22DA9C3000E0BA0D /* node.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = node.hpp; sourceTree = "<group>"; }; Loading Loading @@ -459,6 +460,7 @@ isa = PBXGroup; children = ( C7167B222AC5CE8500E03131 /* fix_NaN.py */, C7678FBD2B45C2850025F37E /* bin.py */, ); path = utilities; sourceTree = "<group>"; Loading Loading @@ -882,7 +884,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1500; LastUpgradeCheck = 1510; ORGANIZATIONNAME = "Cianciosa, Mark R."; TargetAttributes = { C73690302A38C498001733B0 = { Loading Loading @@ -1258,7 +1260,8 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "DEBUG=1", "$(inherited)", ); Loading @@ -1274,7 +1277,8 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", USE_METAL, "CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"", "$(inherited)", Loading Loading @@ -1329,6 +1333,8 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", USE_METAL, "CXX_FLAGS=\\\"-g\\ -fsanitize=undefined\\ -fsanitize=float-divide-by-zero\\ -fsanitize-trap=all\\\"", "CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"", Loading @@ -1354,6 +1360,9 @@ OTHER_LDFLAGS = ( "-fsanitize=float-divide-by-zero", "-lnetcdf", "-ld_classic", "-rpath", /usr/local/lib, ); SDKROOT = macosx; }; Loading Loading @@ -1402,6 +1411,8 @@ GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", USE_METAL, "CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"", "$(inherited)", Loading @@ -1425,6 +1436,9 @@ OTHER_LDFLAGS = ( "-fsanitize=float-divide-by-zero", "-lnetcdf", "-ld_classic", "-rpath", /usr/local/lib, ); SDKROOT = macosx; }; Loading Loading @@ -1481,10 +1495,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 13.5; OTHER_CPLUSPLUSFLAGS = "-fsanitize=float-divide-by-zero"; PRODUCT_NAME = "$(TARGET_NAME)"; Loading @@ -1500,10 +1511,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 13.5; OTHER_CPLUSPLUSFLAGS = ""; OTHER_LDFLAGS = "-lnetcdf"; Loading Loading @@ -1690,7 +1698,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", USE_METAL, "CXX=\\\"c++\\\"", "DEBUG=1", Loading @@ -1709,7 +1717,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", USE_METAL, "CXX=\\\"c++\\\"", "$(inherited)", Loading graph_framework.xcodeproj/xcshareddata/xcschemes/arithmetic_test.xcscheme +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <Scheme LastUpgradeVersion = "1500" LastUpgradeVersion = "1510" version = "1.7"> <BuildAction parallelizeBuildables = "YES" Loading graph_framework.xcodeproj/xcshareddata/xcschemes/graph_driver.xcscheme +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <Scheme LastUpgradeVersion = "1500" LastUpgradeVersion = "1510" version = "1.3"> <BuildAction parallelizeBuildables = "YES" Loading Loading
graph_benchmark/xrays_bench.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ void bench_runner() { ky->set(static_cast<T> (0.0)); kz->set(static_cast<T> (0.0)); auto eq = equilibrium::make_efit<T> (NC_FILE); auto eq = equilibrium::make_efit<T> (EFIT_FILE); const T endtime = static_cast<T> (1.0); const T dt = endtime/static_cast<T> (NUM_TIMES); Loading
graph_driver/xrays.cpp +259 −49 Original line number Diff line number Diff line Loading @@ -17,6 +17,96 @@ const bool write_step = true; const bool print_expressions = false; const bool verbose = true; //------------------------------------------------------------------------------ /// @brief Initalize random rays for efit. /// /// @tparam T Base type of the calculation. /// @tparam B Base type of T. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in,out] omega Frequency variable. /// @params[in,out] x X variable. /// @params[in,out] y Y variable. /// @params[in,out] z Z variable. /// @params[in,out] ky Ky variable. /// @params[in,out] kz Kz variable. /// @params[in,out] engine Random engine. /// @params[in] num_rays Numbers of rays. //------------------------------------------------------------------------------ template<typename T, typename B, bool SAFE_MATH> void init_efit(graph::shared_leaf<T, SAFE_MATH> omega, graph::shared_leaf<T, SAFE_MATH> x, graph::shared_leaf<T, SAFE_MATH> y, graph::shared_leaf<T, SAFE_MATH> z, graph::shared_leaf<T, SAFE_MATH> ky, graph::shared_leaf<T, SAFE_MATH> kz, std::mt19937_64 engine, const size_t num_rays) { std::normal_distribution<B> norm_dist1(static_cast<B> (700.0), static_cast<B> (10.0)); std::normal_distribution<B> norm_dist2(static_cast<B> (0.0), static_cast<B> (0.05)); std::normal_distribution<B> norm_dist3(static_cast<B> (-100.0), static_cast<B> (10.0)); std::normal_distribution<B> norm_dist4(static_cast<B> (0.0), static_cast<B> (10.0)); for (size_t j = 0; j < num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5))); y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5))); z->set(j, static_cast<T> (norm_dist2(engine))); ky->set(j, static_cast<T> (norm_dist3(engine))); kz->set(j, static_cast<T> (norm_dist4(engine))); } } //------------------------------------------------------------------------------ /// @brief Initalize random rays for vmec. /// /// @tparam T Base type of the calculation. /// @tparam B Base type of T. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in,out] omega Frequency variable. /// @params[in,out] x X variable. /// @params[in,out] y Y variable. /// @params[in,out] z Z variable. /// @params[in,out] ky Ky variable. /// @params[in,out] kz Kz variable. /// @params[in,out] engine Random engine. /// @params[in] num_rays Numbers of rays. //------------------------------------------------------------------------------ template<typename T, typename B, bool SAFE_MATH> void init_vmec(graph::shared_leaf<T, SAFE_MATH> omega, graph::shared_leaf<T, SAFE_MATH> x, graph::shared_leaf<T, SAFE_MATH> y, graph::shared_leaf<T, SAFE_MATH> z, graph::shared_leaf<T, SAFE_MATH> ky, graph::shared_leaf<T, SAFE_MATH> kz, std::mt19937_64 engine, const size_t num_rays) { std::normal_distribution<B> norm_dist1(static_cast<B> (430.0), static_cast<B> (1.0)); std::normal_distribution<B> norm_dist2(static_cast<B> (M_PI), static_cast<B> (0.05)); std::normal_distribution<B> norm_dist3(static_cast<B> (0.0), static_cast<B> (0.05)); std::normal_distribution<B> norm_dist4(static_cast<B> (0.0), static_cast<B> (1.0)); std::normal_distribution<B> norm_dist5(static_cast<B> (-150.0), static_cast<B> (1.0)); x->set(static_cast<T> (1.0)); for (size_t j = 0; j < num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); y->set(j, static_cast<T> (norm_dist2(engine))); z->set(j, static_cast<T> (norm_dist3(engine))); ky->set(j, static_cast<T> (norm_dist4(engine))); kz->set(j, static_cast<T> (norm_dist5(engine))); } } //------------------------------------------------------------------------------ /// @brief Trace the rays. /// Loading Loading @@ -48,7 +138,9 @@ void trace_ray(const size_t num_times, const size_t local_num_rays = batch + (extra > thread_number ? 1 : 0); std::mt19937_64 engine((thread_number + 1)*static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()))); const uint64_t seed = static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())); //const uint64_t seed = 0; std::mt19937_64 engine((thread_number + 1)*seed); std::uniform_int_distribution<size_t> int_dist(0, local_num_rays - 1); auto omega = graph::variable<T, SAFE_MATH> (local_num_rays, "\\omega"); Loading @@ -64,50 +156,42 @@ void trace_ray(const size_t num_times, // Inital conditions. if constexpr (jit::is_float<T> ()) { std::normal_distribution<float> norm_dist1(static_cast<float> (700.0), static_cast<float> (10.0)); std::normal_distribution<float> norm_dist2(static_cast<float> (0.0), static_cast<float> (0.05)); std::normal_distribution<float> norm_dist3(static_cast<float> (-100.0), static_cast<float> (10.0)); std::normal_distribution<float> norm_dist4(static_cast<float> (0.0), static_cast<float> (10.0)); for (size_t j = 0; j < local_num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5))); y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5))); z->set(j, static_cast<T> (norm_dist2(engine))); ky->set(j, static_cast<T> (norm_dist3(engine))); kz->set(j, static_cast<T> (norm_dist4(engine))); } #if 0 init_efit<T, float, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #else init_vmec<T, float, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #endif } else { std::normal_distribution<double> norm_dist1(static_cast<double> (700.0), static_cast<double> (10.0)); std::normal_distribution<double> norm_dist2(static_cast<double> (0.0), static_cast<double> (0.05)); std::normal_distribution<double> norm_dist3(static_cast<double> (-100.0), static_cast<double> (10.0)); std::normal_distribution<double> norm_dist4(static_cast<double> (0.0), static_cast<double> (10.0)); for (size_t j = 0; j < local_num_rays; j++) { omega->set(j, static_cast<T> (norm_dist1(engine))); x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5))); y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5))); z->set(j, static_cast<T> (norm_dist2(engine))); ky->set(j, static_cast<T> (norm_dist3(engine))); kz->set(j, static_cast<T> (norm_dist4(engine))); } #if 0 init_efit<T, double, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #else init_vmec<T, double, SAFE_MATH> (omega, x, y, z, ky, kz, engine, local_num_rays); #endif } #if 0 kx->set(static_cast<T> (-700.0)); auto eq = equilibrium::make_efit<T, SAFE_MATH> (NC_FILE); #else kx->set(static_cast<T> (-30.0)); #endif auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE); //auto eq = equilibrium::make_efit<T, SAFE_MATH> (EFIT_FILE); //auto eq = equilibrium::make_slab_density<T, SAFE_MATH> (); //auto eq = equilibrium::make_slab_field<T, SAFE_MATH> (); //auto eq = equilibrium::make_no_magnetic_field<T, SAFE_MATH> (); #if 0 const T endtime = static_cast<T> (2.0); #else const T endtime = static_cast<T> (0.2); #endif const T dt = endtime/static_cast<T> (num_times); //auto dt_var = graph::variable(num_rays, static_cast<T> (dt), "dt"); Loading @@ -124,7 +208,7 @@ void trace_ray(const size_t num_times, //solver::rk4<dispersion::cold_plasma<T, SAFE_MATH>> //solver::adaptive_rk4<dispersion::ordinary_wave<T, SAFE_MATH>> //solver::rk4<dispersion::hot_plasma<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>> //solver::rk4<dispersion::hot_plasma_expandion<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>> //solver::rk4<dispersion::hot_plasma_expansion<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>> solve(omega, kx, ky, kz, x, y, z, t, dt, eq, stream.str(), local_num_rays, thread_number); solve.init(kx); Loading Loading @@ -201,6 +285,10 @@ void trace_ray(const size_t num_times, /// /// @tparam T Base type of the calculation. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in] num_times Total number of time steps. /// @params[in] sub_steps Number of substeps to push the rays. /// @params[in] num_rays Number of rays to trace. //------------------------------------------------------------------------------ template<jit::float_scalar T, bool SAFE_MATH=false> void calculate_power(const size_t num_times, Loading Loading @@ -235,17 +323,8 @@ void calculate_power(const size_t num_times, auto t = graph::variable<T, SAFE_MATH> (local_num_rays, "t"); auto kamp = graph::variable<T, SAFE_MATH> (local_num_rays, "kamp"); omega->set(static_cast<T> (0.0)); graph::shared_variable<T, SAFE_MATH> omega_var = graph::variable_cast(omega); graph::shared_variable<T, SAFE_MATH> kx_var = graph::variable_cast(kx); graph::shared_variable<T, SAFE_MATH> ky_var = graph::variable_cast(ky); graph::shared_variable<T, SAFE_MATH> kz_var = graph::variable_cast(kz); graph::shared_variable<T, SAFE_MATH> x_var = graph::variable_cast(x); graph::shared_variable<T, SAFE_MATH> y_var = graph::variable_cast(y); graph::shared_variable<T, SAFE_MATH> z_var = graph::variable_cast(z); graph::shared_variable<T, SAFE_MATH> t_var = graph::variable_cast(t); auto eq = equilibrium::make_efit<T, SAFE_MATH> (NC_FILE); auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE); //auto eq = equilibrium::make_efit<T, SAFE_MATH> (EFIT_FILE); //auto eq = equilibrium::make_slab_density<T, SAFE_MATH> (); //auto eq = equilibrium::make_slab_field<T, SAFE_MATH> (); //auto eq = equilibrium::make_no_magnetic_field<T, SAFE_MATH> (); Loading @@ -268,6 +347,136 @@ void calculate_power(const size_t num_times, total.print(); } //------------------------------------------------------------------------------ /// @brief Bin power. /// /// @tparam T Base type of the calculation. /// @tparam SAFE_MATH Use safe math operations. /// /// @params[in] num_times Total number of time steps. /// @params[in] sub_steps Number of substeps to push the rays. /// @params[in] num_rays Number of rays to trace. //------------------------------------------------------------------------------ template<jit::float_scalar T, bool SAFE_MATH=false> void bin_power(const size_t num_times, const size_t sub_steps, const size_t num_rays) { const timeing::measure_diagnostic total("Power Time"); std::vector<std::thread> threads(std::max(std::min(static_cast<unsigned int> (jit::context<T, SAFE_MATH>::max_concurrency()), static_cast<unsigned int> (num_rays)), static_cast<unsigned int> (1))); const size_t batch = num_rays/threads.size(); const size_t extra = num_rays%threads.size(); for (size_t i = 0, ie = threads.size(); i < ie; i++) { threads[i] = std::thread([num_times, sub_steps, num_rays, batch, extra] (const size_t thread_number, const size_t num_threads) -> void { std::ostringstream stream; stream << "result" << thread_number << ".nc"; const size_t num_steps = num_times/sub_steps; const size_t local_num_rays = batch + (extra > thread_number ? 1 : 0); auto x = graph::variable<T, SAFE_MATH> (local_num_rays, "x"); auto y = graph::variable<T, SAFE_MATH> (local_num_rays, "y"); auto z = graph::variable<T, SAFE_MATH> (local_num_rays, "z"); auto x_last = graph::variable<T, SAFE_MATH> (local_num_rays, "x_last"); auto y_last = graph::variable<T, SAFE_MATH> (local_num_rays, "y_last"); auto z_last = graph::variable<T, SAFE_MATH> (local_num_rays, "z_last"); auto kamp = graph::variable<T, SAFE_MATH> (local_num_rays, "kamp"); auto power = graph::variable<T, SAFE_MATH> (local_num_rays, static_cast<T> (1.0), "power"); auto k_sum = graph::variable<T, SAFE_MATH> (local_num_rays, static_cast<T> (0.0), "k_sum"); auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE); auto x_real = eq->get_x(x, y, z); auto y_real = eq->get_y(x, y, z); auto z_real = eq->get_z(x, y, z); auto x_real_last = eq->get_x(x_last, y_last, z_last); auto y_real_last = eq->get_y(x_last, y_last, z_last); auto z_real_last = eq->get_z(x_last, y_last, z_last); auto dlvec = graph::vector(x_real - x_real_last, y_real - y_real_last, z_real - z_real_last); auto dl = dlvec->length(); auto kdl = kamp*dl; auto k_next = kdl + k_sum; auto p_next = graph::exp(graph::none<T, SAFE_MATH> ()*graph::two<T, SAFE_MATH> ()*k_sum); auto d_power = p_next - power; d_power = graph::sqrt(d_power*d_power); workflow::manager<T, SAFE_MATH> work(thread_number); work.add_item({ graph::variable_cast(x), graph::variable_cast(y), graph::variable_cast(z), graph::variable_cast(x_last), graph::variable_cast(y_last), graph::variable_cast(z_last), graph::variable_cast(kamp), graph::variable_cast(power), graph::variable_cast(k_sum), }, {d_power}, { {x, graph::variable_cast(x_last)}, {y, graph::variable_cast(y_last)}, {z, graph::variable_cast(z_last)}, {p_next, graph::variable_cast(power)}, {k_next, graph::variable_cast(k_sum)} }, "power"); work.compile(); output::result_file file(stream.str()); output::data_set<T> dataset(file); dataset.create_variable(file, "power", power, work.get_context()); dataset.create_variable(file, "d_power", d_power, work.get_context()); dataset.reference_variable(file, "x", graph::variable_cast(x)); dataset.reference_variable(file, "y", graph::variable_cast(y)); dataset.reference_variable(file, "z", graph::variable_cast(z)); dataset.reference_imag_variable(file, "kamp", graph::variable_cast(kamp)); file.end_define_mode(); dataset.read(file, 0); x_last->set(x->evaluate()); y_last->set(y->evaluate()); z_last->set(z->evaluate()); dataset.write(file, 0); std::thread sync([]{}); work.copy_to_device(x_last, graph::variable_cast(x_last)->data()); work.copy_to_device(y_last, graph::variable_cast(y_last)->data()); work.copy_to_device(z_last, graph::variable_cast(z_last)->data()); for (size_t j = 1, je = num_steps + 1; j < je; j++) { dataset.read(file, j); work.copy_to_device(x, graph::variable_cast(x)->data()); work.copy_to_device(y, graph::variable_cast(y)->data()); work.copy_to_device(z, graph::variable_cast(z)->data()); work.copy_to_device(kamp, graph::variable_cast(kamp)->data()); work.run(); sync.join(); work.wait(); sync = std::thread([&file, &dataset] (const size_t k) -> void { dataset.write(file, k); }, j); } sync.join(); }, i, threads.size()); } for (std::thread &t : threads) { t.join(); } total.print(); } //------------------------------------------------------------------------------ /// @brief Main program of the driver. /// Loading @@ -292,6 +501,7 @@ int main(int argc, const char * argv[]) { calculate_power<std::complex<base>, use_safe_math> (num_times, sub_steps, num_rays); bin_power<base> (num_times, sub_steps, num_rays); std::cout << std::endl << "Timing:" << std::endl; total.print(); Loading
graph_framework.xcodeproj/project.pbxproj +21 −13 Original line number Diff line number Diff line Loading @@ -296,6 +296,7 @@ C73BBE7D29F816E60027BB7F /* piecewise_test.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; path = piecewise_test.cpp; sourceTree = "<group>"; }; C73BBE9629F8669F0027BB7F /* newton.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = newton.hpp; sourceTree = "<group>"; }; C74DF4572AA8BC7300319113 /* graph_benchmark */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = graph_benchmark; sourceTree = BUILT_PRODUCTS_DIR; }; C7678FBD2B45C2850025F37E /* bin.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = bin.py; sourceTree = "<group>"; }; C77E6DF522DD64E700469621 /* trigonometry.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = trigonometry.hpp; sourceTree = "<group>"; }; C79141A622DA9BF200E0BA0D /* libgraph_framework.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgraph_framework.a; sourceTree = BUILT_PRODUCTS_DIR; }; C79141AE22DA9C3000E0BA0D /* node.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = node.hpp; sourceTree = "<group>"; }; Loading Loading @@ -459,6 +460,7 @@ isa = PBXGroup; children = ( C7167B222AC5CE8500E03131 /* fix_NaN.py */, C7678FBD2B45C2850025F37E /* bin.py */, ); path = utilities; sourceTree = "<group>"; Loading Loading @@ -882,7 +884,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1500; LastUpgradeCheck = 1510; ORGANIZATIONNAME = "Cianciosa, Mark R."; TargetAttributes = { C73690302A38C498001733B0 = { Loading Loading @@ -1258,7 +1260,8 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "DEBUG=1", "$(inherited)", ); Loading @@ -1274,7 +1277,8 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", USE_METAL, "CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"", "$(inherited)", Loading Loading @@ -1329,6 +1333,8 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", USE_METAL, "CXX_FLAGS=\\\"-g\\ -fsanitize=undefined\\ -fsanitize=float-divide-by-zero\\ -fsanitize-trap=all\\\"", "CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"", Loading @@ -1354,6 +1360,9 @@ OTHER_LDFLAGS = ( "-fsanitize=float-divide-by-zero", "-lnetcdf", "-ld_classic", "-rpath", /usr/local/lib, ); SDKROOT = macosx; }; Loading Loading @@ -1402,6 +1411,8 @@ GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"", USE_METAL, "CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"", "$(inherited)", Loading @@ -1425,6 +1436,9 @@ OTHER_LDFLAGS = ( "-fsanitize=float-divide-by-zero", "-lnetcdf", "-ld_classic", "-rpath", /usr/local/lib, ); SDKROOT = macosx; }; Loading Loading @@ -1481,10 +1495,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 13.5; OTHER_CPLUSPLUSFLAGS = "-fsanitize=float-divide-by-zero"; PRODUCT_NAME = "$(TARGET_NAME)"; Loading @@ -1500,10 +1511,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "$(inherited)", ); GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 13.5; OTHER_CPLUSPLUSFLAGS = ""; OTHER_LDFLAGS = "-lnetcdf"; Loading Loading @@ -1690,7 +1698,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", USE_METAL, "CXX=\\\"c++\\\"", "DEBUG=1", Loading @@ -1709,7 +1717,7 @@ CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", "EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"", USE_METAL, "CXX=\\\"c++\\\"", "$(inherited)", Loading
graph_framework.xcodeproj/xcshareddata/xcschemes/arithmetic_test.xcscheme +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <Scheme LastUpgradeVersion = "1500" LastUpgradeVersion = "1510" version = "1.7"> <BuildAction parallelizeBuildables = "YES" Loading
graph_framework.xcodeproj/xcshareddata/xcschemes/graph_driver.xcscheme +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <Scheme LastUpgradeVersion = "1500" LastUpgradeVersion = "1510" version = "1.3"> <BuildAction parallelizeBuildables = "YES" Loading