tukamon Opublikowano 19 Marca 2007 Zgłoś Opublikowano 19 Marca 2007 Poszukaj, w necie jest kompilator wydany przez intela specjalnie do roboty z procami wielojadrowymi, moze to pomoze ubic :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
greg505 Opublikowano 20 Marca 2007 Zgłoś Opublikowano 20 Marca 2007 na moim (ale ustawiony na 2.0) przeszlo w 9:50 uzycie procka na tym programie wahalo sie od 30-50% Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 21 Marca 2007 Zgłoś Opublikowano 21 Marca 2007 dobra. mam kod mojego bardzo zaawansowanego programu ;) #include <cstdlib>#include <iostream>#include <windows.h>void main (void){long double a,b,c,d; int t1, t2, h, m, s; t1=GetTickCount();for (a = 1; a <= 1024000; a++) { b=a; c=a * 24 * a; d=a * 102400 / 3; std::cout << a * b << std::endl; std::cout << a * c << std::endl; std::cout << a * d << std::endl; std::cout << c * d << std::endl; if(a&&b==2&&c==9||a==2&&b||c!=2&&c>0){} } std::cout << "Test passed.\n" << std::endl;t2=GetTickCount() - t1;s = t2 / 1000; m = (s / 60) % 60;h = s / 3600;s = (t2 / 1000) - (60 * m);std::cout << h << std::endl; std::cout << m << std::endl; std::cout << s << std::endl; system("Pause");} *nie smiac sie ;) no i jest problem. bo gdy przed petla ustawilem zeby szlo w REALTIME to i tak obciaza antka @ 2.5GHz max w 30% .. moglby ktos podac cos prostego i krotkiego obciazajacego mozno procesor? :( Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
hary Opublikowano 21 Marca 2007 Zgłoś Opublikowano 21 Marca 2007 (edytowane) spróbuj zaangażować oprócz jednostek stałoprzecinkowych także zmiennoprzecinkowe procesora, czyli zapodaj w programie jakieś obliczenia na float'ach. Edytowane 21 Marca 2007 przez hary Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 21 Marca 2007 Zgłoś Opublikowano 21 Marca 2007 sorki, ale co to sa te floaty i jak je stosowac? ;) ja sie dopiero ucze i ten program to jest wlasnie takie cos w ramach nauki ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
hary Opublikowano 21 Marca 2007 Zgłoś Opublikowano 21 Marca 2007 (edytowane) 'float' zamiast np. 'int' stawiasz deklarując zmienną. edit: a w sumie masz w kodzie 'long double' którego wcześniej nie zauważyłem a to jest zmiennoprzecinkowa wiec juz nie ważne (tak to jest jak się nie czyta tylko patrzy) :P Edytowane 21 Marca 2007 przez hary Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 22 Marca 2007 Zgłoś Opublikowano 22 Marca 2007 aha... wiec rozumiem ze nie dawac tego float'a ? ;) wiec jakimi obliczeniami mozna go jeszcze pomeczyc? :( Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
MeHow Opublikowano 22 Marca 2007 Zgłoś Opublikowano 22 Marca 2007 Słuchaj, wydaje mi się, że problemem może być cout, który zaczyna wypluwać do konsoli swoje dane i wtedy prawdopodobnie proces zostaje wywłaszczony. Jak chcesz zrobić rzeźnię, to po prostu forkuj proces pare razy i potem wiooo, na kazdym procesie taka petla. Jestem pewien, ze zasoby zostana uzyte w 100%. Ew, uzyj watkow. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 25 Lipca 2007 Zgłoś Opublikowano 25 Lipca 2007 (edytowane) Jakis czas temu program osiagnal wersje finalna. Juz nic wiecej przy moich umiejetnosciach nie wykombinuje. Jestem w pelni swiadomy tego, ze moj program nie potrafi pokazac roznicy wydajnosci pomiedzy prockami (a przynajmniej nie dokladnie), ale jestem z niego dumny ;) Jesli ktos ma czas i ochote to prosil bym o zassanie go, i zrobienie testu. Nastepnie albo przez PM, albo lepiej tutaj napisac na jakim procku bylo testowane i jaki wynik programik wyplul ;) XCPU 1.2 ;) Edytowane 25 Lipca 2007 przez xacti Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Keel Opublikowano 25 Lipca 2007 Zgłoś Opublikowano 25 Lipca 2007 U mnie na Sempie s754 2.4GHz wykonywało się 2min 41sec. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 25 Lipca 2007 Zgłoś Opublikowano 25 Lipca 2007 2:21 na Venice @ 2.7GHz Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 26 Lipca 2007 Zgłoś Opublikowano 26 Lipca 2007 (edytowane) U mnie na A64@2.4GHz robilo sie 2:40 ;) Edytowane 26 Lipca 2007 przez xacti Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
MeHow Opublikowano 26 Lipca 2007 Zgłoś Opublikowano 26 Lipca 2007 (edytowane) udostepnij kod. 5m18s - 1700+ T-bred Edytowane 26 Lipca 2007 przez MeHow Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 26 Lipca 2007 Zgłoś Opublikowano 26 Lipca 2007 Nie! Bo chce na tym zarobic. :P /Tylko nie smiac sie. :lol: » Naciśnij, żeby pokazać/ukryć tekst oznaczony jako spoiler... « XCPU: ////////////////////////////////////////XCPU 1.2 (c) xacti///Source Code/////////////////////////////////////#include <cstdlib>#include <iostream>#include <windows.h>#include <cmath>#include "progress.h"int me ();int main (){ me ();}int me (){ long double a,b,c,d,g,z,i; int t1,t2,h,m,s,e,f,k,x,x2,w; progress test; x=1; std::cout << "1 - Test" << std::endl; std::cout << "2 - Exit" << std::endl; std::cin >> w; switch (w) { case 1: system("cls"); std::cout << "Test" <<std::endl; t1=GetTickCount();for (k = 1; k<=1; k++){for (a = 1; a <= 1024000000; a++) { b=a; c=a * 24 * i; d=(i * 102400 / 3) * (c / 4); e+2; f=(e * e) / 4; a * b; a * c; a * d; c * d; e * c; e * f; f / e; if(a&&b==2&&c==9||a==2&&b||c!=2&&c>0){} for (g = 1; g <= 16; g++) { g=(a * c * d) / f; z=g / a; i=(g * z) / f; if(g&&b==10&&z==2||i==2&&c||g!=2&&d>2){} } x++; if(x % 10240000 == 0) { test.draw(x/10240000,0); } } } std::cout << "Test passed.\n" << std::endl;t2=GetTickCount() - t1;s = t2 / 1000; m = (s / 60) % 60;h = (m / 60);s = (t2 / 1000) - (60 * m);floor(h);m = m - (60 * h);std::cout << h<< "h " << m<< "m "<< s<< "s "<< std::endl;std::cout << std::endl;system("Pause");system("cls");me ();break; case 2:system("cls");std::cout << "XCPU 1.2 (c) xacti"<< std::endl;std::cout<< std::endl;std::cout<< std::endl; system("Pause"); break; default: system("cls"); me (); break; } } progress.h : ////////////////////////////////////////////////File: progress.h//Version: 1.0//////////////////////////////////////////////#ifndef PROGRESS_H_#define PROGRESS_H_#include <conio.h>#include <stdio.h>class progress{ public: int draw(int a,int b=0) {if(b==1){ printf ("%c", '['); for(int i=0;i<a;i++) { if(i%2) { printf ("%c", '='); } } printf ("%c " , ']'); } printf("%d", a); printf("%s\r", "%"); }};#endif Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
MeHow Opublikowano 26 Lipca 2007 Zgłoś Opublikowano 26 Lipca 2007 błagam, precz z tym g... :| Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 26 Lipca 2007 Zgłoś Opublikowano 26 Lipca 2007 (edytowane) błagam, precz z tym g... :|O co ci chodzi? Nie podoba sie tobie program? Spojrz na to: Jestem w pelni swiadomy tego, ze moj program nie potrafi pokazac roznicy wydajnosci pomiedzy prockami (a przynajmniej nie dokladnie), ale jestem z niego dumny ;) Czy to, ze moj program praktycznie do niczego sie nie nadaje, zostal napisany w celach edukacyjnych, pozwala tobie pisac takie rzeczy? Obojetnie jakie bzdury tam nawypisywalem, to napracowalem sie nad tym mocno i prosilbym, abys uszanowal moja prace. Jesli cos jest zle to po prostu powiedz. Edytowane 26 Lipca 2007 przez xacti Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 28 Lipca 2007 Zgłoś Opublikowano 28 Lipca 2007 imowystarczyło zrobić zwykłą pętlę z instrukcjami goto zakleszczonymi 50 razy :) cache procka na pewno by się zapocił... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 28 Lipca 2007 Zgłoś Opublikowano 28 Lipca 2007 (edytowane) Mozliwe ;) Ogolnie nie wiem o co chodzi MeHow... :P @PelzaK A moglbys sciagnac go i przetestowac? ;) Edytowane 28 Lipca 2007 przez xacti Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 28 Lipca 2007 Zgłoś Opublikowano 28 Lipca 2007 (edytowane) a jak mi zaszyłeś wirusa jakiego w nim i wykradniesz hasła? :D.. już raz se włączyłem program od sąsiada... że nazwiska nie wypowiem zero700 :D i cieszyłem się szybkim formatem dysku :lol: - ale to było za czasów 98 :) 3:29 @ venice 1933MHz :) Edytowane 28 Lipca 2007 przez PelzaK Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 29 Lipca 2007 Zgłoś Opublikowano 29 Lipca 2007 Aha, wiec jednak ten program cos tam robi ;) Potrzebuje jeszcze jakiegos 2 rdzeniowca, zeby zobaczyc co sie wtedy dzieje ;) A i pentium 4 z ht, bo pamietam, ze cos szopki byly i tylko polowe procka obciazalo ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 29 Lipca 2007 Zgłoś Opublikowano 29 Lipca 2007 no bo zwykły program obciażą połowę procka.. taka jest zaleta 2 rdzeniowych... Program Ci ssa niby 100% a tu masz jeszcze połowę proca wolnego żeby robić co innego :). Przykładowo, visual studio 2k5 potrafi kompilować kilka projektów na raz, w przypadku np kompilacji 2 projektów na 2 rdzeniach wykorzystane są oba.. ale jeśli kompilujemy jeden projekt, lub sobie nie życzymy wykorzystania 2 to będzie używany tylko 1... To jest dobre gdy robimy coś obciążającego i jeszcze chcemy pracować na kompie Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 29 Lipca 2007 Zgłoś Opublikowano 29 Lipca 2007 Wiem, i to jest wlasnie problem, bo moja wiedza nie pozwala na odpalenie tego programu na 2 rdzeniach :P tukamon cos wspominal o kompilatorze od intela, ale nie moglem go skonfigurowac z moim kompilatorem, wiec zostanie tak jak jest. ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
TT05 Opublikowano 15 Sierpnia 2007 Zgłoś Opublikowano 15 Sierpnia 2007 (edytowane) Prosty benchmark Wyniki dla athlona xp 2400+ to: whetstone took: 4.14 secs for 2414 MFLOPS (w/ math lib) whetstone took: 0.47 secs for 21278 MFLOPS (w/o math lib) /* * Whetstone benchmark in C. This program is a translation of the * original Algol version in "A Synthetic Benchmark" by H.J. Curnow * and B.A. Wichman in Computer Journal, Vol 19 #1, February 1976. * * Used to test compiler optimization and floating point performance. * * Compile by: cc -O -s -o whet whet.c * or: cc -O -DPOUT -s -o whet whet.c * if output is desired. */#include "stdio.h"#include "math.h"#ifndef __GNUC__extern "C" int __stdcall timeGetTime();#else#include <sys/time.h>#include <sys/resource.h>#endif/* *Original double ITERATIONS declared as integer to make compatible with Delphi *const double ITERATIONS = 1000.0; // 100 Million Whetstone instructions */const int ITERATIONS = 100000; /* 100 Million Whetstone instructions */bool useMathLib = true;void run( void );void pa( double e[4] );void p3( double x, double y, double *z );void p0( void );#ifdef POUTvoid pout( int n, int j, int k, double x1, double x2, double x3, double x4 );#endifdouble second();double x1, x2, x3, x4, x, y, z, t, t1, t2;double e1[4];int i, j, k, l, n1, n2, n3, n4, n6, n7, n8, n9, n10, n11;int main(int argc, char* argv[]){run: double s = second(); run(); s = second() - s; if(useMathLib == true) { printf("whetstone took: %2.2f secs for %2.0f MFLOPS (w/ math lib)\r\n",s,(ITERATIONS / 10.0) / (s)); useMathLib = false; goto run; } else { printf("whetstone took: %2.2f secs for %2.0f MFLOPS (w/o math lib)\r\n",s,(ITERATIONS / 10.0) / (s)); }}void run( void ){ /* initialize constants */ t = 0.499975; t1 = 0.50025; t2 = 2.0; /* set values of module weights */ n1 = 0 * ITERATIONS; n2 = 12 * ITERATIONS; n3 = 14 * ITERATIONS; n4 = 345 * ITERATIONS; n6 = 210 * ITERATIONS; n7 = 32 * ITERATIONS; n8 = 899 * ITERATIONS; n9 = 616 * ITERATIONS; n10 = 0 * ITERATIONS; n11 = 93 * ITERATIONS;/* MODULE 1: simple identifiers */ x1 = 1.0; x2 = x3 = x4 = -1.0; for(i = 1; i <= n1; i += 1) { x1 = ( x1 + x2 + x3 - x4 ) * t; x2 = ( x1 + x2 - x3 - x4 ) * t; x3 = ( x1 - x2 + x3 + x4 ) * t; x4 = (-x1 + x2 + x3 + x4 ) * t; }#ifdef POUT pout(n1, n1, n1, x1, x2, x3, x4);#endif/* MODULE 2: array elements */ e1[0] = 1.0; e1[1] = e1[2] = e1[3] = -1.0; for (i = 1; i <= n2; i +=1) { e1[0] = ( e1[0] + e1[1] + e1[2] - e1[3] ) * t; e1[1] = ( e1[0] + e1[1] - e1[2] + e1[3] ) * t; e1[2] = ( e1[0] - e1[1] + e1[2] + e1[3] ) * t; e1[3] = (-e1[0] + e1[1] + e1[2] + e1[3] ) * t; }#ifdef POUT pout(n2, n3, n2, e1[0], e1[1], e1[2], e1[3]);#endif/* MODULE 3: array as parameter */ for (i = 1; i <= n3; i += 1) pa(e1);#ifdef POUT pout(n3, n2, n2, e1[0], e1[1], e1[2], e1[3]);#endif/* MODULE 4: conditional jumps */ j = 1; for (i = 1; i <= n4; i += 1) { if (j == 1) j = 2; else j = 3; if (j > 2) j = 0; else j = 1; if (j < 1 ) j = 1; else j = 0; }#ifdef POUT pout(n4, j, j, x1, x2, x3, x4);#endif/* MODULE 5: omitted *//* MODULE 6: integer arithmetic */ j = 1; k = 2; l = 3; for (i = 1; i <= n6; i += 1) { j = j * (k - j) * (l -k); k = l * k - (l - j) * k; l = (l - k) * (k + j); e1[l - 2] = j + k + l; /* C arrays are zero based */ e1[k - 2] = j * k * l; }#ifdef POUT pout(n6, j, k, e1[0], e1[1], e1[2], e1[3]);#endif/* MODULE 7: trig. functions */ if( useMathLib ) { x = y = 0.5; for(i = 1; i <= n7; i +=1) { x = t * atan(t2*sin(x)*cos(x)/(cos(x+y)+cos(x-y)-1.0)); y = t * atan(t2*sin(y)*cos(y)/(cos(x+y)+cos(x-y)-1.0)); } }#ifdef POUT pout(n7, j, k, x, x, y, y);#endif/* MODULE 8: procedure calls */ x = y = z = 1.0; for (i = 1; i <= n8; i +=1) p3(x, y, &z);#ifdef POUT pout(n8, j, k, x, y, z, z);#endif/* MODULE9: array references */ j = 1; k = 2; l = 3; e1[0] = 1.0; e1[1] = 2.0; e1[2] = 3.0; for(i = 1; i <= n9; i += 1) p0();#ifdef POUT pout(n9, j, k, e1[0], e1[1], e1[2], e1[3]);#endif/* MODULE10: integer arithmetic */ j = 2; k = 3; for(i = 1; i <= n10; i +=1) { j = j + k; k = j + k; j = k - j; k = k - j - j; }#ifdef POUT pout(n10, j, k, x1, x2, x3, x4);#endif/* MODULE11: standard functions */ if( useMathLib ) { x = 0.75; for(i = 1; i <= n11; i +=1) x = sqrt( exp( log(x) / t1)); }#ifdef POUT pout(n11, j, k, x, x, x, x);#endif}void pa( double e[4] ){/* remove register declaration for compatibility with Delphi register int j;*/ int j; j = 0; lab: e[0] = ( e[0] + e[1] + e[2] - e[3] ) * t; e[1] = ( e[0] + e[1] - e[2] + e[3] ) * t; e[2] = ( e[0] - e[1] + e[2] + e[3] ) * t; e[3] = ( -e[0] + e[1] + e[2] + e[3] ) / t2; j += 1; if (j < 6) goto lab;}void p3(double x, double y, double *z){ x = t * (x + y); y = t * (x + y); *z = (x + y) /t2;}void p0( void ){ e1[j] = e1[k]; e1[k] = e1[l]; e1[l] = e1[j];}#ifdef POUTvoid pout( int n, int j, int k, double x1, double x2, double x3, double x4){/* printf("%6d%6d%6d %5e %5e %5e %5e\n", n, j, k, x1, x2, x3, x4);*/ printf("%6d%6d%6d %5e %5e %5e %5e\n", n, j, k, x1, x2, x3, x4);}#endif#ifndef __GNUC__double second(){ return((timeGetTime()/1000.0));}#elsedouble second(){ struct rusage ru; getrusage(RUSAGE_SELF,&ru); return((ru.ru_utime.tv_sec+ru.ru_stime.tv_sec) + ((ru.ru_utime.tv_usec+ru.ru_stime.tv_usec)/1.0e6));}#endif EDIT: Nie wiem jak jest teraz, moze sie cos zmienilo w jezyku c++, jednak jeszcze jakis czas temu aby wykorzystywac watki w programach trzeba bylo uzywac biblioteki ZThread. Jak bede mial czas to napisze prosty przyklad z kilkoma watkami przy uzyciu tej biblioteki. EDIT2: Tak sobie mysle ze obciazyc dwa rdzenie to najlatwiej bedzie wykorzystujac jave... Watki sie tam latwo tworzy i nie trzeba zewnetrznych bibliotek. EDIT3: Przyklad w javie: Plik SimpleThread.java class SimpleThread extends Thread { public void run() { double time1,time2,a; time1 = System.currentTimeMillis(); // pobranie czasu przed wejsciem do glownej petli for (int i = 0; i < 1000000; i++) { // Tutaj mozna wladowac cos co ma liczyc np. algorytm na liczenie liczb pierwszych a=i/2; a=i*a; } time2 = System.currentTimeMillis(); // pobranie czasu po skonczeniu glownej petli time2=time2-time1; System.out.println("Czas: "+ time2); //wyswietlenie czasu} } Plik main.java class main { public static void main (String[] args) { new SimpleThread().start(); //uruchomienie watku 1 new SimpleThread().start(); //uruchomienie watku 2 }} Aby skompilowac przyklad potrzeba java JDK. Kompilujemy poleceniem: javac main.java Po kompilacji uruchamiamy: java main Aplikacja w sumie nic powaznego nie robi, uruchamia dwa watki ktore cos tam mnoza. Na koniec podawany jest czas trwania kazdego watku. Edytowane 16 Sierpnia 2007 przez TT05 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...