sfaturi aplicatie web vc++ 2008

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: sfaturi aplicatie web vc++ 2008

Post by Dark » 14 Nov 2008, 19:47

Si de ce e neaparat sa fie algoritmul prost? Nu exista cazuri in care implementarea unui algoritm optim sa mearga mai incet decit ar trebui pentru ca, de exemplu, se foloseste un compilator vai de capul lui si un mediu de executie care ignora 3 sferturi din tranzistorii din CPU? Ce-i cu generalizarea aia cu "daca merge prost in C# va merge prost si in C++/ASM"? Era intr-un context mai larg la care eu n-am acces, cum ar fi ca stii ce algoritm foloseste viorel?



User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: sfaturi aplicatie web vc++ 2008

Post by Silviu Ardelean » 14 Nov 2008, 22:54

Dark, no offence, iti recomand si eu sa mai citesti odata toate posturile de pe acest thread (in special ultima fraza a lui Dragos) si sa intelegi pana la urma ce zice Dragos.
Din experienta, ce zice el, mi se pare foarte corect si as rezuma: daca algorimul e lent si/sau prost scris, atunci acel algorim scris chiar in ASM, nu va merge mai bine decat unul scris cu o logica corecta in C# .

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: sfaturi aplicatie web vc++ 2008

Post by Ovidiu Cucu » 15 Nov 2008, 00:16

Dragos Cojocari wrote:[...] daca merge in 30 de minute in C# nu va reusi nimeni sa il faca sa mearga in 5 secunde in ASM.
"Nu va reusi nimeni" e putin cam mult spus.
"Nu va reusi marea majoritate" (scuzati pleonasmul) e mai aproape de realitate. ;)

Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: sfaturi aplicatie web vc++ 2008

Post by Dark » 15 Nov 2008, 02:51

Silviu Ardelean wrote:daca algorimul e lent si/sau prost scris, atunci acel algorim scris chiar in ASM, nu va merge mai bine decat unul scris cu o logica corecta in C# .
Da, asta e foarte clar pentru orice om care a scris vreodata hello world. D-aia am si asociat ideea cu "iarna nu-i ca vara", e la mintea cocosului ca un algoritm patratic va merge mai prost in aproape toate cazurile decit un algoritm NlogN. Totusi, Dragos a spus ca daca ceva merge prost in C#, va merge prost in orice. Eroarea (evidenta, credeam eu) prezenta in aceasta teorie e ca dupa ce alegi algoritmul optim, poate sa mearga prost in C# si mai bine in C++ (sau ASM sau mai stiu eu ce); cu un ordin de magnitudine mai bine, in unele cazuri. Sigur, cind N ala tinde la infinit diferenta de performanta dintre implementari scade spre neglijabil, dar nu traim pe hirtie.

In caz ca nici acum nu m-am facut inteles, iata o formulare alternativa: alegerea algoritmului e importanta, dar nu-i atit de importanta incit sa nu mai conteze deloc implementarea, mediul de executie, compilatorul si restul chestiilor astora care exista in practica. In general e cam imposibil sa obtii un spor de performanta de 360x schimbind limbajul, ca in afirmatia lui Dragos, dar 10x se poate dupa ce ai ales algoritmul optim, i.e. atunci cind scormonirea prin Cormen nu te va mai ajuta nici un pic. Daca te intereseaza performanta, 10x e destul de important, as zice eu. De altfel chiar si 2x s-ar putea sa sune bine.

Dubla 3: in post-ul initial viorel spune ca vrea sa implementeze un algoritm in C++, pentru ca (se teme ca) ii merge prost in C#. Vine Dragos si-i spune sa nu-si bata capul, ca oricum daca merge prost in C# merge prost si-n C++. Pai e frumos, stimatilor, sa mintiti poporul cu internetul? Acum sigur ca putem discuta saptamini in sir despre ce ne inchipuim ca face viorel, despre faptul ca s-ar putea sa puna carul in fata boilor si intii trebuie sa incerce sa vada daca merge prost, despre posibilitatea de a avea bottleneck in DB, despre oamenii care optimizeaza fara profiler si asa mai departe. Totusi, ce ma sperie pe mine e ca din start elanul e retezat cu "daca merge prost in C# va merge prost oricum", o afirmatie falsa si subversiva.

