Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem c++ více vláken, stejná cache

#include <iostream>
#include <stdio.h>
#include <pthread.h>
#include <time.h>

#define THREADS_NUMBER 4

using namespace std;


pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;
int x = 0;

//vlakno
void * func(void * nic){
    while(x < 1000000){
        pthread_mutex_lock(&mx);
        x = x + 1;
        pthread_mutex_unlock(&mx);
    }
}

// The main progam.
int main() {
    clock_t t1,t2;
    t1=clock();
    //vytvoreni vlaken
    pthread_t main_thread[THREADS_NUMBER];
    for(int i = 0; i < THREADS_NUMBER; i++){
        pthread_create(&main_thread[i], NULL, &func, (void*)&x);
    }
    //cekani na dokonceni prace vlaken
    for(int i = 0; i < THREADS_NUMBER; i++){
        pthread_join(main_thread[i], NULL);
    }
    t2=clock();
    cout << ((float)t2-(float)t1)  << endl;
    return 0;
}
Příklad kódu na kterým je to nejvíce vidět.

pokaždé jsou v programu 4 vlákna, všechny udělají stejný počet operací, ale pokud program pustíte na jednom jádře, tak bude výrazně rychlejší než když povolíte všechny jádra. (správce úloh >> podrobnosti >> spřažení >> jedno jádro pro příkazovej řáek ze kterýho to budete spouštět.)


Asi jsem se minule někde upsal, ale myslel jsem to tak, že každé jádro má vlastní cache.
Když tedy běží čtyři vlákna na jednom jádře procesoru - sdílí stejnou cache.
Když běží čtyři vlákna na čtyřech jádrech procesoru - mají každou svoji vlastní cache.




Ještě k tomu, když bych snad vytvářel vlákna nějak špatně, a kvůli tomu by se to zpomalilo. Proč to zpomalení není vidět v případě, kdy program běží na jednom jádře procesoru (jedna cachce pro všechny vlákna) a vytváří 10 000 vláken ??

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny