Jeśli piszesz oprogramowanie, w którym klient płaci za liczbę rdzeni procesora używanych przez oprogramowanie, jaki byłby najlepszy sposób osiągnięcia tego w kodzie C++? Moje dotychczasowe badania doprowadziły mnie do korzystania z SetProcessAffinityMask
w systemach Windows i sched_setaffinity
w systemach POSIX.Ustalanie liczby rdzeni procesowych za pomocą C++
Odpowiedz
Myślę, że znalazłeś najlepszą opcję. Ograniczanie liczby wątków nie jest dobrym pomysłem, jeśli chcesz wykorzystać możliwości procesorów wielowątkowych.
"gdzie klient płaci za liczbę rdzeni procesora" już oznacza, że NIE chcesz korzystać z tych możliwości, CHYBA, że klient płaci. – MSalters
To interesujące pytanie. Nie sądzę, że mam idealne rozwiązanie, ale ponieważ dotychczas nie było odpowiedzi, zaproponuj następujące:
Jeśli główny fragment pracy w twoim programie jest wykonywany przez jeden typ wątku, po prostu nie Zyskuje więcej wątków roboczych niż pozwalają na to licencje klienta. Ponieważ pojedynczego wątku nie można podzielić na wiele rdzeni, nakłada to sztywny limit.
(Nie sądzę, że ustawienie procesora Powinowactwo procesora jest drogą do wykonania, ponieważ może być łatwo zmienione w czasie wykonywania, ponieważ nie wymaga żadnej inżynierii wstecznej ani stałych modyfikacji systemu, obawiałbym się, że obejście to nie jest wystarczająco "złe", aby uniemożliwić nawet uczciwym klientom wypróbowanie go.)
Ustawianie przydziałów wątków może być również sposobem na to. Jeśli chodzi o ludzi zmieniających powinowactwo procesów w czasie wykonywania, pomyślałem, że od czasu do czasu sprawdzałem powinowactwo za pomocą 'GetProcessAffinityMask' i zgłaszałem wyjątek licencyjny (exit), jeśli zmieniło się od kiedy ustawiłem go w' main'. –
- 1. Ustalanie maksymalnej liczby grupowej w Doctrine
- 2. Ustalanie liczby wierszy repeatera w asp.net
- 3. Obniżanie wydajności przy zwiększaniu liczby rdzeni
- 4. Wyszukiwanie liczby rdzeni w języku Java
- 5. Ograniczenie liczby rdzeni używanych przez erlang
- 6. Zmiana liczby rdzeni podczas przetwarzania równoległego w R
- 7. Dodawanie większej liczby rdzeni do wirtualnej skrzynki sprawia, że aplikacje wolniej zaczynają od 16 rdzeni.
- 8. Ustalanie liczby miesięcy między dwoma datami przy użyciu kakao
- 9. C# zmienne ustalanie zakresu nie jest spójne?
- 10. Wyświetlanie liczby stron za pomocą ReportLab
- 11. Sprawdzanie poprawności liczby całkowitej za pomocą JSR303
- 12. Przyrost liczby w C#
- 13. Panda danych procesowych na skrzypce
- 14. Ustalanie kolejności ścianką ggplot
- 15. Podstawowe importowanie rdzeni (obejmuje)
- 16. Ustalanie zależności Piekło z kompozytorem
- 17. C++ format liczby szesnastkowej
- 18. C tylko znak liczby całkowitej
- 19. Jak odczytywać liczby oddzielone spacją za pomocą scanf
- 20. Wykryj liczbę rdzeni w oknach
- 21. C Złożone liczby w C++?
- 22. Ustalanie położenia klejnotów Ruby
- 23. Ustalanie uprawnień 2?
- 24. Ustalanie macierzy transformacji
- 25. Ustalanie stałości funkcji elementu
- 26. Ustalanie rozmiaru układów
- 27. Liczba procesorów/rdzeni w Perlu
- 28. Różne liczby odczytywania i zapisywania za pomocą cachegrind i callgrind
- 29. C++ Sprawdzanie liczby całkowitej.
- 30. Wykrywanie kolorów za pomocą C#
Prawda i szczegółową odpowiedź na swoje pytanie: [1]: http://stackoverflow.com/a/3082553/1848929 – hakiko
@hakiko To pytanie jest o znalezienie się, ile rdzeni istnieją ... – us2012
On Windows, powinieneś rzucić okiem na obiekty pracy: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684161(v=vs.85).aspx mogą zrobić dużo więcej w celu ograniczenia procesów niż powinowactwo. Ale mogą także ograniczyć powinowactwo: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686216(v=vs.85).aspx –