Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wykonywanie algorytmu na dwa rdzenie

Ostatnio zmodyfikowano 2014-10-06 18:10
Autor Wiadomość
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.  
C/C++
#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 ); // CLOCKS_PER_SEC;
}
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 ) { // TO LICZY 1 Rdzeń
        tab[ i ] = Rand( 10, - 10 );
        cout << " " << i;
    } cout << "\nBUMMMM!!\n"; czekaj( 5000 );
    for( int i = N / 2; i < N; ++i ) { // To liczy 2 rdzeń
        tab[ i ] = Rand( 10, - 10 );
        cout << " " << i;
    } cout << "\n";
    end = clock(); //czas końca
    difference =( end - start ) /( double ) CLOCKS_PER_SEC;
    std::cout << "time: " << difference << "\n";
}
P-117920
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.

Frazy, które należy wpisać w wyszukiwarkę google:

http://en.cppreference.com/w​/cpp/thread/thread/join
P-117922
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.
P-117930
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.
P-118028
stryku
» 2014-10-06 18:10:47
Poczytaj też o OpenMP. Może Ci się przyda.
P-118030
« 1 »
  Strona 1 z 1