Sau poate-mi scapa mie ceva?

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: sfaturi aplicatie web vc++ 2008

Post by neagu_laurentiu » 15 Nov 2008, 09:54

Va recomand un debugger ce stie sa incarce si executabile .NET (pe langa cele clasice) si astfel puteti vizualiza pe viu (la nivel .asm) cum se face un apel intr-o aplicatie .NET comparativ cu una clasica: http://www.smidgeonsoft.prohosting.com/ ... ugger.html

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: sfaturi aplicatie web vc++ 2008

Post by Ovidiu Cucu » 15 Nov 2008, 12:02

[ off-topic ]
Dark wrote:[...] mintiti poporul cu internetul [...]
Mintiti poporu' cu calculatoru' suna mai bine... :biggrin:

No, hai sa fim seriosi, atata cat se poate! ;)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: sfaturi aplicatie web vc++ 2008

Post by Silviu Ardelean » 15 Nov 2008, 12:41

Dark wrote:
Silviu Ardelean wrote:daca algorimul e lent si/sau prost scris, atunci acel algorim scris chiar in ASM, nu va merge mai bine decat unul scris cu o logica corecta in C# .
Vine Dragos si-i spune sa nu-si bata capul, ca oricum daca merge prost in C# merge prost si-n C++.
Sau poate-mi scapa mie ceva?
Exact... iarashi ti-a scapat ceva si ai concluzionat ca Dragos o tzine una fixa si buna. Sunt sigur ca el s-a referit la marea majoritate a proiectelor bazate de C#, la care, daca ai scris algoritmul ok in C# iti va satisface complet nevoile (fara a mai fi nevoie de o fuziune intre lumea managed si unmanaged). Bine-inteles, exista si situatii in care, nu ai incotro si trebuie sa faci aceasta legatura.

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: sfaturi aplicatie web vc++ 2008

Post by Dragos Cojocari » 15 Nov 2008, 13:39

Silviu Ardelean wrote:
Dark wrote:
Silviu Ardelean wrote:daca algorimul e lent si/sau prost scris, atunci acel algorim scris chiar in ASM, nu va merge mai bine decat unul scris cu o logica corecta in C# .
Vine Dragos si-i spune sa nu-si bata capul, ca oricum daca merge prost in C# merge prost si-n C++.
Sau poate-mi scapa mie ceva?
Exact... iarashi ti-a scapat ceva si ai concluzionat ca Dragos o tzine una fixa si buna. Sunt sigur ca el s-a referit la marea majoritate a proiectelor bazate de C#, la care, daca ai scris algoritmul ok in C# iti va satisface complet nevoile (fara a mai fi nevoie de o fuziune intre lumea managed si unmanaged). Bine-inteles, exista si situatii in care, nu ai incotro si trebuie sa faci aceasta legatura.
Exact. Ideea asta si e: inainte sa dai vina pe limbaj, sistemul de operare si mai stiu eu ce, verifica-ti codul. In 90% din cazuri problema e acolo si nu in alta parte. Si e foarte posibil ca daca rezolvi acea problema, performantele obtinute sa fie satisfacatoare in majoritatea cazurilor, deci sa nu mai fie nevoie de bridge-ul managed-unmanaged.

Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: sfaturi aplicatie web vc++ 2008

Post by Dark » 15 Nov 2008, 15:19

