Ответ 1
функция Ackermann обычно является забавной, но не давайте ей очень большие входы, если вы хотите, чтобы она закончилась в вашей жизни.
Я хочу написать программу быстрого тестирования, которая может быть скомпилирована и запущена на разных машинах. Вместо того, чтобы использовать доступные в продаже/доступные с открытым исходным кодом опции, я бы предпочел, чтобы у меня было много возможностей для оптимизации потоков и алгоритмов.
У меня есть пара, которую я использую уже, которая включает в себя рекурсивно вычисление n-го числа последовательности Фибоначчи и посев /rand () в несколько тысяч раз.
Существуют ли какие-либо другие алгоритмы, относительно простые, но в то же время вычислительно-интенсивные (и, возможно, связанные с математикой)?
(обратите внимание, что эти операции будут реализованы на языке С.)
функция Ackermann обычно является забавной, но не давайте ей очень большие входы, если вы хотите, чтобы она закончилась в вашей жизни.
Фракталы
(при различных разрешениях) Некоторый фрактальный источник в C (без opengl)
Я знаю, что вы сказали, что хотите сделать свой собственный, но, возможно, вы могли бы использовать существующие тесты для вдохновения. Тест-драйв на компьютерном языке запустил множество языков программирования с помощью набора эталонных тестов. Возможно, вы можете получить некоторые идеи, глядя на их тесты.
Некоторые быстрые идеи в моей голове:
Матричное умножение: mulitplying 2 большие матрицы относительно вычислительно интенсивный, хотя вы необходимо будет учитывать кэширование
Генерация простых чисел
Целочисленная факторизация
Численные методы решения ОДУ - Runge-kutta например
Инвертирование больших матриц.
Вы можете вычислять большие простые числа или разделить целые числа.
Взгляните на Параллельные тесты NAS. Они были первоначально написаны NASA в Fortran для суперкомпьютеров, использующих MPI (и все еще доступны именно так), но есть также C, Java, а также реализации OpenMP.
Большинство из них являются очень вычислительно интенсивными, поскольку они предназначены для представления численных алгоритмов, используемых в научных вычислениях.
Попробуйте вычислить тысячи или миллионы pi цифр. Для этой задачи существует немало formulas.
У вас есть действительно хорошие в project euler, все они связаны с математикой и могут занимать много времени, поскольку вы хотите использовать более высокие значения.
Поиск простых чисел считается довольно трудоемким.
Это добавляет много:
int c = 0;
for (int n = 0; n < INT_MAX; n++)
for (int m = 0; m < INT_MAX; m++)
c++;
std::cout << c;
Ознакомьтесь с эталонами перехвата языка: http://shootout.alioth.debian.org/
Однако: контрольные показатели - это только контрольные показатели и не обязательно много рассказывают о реальном мире и, напротив, могут вводить в заблуждение.
Если вы хотите попробовать parallelism, выполните множество математических вычислений. Размер вашей матрицы, которую вы можете использовать, будет ограничен памятью, но вы можете делать столько итераций, сколько хотите.
Это подчеркнет инструкции SIMD, которые поставляются современными процессорами.
Вы можете попробовать серию (Turbo Sort) с очень большим набором входных данных. Я понимаю, что это общая операция.
Эвристика для NP-Complete проблемы - интересный способ получить некоторый процессорный код. Вы можете закодировать "решение":) для одного из Karps NP-Complete problems.