I found two extra optimisations opportunities:
cRawOut::file_points() in wrspice/src/fte/rawfile.cc was calling fwrite() for every value. I created an optimised version that assumes a binary raw file and writes each row to an output buffer.
I created a custom, fast version of spMatrixFrame::spLoadGmin(), called spLoadGminFast1(), that assumes:
checkmin = false, checkmax = true, and this->LongDoubles = false. I arranged for this to be called by sCKT::loadGmin(), when that is appropriate.
Neither of these changes are spectacular in terms of their speedups, but together they cut a few percent off the total run time.
I found two extra optimisations opportunities:
cRawOut::file_points() in wrspice/src/fte/rawfile.cc was calling fwrite() for every value. I created an optimised version that assumes a binary raw file and writes each row to an output buffer.
I created a custom, fast version of spMatrixFrame::spLoadGmin(), called spLoadGminFast1(), that assumes:
checkmin = false, checkmax = true, and this->LongDoubles = false. I arranged for this to be called by sCKT::loadGmin(), when that is appropriate.
Neither of these changes are spectacular in terms of their speedups, but together they cut a few percent off the total run time.