Задание вопроса таким общим способом не позволяет дать очень конкретный совет.
Я бы начал анализ с поиска способов оценить или переписать функцию, используя группы переменных, которые тесно взаимодействуют, создавая промежуточные выражения, которые можно использовать для окончательной оценки. Вы можете найти способ сделать это, используя иерархию подвыражений, которая ведет от самих переменных к конечной функции.
Как правило, чем короче и шире такое дерево оценки, тем больше степень параллелизма. Следует иметь в виду два предостерегающих замечания, которые отвлекают от «большего параллелизма - лучше».
С одной стороны, высокопараллельный подход может на самом деле включать в себя больше вычислений, чем ваш первоначальный "последовательный" подход. На самом деле следует ожидать некоторой потери эффективности в этом отношении, поскольку последовательный подход может использовать преимущества всех предыдущих оценок подвыражений и максимизировать их повторное использование.
С другой стороны, параллельная оценка часто будет иметь худшее поведение округления / точности, чем последовательная оценка, выбранная для получения хороших или оптимальных оценок ошибок.
Была проделана большая работа по оценкам, включающим матрицы, где обычно существует большая симметрия того, как значение функции зависит от ее аргументов. Так что это помогает познакомиться с численной линейной алгеброй и параллельными алгоритмами, которые были разработаны там.
Другая область, в которой много известно, - это многомерные полиномиальные и рациональные функции.
Когда функция трансцендентна, можно надеяться на некоторые преобразования или рефакторинг, которые делают зависимость более податливой (алгебраической).
Не имеют непосредственного отношения к вашему вопросу алгоритмы, которые амортизируют стоимость вычисления значений функций по ряду аргументов. Например, в вычислительных решениях для обыкновенных дифференциальных уравнений могут существовать «многошаговые» методы, которые разделяют стоимость оценки производных в промежуточных точках путем повторного использования этих значений несколько раз.
Я бы предположил, что ваше стремление ускорить оценку функции предполагает, что вы планируете выполнить более одной оценки. Поэтому вы можете подумать о том, как воспользоваться преимуществами предыдущих оценок или выполнить оценки по связанным аргументам так, чтобы это способствовало вашему поиску параллелизма.
Добавлено: Некоторые ссылки и обсуждение стратегии поиска
Большинство авторов используют фразу "оценка параллельной функции" для
означает оценку одной и той же функции в нескольких точках аргумента.
См. Например:
[Оценка крупнозернистых параллельных функций - Рулон и Юсеф]
http://cdsweb.cern.ch/record/401028/files/p837.pdf
Стратегия поиска, чтобы найти материал, который спрашивает Гаурав Калра
о должны стараться избегать тех. Например, мы могли бы включить
"мелкозернистый" в наших поисковых терминах.
Также эффективно сосредоточиться на определенных видах функций, например,
«полиномиальная оценка», а не «оценка функции».
Вот, например, у нас есть лечение некоторых известных методов
для «быстрых» оценок, применяемых для проектирования вычислений на основе графического процессора:
[Как получить эффективные ядра GPU - Круз, Лейтон и Барба]
http://arxiv.org/PS_cache/arxiv/pdf/1009/1009.3457v1.pdf
(из их тезисов) "Здесь мы взялись за быстрое суммирование
алгоритмы (быстрый мультипольный метод и быстрое преобразование Гаусса),
и прикладной алгоритмический редизайн для достижения производительности на
Графические процессоры. Прогресс улучшения производительности достигнут
иллюстрирует упражнение формулировки алгоритмов для
массивно параллельная архитектура графического процессора. "
Другим поисковым термином, который стоит исключить, является «конвейерный».
Этот термин неизменно обсуждает вид параллелизма, который может
использоваться, когда необходимо выполнить множественные оценки функций. Рано
Этапы вычисления могут быть выполнены параллельно с более поздними
ступени, но на разных входах.
Так что это поисковый запрос, который можно исключить. Или нет.
Вот статья, в которой обсуждается n-кратное ускорение для n-variate.
полиномиальная оценка над конечными полями GF (p). Это может быть
прямой интерес для криптографических приложений, но
подход через модифицированный метод Хорнера может быть интересен для
его потенциал для обобщения:
[Сравнение алгоритмов на уровне битов и слов для оценки
Неструктурированные функции над конечными кольцами - Сунар и Сигански]
http://www.iacr.org/archive/ches2005/018.pdf
"Мы представляем модификацию алгоритма Хорнера для оценки
произвольные n-переменные функции, определенные над конечными кольцами и полями.
... Если область является конечным полем GF (p), то сложность
многовариантная оценка полинома Хорнера улучшена с O (p ^ n)
в O ((p ^ n) / (2n)). Докажем оптимальность представленного алгоритма. "
Многомерные рациональные функции можно рассматривать просто как
отношение двух таких полиномиальных функций. Для особого случая
одномерных рациональных функций, которые могут быть особенно
эффективен в аппроксимации элементарных трансцендентных функций
и другие, могут быть оценены с помощью конечного (соответственно усеченного)
непрерывные дроби, чьи сходимости (частичные числители
и знаменатели) могут быть определены рекурсивно.
Тема постоянных оценок фракций позволяет нам
к последней ссылке, которая связывает эту тему с некоторыми знакомыми
параллелизм числовой линейной алгебры:
[LU Факторизация и параллельная оценка продолженных фракций
Ömer Egecioglu]
http://www.cs.ucsb.edu/~omer/DOWNLOADABLE/lu-cf98.pdf
"Первые n сходящихся общей непрерывной дроби
(CF) может быть оптимально вычислено в логарифмической параллели
время с использованием O (n / log (n)) процессоров. "