Я написал подпрограмму с целочисленным квадратным корнем, содержащую всего пару десятков строк ASM, без каких-либо вызовов API - и все же он мог делать только около 50 миллионов SqRoots / сек (это было около пяти лет назад ...) ,
Я хочу сказать, что если вы собираетесь совершать миллиарды звонков, даже сегодняшние технологии будут задыхаться.
Но если вы действительно хотите приложить усилия, чтобы ускорить его, удалите как можно больше использования API. Это может потребовать, чтобы вы выполняли задачи API вручную, а не позволяли библиотекам делать это за вас. В частности, удалите любой тип потоковой операции. Это медленнее, чем грязь в этом контексте. Возможно, вам действительно придется импровизировать там.
Единственное, что осталось сделать после этого, это заменить столько строк C ++, сколько вы можете, на пользовательские ASM, но вам придется быть перфекционистом в этом. Убедитесь, что вы в полной мере используете каждый цикл и регистр ЦП, а также каждый байт кэша ЦП и место в стеке.
Вы можете рассмотреть возможность использования целочисленных значений вместо плавающих точек, поскольку они гораздо более дружественны к ASM и намного более эффективны. Вам нужно было бы умножить число на 10 ^ 7 (или 10 ^ p, в зависимости от того, как вы решили сформировать свою логику), чтобы переместить десятичную дробь полностью вправо. Тогда вы можете спокойно конвертировать число с плавающей точкой в основное целое число.
Вам придется полагаться на аппаратные средства компьютера, чтобы сделать все остальное.
<--Microsoft Specific-->
Я также добавлю, что идентификаторы C ++ (включая статические, как упоминал Донни Дебоер) доступны напрямую из блоков ASM, вложенных в ваш код C ++. Это делает встроенный ASM легким.
<--End Microsoft Specific-->