From 2d75d7e1027e47ca736471761bfc05f1c0965fa8 Mon Sep 17 00:00:00 2001 From: Luc Grosheintz Date: Thu, 13 Jun 2024 16:42:55 +0200 Subject: [PATCH] Optimize code generated for `diam` and `area`. --- src/neuron/cache/mechanism_range.hpp | 2 +- src/nmodl/nocpout.cpp | 4 ++-- src/nrnoc/treeset.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/neuron/cache/mechanism_range.hpp b/src/neuron/cache/mechanism_range.hpp index 4e2827e3d2..796139a2f2 100644 --- a/src/neuron/cache/mechanism_range.hpp +++ b/src/neuron/cache/mechanism_range.hpp @@ -22,7 +22,7 @@ void indices_to_cache(short type, Callable callable) { auto const sem = dparam_semantics[field]; // See https://github.com/neuronsimulator/nrn/issues/2312 for discussion of possible // extensions to caching. - if ((sem > 0 && sem < 1000) || sem == -1 /* area */) { + if ((sem > 0 && sem < 1000) || sem == -1 /* area */ || sem == -9 /* diam */) { std::invoke(callable, field); } } diff --git a/src/nmodl/nocpout.cpp b/src/nmodl/nocpout.cpp index 02c70c5a8e..db34778cfb 100644 --- a/src/nmodl/nocpout.cpp +++ b/src/nmodl/nocpout.cpp @@ -2496,7 +2496,7 @@ int iondef(int* p_pointercount) { if (diamdec) { /* must be last */ Sprintf(buf, - "#define diam *_ppvar[%d].get()\n", + "#define diam (*(_ml->dptr_field<%d>(_iml)))\n", ioncount + *p_pointercount + num_random_vars); q2 = lappendstr(defs_list, buf); q2->itemtype = VERBATIM; @@ -2504,7 +2504,7 @@ int iondef(int* p_pointercount) { if (areadec) { /* must be last, if we add any more the administrative procedures must be redone */ Sprintf(buf, - "#define area *_ppvar[%d].get()\n", + "#define area (*(_ml->dptr_field<%d>(_iml)))\n", ioncount + *p_pointercount + num_random_vars + diamdec); q2 = lappendstr(defs_list, buf); q2->itemtype = VERBATIM; diff --git a/src/nrnoc/treeset.cpp b/src/nrnoc/treeset.cpp index 3ef6e3aff6..ff8ca8283b 100644 --- a/src/nrnoc/treeset.cpp +++ b/src/nrnoc/treeset.cpp @@ -2367,7 +2367,7 @@ neuron::model_sorted_token nrn_ensure_model_data_are_sorted() { nrn_sort_node_data(node_token, cache); assert(node_data.is_sorted()); // TODO: maybe we should separate out cache population from sorting. - std::size_t n{}; // eww + std::size_t n{}; model.apply_to_mechanisms([&cache, &n, &mech_tokens](auto& mech_data) { // TODO do we need to pass `node_token` to `nrn_sort_mech_data`? nrn_sort_mech_data(mech_tokens[n], cache, mech_data);