Каковы несколько трудоемких операций в C? - PullRequest
13 голосов
/ 15 июля 2009

Я ищу написать быструю тестовую программу, которую можно скомпилировать и запустить на разных машинах. Вместо того, чтобы использовать коммерчески / с открытым исходным кодом опции, я предпочел бы иметь свои собственные, чтобы поиграть с потоками и методами оптимизации алгоритма.

У меня уже есть пара, которую я использую, которая включает в себя рекурсивный расчет n-го числа последовательности Фибоначчи и подсев / ранд () несколько тысяч раз.

Существуют ли какие-либо другие алгоритмы, которые относительно просты, но в то же время требуют значительных вычислительных ресурсов (и, возможно, математических)?

(Обратите внимание, что эти операции будут реализованы на языке C.)

Ответы [ 14 ]

8 голосов
/ 15 июля 2009

Функция Ackermann обычно забавная, но не дайте ей очень больших входных данных, если вы хотите, чтобы она закончилась в течение вашей жизни.

3 голосов
/ 15 июля 2009

Я знаю, что вы сказали, что хотите сделать свой собственный, но, возможно, вы можете использовать существующие критерии для вдохновения Тестовая версия компьютерного языка использует множество языков программирования с помощью набора тестов. Возможно, вы можете получить некоторые идеи, глядя на их тесты.

Несколько быстрых идей по макушке головы:

  • Умножение матриц: мультипликация 2 большие матрицы относительно вычислительно интенсивный, хотя вы придется учитывать кэширование

  • Генерация простых чисел

  • Целочисленная факторизация

  • Численные методы решения ОДУ - Рунге-кутта например

3 голосов
/ 15 июля 2009

Фракталы

(в различных разрешениях) Некоторый фрактальный источник в C (без opengl)

2 голосов
/ 15 июля 2009

Посмотрите на Параллельные тесты NAS . Первоначально они были написаны NASA * ​​1004 * на Фортране для суперкомпьютеров, использующих MPI (и до сих пор доступны таким образом), но теперь доступны также реализации на C, Java и OpenMP.

Большинство из них очень требуют больших вычислительных ресурсов, так как они предназначены для представления численных алгоритмов, используемых в научных вычислениях.

2 голосов
/ 15 июля 2009

Вы можете вычислить большие простые числа или факторизовать целые числа.

2 голосов
/ 15 июля 2009

Инвертирование больших матриц.

1 голос
/ 15 июля 2009

У вас есть несколько действительно хороших в Project Euler , все они связаны с математикой и могут занимать много времени, если вы хотите использовать более высокие значения.

1 голос
/ 15 июля 2009

Попробуйте вычислить тысячи или миллионы пи цифр Для этой задачи есть немало формул .

0 голосов
/ 16 июля 2009

Эвристика для NP-Complete - это интересный способ получить код, интенсивно использующий процессор. Вы можете написать «решение» :) для одной из Karps NP-Complete проблем.

0 голосов
/ 15 июля 2009

Вы можете попробовать tsort (Turbo Sort) с очень большим набором входных данных. Я понимаю, что это обычная операция.

...