2015-01-02 13 views
6

Muszę przetestować wbudowany komputer pod kątem najbardziej ekstremalnych warunków generowanego ciepła i poboru prądu, a do tego chcę napisać program, który wykorzystuje zasoby procesora tak dużo jak to możliwe czterordzeniowego procesora (jeden wątek na rdzeń). Czy możesz zasugerować coś, co byłoby bardzo głodne?Najłatwiejszy sposób symulacji maksymalnego obciążenia procesora?

Muszę to zrobić dla Linuksa na ARMv7, a język to C lub C++, inne przykłady znalazłem albo dla Windowsa, albo nie w C/C++.

Próbuję coś takiego na moim komputerze z systemem Windows i najwyraźniej to działa, jak to ma 12% całkowitej mocy procesora (co jest Core i7 Quad 2 wątki na rdzeń):

float x = 1.5f; 
while (1) 
{ 
    x *= sin(x)/atan(x) * tanh(x) * sqrt(x); 
} 

I don Wiesz, jak zrobić to wielowątkowo.

+0

Proszę nie mieszać znaczników c i C++. Wybierz jeden z nich. –

+1

W systemie Linux można rozwidlić kilka takich procesów. Być może po prostu zaczynając w tle swojej powłoki. Ale wiele dystrybucji Linuksa ma "cpuburn" –

Odpowiedz

4

Twój kod jest seryjny. Masz osiem dostępnych wątków (4 rdzenie * 2 wątki na rdzeń = 8 całych wątków), a twój obecny kod używa jednego z nich do 1 thread/8 available = 12.5% twojego procesora. Jeśli musisz napisać swój własny kod (i nie używać wcześniej istniejącego kodu intensywnego, jak już sugerowały inne osoby), polecam wstawienie #pragma omp parallel powyżej twojej pętli while i kompilowanie z flagą -fopenmp (zakładając, że używasz MinGW, jeśli nie , dokładna opcja może się różnić), aby zamiast tego użyć wszystkich dostępnych wątków.

+1

Wow! Dlaczego nie pomyślałem o OpenMP ?!Od razu użyłem 100% mojego i7, kiedy skompilowałem ten kod z/openmp na MSVC2013. Myślę, że to również będzie działać z Linuksem ... Chcąc teraz spróbować. –

+0

@MarkMiles: Rzeczywiście powinien działać również z Linuksem, chyba że zmieniono zmienną środowiskową 'OMP_MAX_NUM_THREADS' na mniej niż maksymalną liczbę wątków dostępnych na komputerze. – wolfPack88

+1

W rzeczywistości to działa. Dzięki! –

0

Czy to musi być własny program? Zawsze możesz po prostu wziąć jakiś istniejący kod wypalający wiele cykli, taki jak raytracer lub Bitcoin, i uruchomić kilka z nich.

+0

Cóż, szukałem "najłatwiejszego" sposobu. Złożona funkcja matematyczna powinna załatwić sprawę, ale ważne jest, aby działała na wszystkich dostępnych rdzeniach wielordzeniowego procesora. –

+0

Korzystanie z gotowych kodów jest łatwiejsze niż pisanie nowego kodu. Uruchamianie czterech procesów to najłatwiejsza rzecz, jaką mogę zrobić, aby dać pracę wszystkim trzem rdzeniom. –

2

To zależy od tego, co masz na myśli przez "maksymalne obciążenie procesora".

Jeśli chodzi o użycie procesora, zasadniczo wszystko będzie działać. Pamiętaj, że będziesz potrzebował tylu wątków (lub tyle instancji pliku wykonywalnego), ile procesorów ma rdzeń.

Należy jednak pamiętać, że użycie procesora nie jest podstawowym i końcowym zużyciem energii w układzie SoC. Inne aspekty, o których musisz pamiętać, to:

  • Dostęp do pamięci. Aplikacja, z której korzystasz obecnie, w ogóle nie dotyka pamięci.

  • on-die Inne urządzenia peryferyjne, takie jak kontrolery pamięci flash, sterowników SPI/I2C/UART itp

  • GPU, jeśli SoC zawiera jeden. (To z łatwością przyśpieszy zużycie energii we wszystkich innych rzeczach, o których wspomniałem do tej pory!)

  • Urządzenia peryferyjne: pamięć flash, pamięć, wyświetlacz, ładowarki do akumulatorów i inne urządzenia.

+0

Wszystko jest w porządku, ale wspomniałem o samym procesorze, ponieważ końcowe zastosowanie tego SoC będzie głównie wykorzystywać procesor, a nie całą resztę. GPU nie będzie działało w ogóle, ponieważ system operacyjny nie ma GUI; dysk będzie używany tylko do rozruchu; pamięć i inne kontrolery będą miały niewielkie zastosowanie. Ostateczna aplikacja znacznie wykorzysta procesor, ponieważ program wykonuje głównie operacje matematyczne i zapisuje wynik na urządzeniu szeregowym USB. –

Powiązane problemy