"Exact". Zece ani de experienta si Zen iti permit sa arunci generalitati gen "daca merge prost in C#, va merge prost si-n C++/ASM" pentru ca "90%" din programe oricum nu fac nimic cu CPU-ul. Baga sfatul generic cu "algoritmul e mai important", asezoneaza-l cu o platitudine despre codul prost care-i mai prost decit codul bun si gata, ai comunicat ceva. Ai dat un sfat care "probabil" (statistic) se potriveste cu intrebarea, deoarece "90%" din intrebarile de pe forumuri sint puse de incepatori care n-au inteles problema.

Continuati, continuati.

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: sfaturi aplicatie web vc++ 2008

Post by Dragos Cojocari » 15 Nov 2008, 15:29

Off topic Dark, cati ani ai?

Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: sfaturi aplicatie web vc++ 2008

Post by Dark » 15 Nov 2008, 16:03

On-topic, sub 10, nu e clar? Off-topic, de ce ma intrebi? Doresti sa continui linia cu "acum 10 ani gindeam si eu ca tine" in care autorul, trecut prin vicisitudinile vietii si meseriei, impartaseste sfaturi intelepte incepatorilor agitati si cu gura mare?

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: sfaturi aplicatie web vc++ 2008

Post by Dragos Cojocari » 15 Nov 2008, 16:07

Dark wrote:On-topic, sub 10, nu e clar? Off-topic, de ce ma intrebi? Doresti sa continui linia cu "acum 10 ani gindeam si eu ca tine" in care autorul, trecut prin vicisitudinile vietii si meseriei, impartaseste sfaturi intelepte incepatorilor agitati si cu gura mare?
Eram curios doar. :)

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: sfaturi aplicatie web vc++ 2008

Post by neagu_laurentiu » 17 Nov 2008, 03:17

Dragos Cojocari wrote:
neagu_laurentiu wrote:In release, cu optimizarile la maximum atit C# cat si C++/CLI & .NET executa bucla de nebun si pierde timpul pe cand C++ unmanaged se prinde ca am fost natarau si rezolva "ecuatia" dintr-o singura linie ;)
Pai in astfel de cazuri nu schimbi limbajul ci programatorul.
Eu schimb totusi limbajul :)
Dau un exemplu de cod mai complex:

Code: Select all

void xxx(_int64 n, _int64 m)
{
    double t = 0.0;
    for (__int64 j = 0; j < n; j++)
    {
       t /= 1000.0;
       for (__int64 i = 0; i < m; i++)
        {
           t += i / 999999.0;
           double d = t * t + i;
           double r = (t + d) / (200000.0 * (i + 1));
           t -= r;
        }
    }
    printf("%e\n",t);
}

int main(int argc, char* argv[])
{
    __time64_t t1,t2;
    _int64 n = _atoi64(argv[1]);
    _int64 m = _atoi64(argv[2]);

   _time64(&t1);
   xxx(n,m);
   _time64(&t2);
   printf("%d s\n",t2-t1);

   return 0;
}
si varianta C#:

Code: Select all

class Program
{
        public static void xxx(Int64 n, Int64 m)
        {
            double t = 0.0;

            for (Int64 j = 0; j < n; j++)
            {
                t /= 1000.0;

                for (Int64 i = 0; i < m; i++)
                {
                    t += i / 999999.0;
                    double d = t * t + i;
                    double r = (t + d) / (200000.0 * (i + 1));
                    t -= r;
                }
            }
            Console.WriteLine(t);
        }

        static void Main(string[] args)
        {
            DateTime t1, t2;
            Int64 n = Convert.ToInt64(args[0]);
            Int64 m = Convert.ToInt64(args[1]);
            t1 = DateTime.Now;
            xxx(n,m);
            t2 = DateTime.Now;
            System.Console.WriteLine("{0}", (t2 - t1).ToString());

            // reapelam ca sa excludem timpul pierdut de JIT pentru compilare nativa
            t1 = DateTime.Now;
            xxx(n,m);
            t2 = DateTime.Now;
            System.Console.WriteLine("{0}", (t2 - t1).ToString());
        }
}
Pe calculatorul meu, la un apel .exe 5 100000000 C# scoate 71s iar C++ 23s !

Post Reply