Jo co mi akorat prijde zvlastni je, ze protoze to spoustim na serveru co ma 20 jader, tak je to celkove celkem pomale a pouziti vice vlaken to dokonce trosku prodluzuje. Tzn. je to proto, ze s tou pameti se neda uz pracovat rychlejc?
Příspěvky odeslané z IP adresy 158.196.194.–
Jiri K.
Jiri K.
Dobrý den,
bylo mi řečeno učitelem, že pokud udělám něco takového:
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int count=0;
omp_set_num_threads(5);
int *inThreadCount = new int[25];
for(int i = 0; i < 25; i++)
inThreadCount[i] = 0;
#pragma omp parallel for
for(int i = 0; i < 1000000000; i++)
{
int thNum = omp_get_thread_num();
if((thNum == 0) && (count % 1000000 == 0))
{
std::cout << count << "\r";
}
Class *trida = new Class();
delete trida;
inThreadCount[thNum] += 1;
if(inThreadCount[thNum] % 100000 == 0)
{
#pragma omp atomic
count += inThreadCount[thNum];
inThreadCount[thNum] = 0;
}
}
getchar();
return 0;
}
class Class
{
private:
double *a;
public:
Class()
{
a = new double[100000];
a[0] = 10;
}
~Class()
{
delete a;
}
};
Tak se prý nebude stačit uvolňovat paměť a program spadne. Tak jsem to tedy zkusil udělat, pro jistotu ve dvou vlaknech aby to bylo rychlejsi... a program nejak spadnout nechce, delam neco spatne? :-)
Jde o to, ze to byl argument proto, proc pouzivat memory pool, tak me to zatim nejak nepresvedcilo :-)