Wykonywanie algorytmu na dwa rdzenie
Ostatnio zmodyfikowano 2014-10-06 18:10
Hexbinary Temat założony przez niniejszego użytkownika |
Wykonywanie algorytmu na dwa rdzenie » 2014-10-04 15:26:21 Nie wiem ,czy to co tu napisze ma sens i czy to jest wykonalne, więc słuchajcie. Mam sobie takie coś i mam dwa rdzenie w procku. Chce zrobić by dwie pętle for(...) wykonywały się równocześnie(równolegle) tyle ,że jedna na każdy rdzeń. Czy C++/C umożliwia taką kontrole ?? Czy poprostu proc już automatycznie sobie dobiera części kodu domyślnie na rdzeń?? Mógłby mi ktoś wyjaśnić jak to działa. #include <iostream> #include <stdlib.h> #include <time.h> #define N 100000 using namespace std; int Rand( int mx, int mn ) { return rand() %( mx - mn + 1 ) + mn; } double obliczSekundy( clock_t czas ) { return static_cast < double >( czas ); } void czekaj( int iMilisekundy ) { clock_t koniec = clock() + iMilisekundy * CLOCKS_PER_SEC / 1000.0; while( clock() < koniec ) continue; } int main() { double difference; std::cout.setf( ios::fixed ); std::cout.precision( 128 ); clock_t start, end; int tab[ N ]; start = clock(); for( int i = 0; i < N / 2; ++i ) { tab[ i ] = Rand( 10, - 10 ); cout << " " << i; } cout << "\nBUMMMM!!\n"; czekaj( 5000 ); for( int i = N / 2; i < N; ++i ) { tab[ i ] = Rand( 10, - 10 ); cout << " " << i; } cout << "\n"; end = clock(); difference =( end - start ) /( double ) CLOCKS_PER_SEC; std::cout << "time: " << difference << "\n"; }
|
|
DejaVu |
» 2014-10-04 15:54:33 Da się to zrobić. Poczytaj o wielowątkowości. Tłumaczenie jak to zrobić nie ma sensu, bo poprawne pisanie wielowątkowości jest trudne nawet dla osób ze sporym obyciem w C++. Twój problem jest akurat prosty do rozwiązania bo nie wymaga synchronizacji danych między wątkami. Wystarczy, że weźmiesz pierwszy lepszy przykład związany z klasą std::thread. http://en.cppreference.com/w/cpp/thread/thread/join |
|
Monika90 |
» 2014-10-04 18:43:30 Chcesz używać dwóch rdzeni po to żeby wykonywać na nich funkcję czekaj(5000);?
A std::rand() wymaga synchronizacji, albo ta synchronizacja jest już wbudowana w rand, albo trzeba ją zrobić samemu - to zależy od implementacji. Oczywiście, najlepiej nie używać rand w ogóle. |
|
Hexbinary Temat założony przez niniejszego użytkownika |
» 2014-10-06 16:45:33 O dzięki za odpowiedź, te "czekaj(..)" to tak sobie tam oczywiście nie będzie go jak równolegle będą wykonywane operacje. Jak napisze kod to wrzucę go może tu. |
|
stryku |
» 2014-10-06 18:10:47 Poczytaj też o OpenMP. Może Ci się przyda. |
|
« 1 » |