Как я могу ограничить вычислительную мощность, предоставляемую конкретной программе? - PullRequest
4 голосов
/ 18 января 2011

Я занимаюсь разработкой на ноутбуке с двухъядерным процессором с тактовой частотой 1,8 ГГц, но люди часто запускают мои программы на гораздо более слабых системах (например, ARM с тактовой частотой 300 МГц).мой ноутбук, чтобы я мог наблюдать, как работает моя программа.Это интерактивное приложение.

Я посмотрел на qemu и знаю, как настроить среду, но это немного болезненно, и я не увидел точного заклинания переключателей, мне нужно было бы заставить qemu моделировать более слабыйЦП.

У меня есть virtualbox, но не похоже, что я могу виртуализировать менее 1 процессора полного хоста.

Я знаю о http://cpulimit.sourceforge.net/, который использует sigstop и sigcont, чтобы попробоватьограничить процессор, данный процессу, но я волнуюсь, это не совсем точное изображение более слабого процессора.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 18 января 2011

Если ваш процессор 1800 МГц и ваша цель 300 МГц, а ваш код выглядит так:

while(1) { /*...*/ }

, вы можете переписать его следующим образом:

long last=gettimestamp();
while(1)
{
   long curr=gettimestamp();
   if(curr-last>1000)                 // out of every second...
   {
      long target=curr+833;           // ...waste 5/6 of it
      while(gettimestamp()<target);
      last=target;
   }

   // your original code
}

где gettimestamp() это высокочастотный таймер вашей ОС.

Вы можете работать с меньшими значениями для более плавного восприятия, например, 83 мс из каждых 100 мс или 8 мс из каждых 10 мс, и так далее.Чем ниже вы пойдете, тем больше потеря точности разрушит вашу математику.


edit: Или как насчет этого?Создайте второй процесс, который запускает первый и присоединяется к нему в качестве отладчика, затем периодически приостанавливает его и возобновляет его в соответствии с приведенным выше алгоритмом.

0 голосов
/ 18 января 2011

Я где-то выбрал ноутбук PIIMMX-266 и установил на него минимальный Debian.Это было идеальное решение, пока оно не умерло несколько недель назад.Это модель Panasonic, которая имеет нестандартный разъем IDE (это не 40-контактный или 44-контактный разъем), поэтому я не смог заменить его жесткий диск на CF (адаптер CF-to-IDE стоит около нуля),Кроме того, цена такой машины составляет 50 долларов США / 40 евро.

(я использовал ее для моделирования медленной машины на базе ARM для нашей домашней автоматической системы, которая должна работать даже наСамые маленькие и медленные системы Linux. Тем временем мы выбрали маленький и медленный компьютер для домашних целей: GuruPlug. Он имеет быстродействующий процессор объемом около 1,2 ГБ.)

(я не знаком с QEMU, но в руководстве говорится, что вы можете использовать KVM (виртуализацию ядра) для запуска программ на собственной скорости, я предполагаю, что если это дополнительная функция, то ее можно отключить, поэтому, как ни странно, это правда, она может эмулировать x86 на x86.)

0 голосов
/ 18 января 2011

Возможно, вы захотите взглянуть на эмулятор, созданный для этого.Например, от Microsoft вы можете найти эту техническую заметку: http://www.nsbasic.com/ce/info/technotes/TN23.htm.

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

...