Я сейчас нахожусь в процессе оптимизации кода числового анализа. В коде есть таблица поиска элементов 200x150 (в настоящее время статическая std::vector <std::vector<double>>
), которая создается в начале каждого запуска. Построение справочной таблицы на самом деле довольно сложное - значения в справочной таблице построены с использованием итеративного метода секущих на сложном наборе уравнений. В настоящее время для моделирования построение справочной таблицы составляет 20% времени выполнения (время выполнения составляет порядка 25 секунд, построение справочной таблицы занимает 5 секунд). Хотя 5 секунд может показаться не слишком много, при запуске наших симуляций MC, когда мы запускаем симуляции 50k +, это внезапно становится большим отрезком времени.
Наряду с некоторыми другими идеями, одна вещь, которая была высказана - можем ли мы построить эту таблицу поиска, используя шаблоны во время компиляции? Сам стол никогда не меняется. Жесткое кодирование большого массива не является обслуживаемым решением (уравнения, которые входят в составление таблицы, постоянно изменяются), но кажется, что если таблица может быть сгенерирована во время компиляции, это даст нам лучшее из обоих миров (легко обслуживаемый, без накладных расходов во время выполнения).
Итак, я предлагаю следующий (значительно упрощенный) сценарий. Допустим, вы хотели сгенерировать статический массив (используйте тот контейнер, который вам больше подходит - массив 2D c, вектор векторов и т. Д.) Во время компиляции. У вас есть определенная функция -
double f(int row, int col);
, где возвращаемое значение - это запись в таблице, строка - это строка таблицы поиска, а col - столбец таблицы поиска. Можно ли создать этот статический массив во время компиляции, используя шаблоны, и как?