Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
Clasicul si modernul C++ - cine e interesat?
#235
Posted 25 April 2019 - 08:40
E un singur spectru. Parte pozitiva si parte negativa.
Quote
nu oricum ti se blocheaza UI-ul / threadul din care le apelezi Hai, ca e clar deja, nu esti in stare si arunci cu heringi rosii. Renunta. Edited by parabellum, 25 April 2019 - 08:41. |
#236
Posted 25 April 2019 - 08:52
#237
Posted 25 April 2019 - 09:41
parabellum, on 25 aprilie 2019 - 08:40, said:
E un singur spectru. Parte pozitiva si parte negativa. Nu, pentru ca calculele sunt intr-un thread diferit. Hai, ca e clar deja, nu esti in stare si arunci cu heringi rosii. Renunta. N-ai raspuns la intrebarea esentiala: Ai avut initial sortarea fara thread-uri si ai ajuns la concluzia ca ar fi nevoie de threaduri? Numaru 2. Spui ca "Nu, pentru ca calculele sunt intr-un thread diferit.". Ce vrei sa spui? Ai threadul de GUI, apoi pornesti alt thread si in ala apelezi functia care face alte doua threaduri? Pentru ca daca o apelezi din threadul de GUI si ai join tot blocat ramine pina se termina threadurile alea. Motivul pentru care tu nu observi este ca se termina foarte repede, deci probabil n-ai nevoie de threaduri acolo |
#238
Posted 25 April 2019 - 10:03
va citesc apoi stau si ma intreb de ce nu puteti fi mai ingaduitori unii cu altii
|
#239
Posted 25 April 2019 - 10:32
Quote
Ai avut initial sortarea fara thread-uri si ai ajuns la concluzia ca ar fi nevoie de threaduri? Quote
Pentru ca daca o apelezi din threadul de GUI si ai join Habar nu ai despre ce e vorba acolo, dar iti dai cu parerea. Tipic. |
#240
Posted 25 April 2019 - 10:55
Nu speculez nimic, te-am intrebat ceva frumos si nu esti in stare sa raspunzi.
Ok, have it your way. M-am uitat pe blog. Citez "NRGComputationThread is the class that implements the computation thread for NRG, the calculations run in a different thread to avoid locking the UI." Bun, deci e fix cum am spus mai sus ("speculind", ipotezele sint exact identice cu faptele). Din GUI creezi un thread pentru calculat (NRGComputationThread), din el apelezi NRGAlgorithm:Calculate() care apeleaza in cele din urma functia din care ai pus tu exemplul cu threadurile, care mai creeaza inca 2 threaduri. Inca ramine intrebarea: Ai avut initial sortarea fara thread-uri si ai ajuns la concluzia ca ar fi nevoie de threaduri? Nu inteleg de ce ti-e atit de greu sa raspunzi, "da, inainte de a face cu threaduri dura x si a durat y" sau "nu" sau "nu, mi s-a parut ca ar fi o idee buna" sau whatever. De asemenea, vad ca si tu folosesti bine mersi pointeri raw, vezi sa nu iti sara in cap domnul cu C++ modern. |
#241
Posted 25 April 2019 - 11:35
Suntem foarte ingaduitori cand avem cu cine. Asta e aria Profesional Zone, sectiunea Programming, topic despre C++-ul modern. Nu zona de varsat frustrari.
Iata, inca o aberatie trantita asa, ca sa fie: Mosotti, on 25 aprilie 2019 - 10:55, said:
De asemenea, vad ca si tu folosesti bine mersi pointeri raw, vezi sa nu iti sara in cap domnul cu C++ modern. |
#242
Posted 25 April 2019 - 12:18
IonutYo, on 25 aprilie 2019 - 08:52, said: vai domn' director, aveti umilele mele scuze, n-am vrut sa va enervez. Ideea e - presupun - ca proiectele interesante nu prea vin in Romania. Avem totusi embedded, automotive, gaming - chestii d-astea. Si cel putin in unele cazuri se foloseste C++-ul modern. Din pacate in tara lui "merge si-asa" se prefera de multe ori solutia lenesului - lasa sa faca altii chestii complicate. Aplicatii care sa faca lucruri utile, intr-un mod eficient? Lasa sa le faca altii. Apropo, am revazut prezentarea lui Herb Sutter si-am dat de: "The going word at Facebook is that 'reasonably written C++ code just runs fast', which underscores the enormous effort spent at optimizing [censored] and [censored] code. Paradoxically, C++ code is more difficult to write than in other languages, but efficient code is a lot easier." - Andrei Alexandrescu Edited by TS030, 25 April 2019 - 12:18. |
#243
Posted 25 April 2019 - 12:33
Quote
Bun, deci e fix cum am spus mai sus Quote
o apelezi din threadul de GUI si ai join tot blocat ramine Edited by parabellum, 25 April 2019 - 12:51. |
#244
Posted 25 April 2019 - 13:03
Nici macar nu te obosesti sa citesti ce zic, citesti numai ce vrei tu
Quote Ai threadul de GUI, apoi pornesti alt thread si in ala apelezi functia care face alte doua threaduri? Pentru ca daca o apelezi din threadul de GUI si ai join tot blocat ramine pina se termina threadurile alea. Motivul pentru care tu nu observi este ca se termina foarte repede, deci probabil n-ai nevoie de threaduri acolo Partea boldata e ce ai tu, fix cum am presupus. Partea urmatoare era despre cazul in care apelai direct. Revenind la ce spuneai "Chiar si un procesor mai amarat, suficient de recent, are macar doua core-uri." Deja ai 4 threaduri... |
|
#245
Posted 25 April 2019 - 13:21
https://en.wikipedia...iki/Red_herring Cam asta faci. Nu o sa-ti explic care e situatia cu un astfel de program utilizat in mod realist (se retin mii de stari, spectrul poate ajunge si la ordin de sute de mii, calculele pe cluster pot dura saptamani), in detaliu, o sa-ti dau alt exemplu la care n-ar trebui s-o dai cotita nici tu.
Quote
fix cum am presupus. Quote
Deja ai 4 threaduri... Pentru ca tot nu-ti pica fisa, pofim alta autoplagiere: tasks[t] = std::async(std::launch::async, [t, samples, jitter, nx, ny, &camera, &scene, &randomEngines, distMax]()->std::vector<std::vector<Color>>https://github.com/aromanro/RayTracer Un calcul tipic cu asa ceva merge la sute de mii de raze/pixel, pentru imagini 4k. Acum, sa-ti vedem codul mult mai simplu cu c++ stil vechi. Fara divagari aiurea. Edited by parabellum, 25 April 2019 - 13:30. |
#246
Posted 25 April 2019 - 14:01
parabellum, on 25 aprilie 2019 - 13:21, said:
Ai presupus ca se face join si se blocheaza UIul, ceea ce e delir contrar realitatii. parabellum, on 25 aprilie 2019 - 13:21, said: Asa. Si? Continua, hai sa vedem cat poti sa te faci de ras. Pentru ca tot nu-ti pica fisa, pofim alta autoplagiere: tasks[t] = std::async(std::launch::async, [t, samples, jitter, nx, ny, &camera, &scene, &randomEngines, distMax]()->std::vector<std::vector<Color>>https://github.com/aromanro/RayTracer Un calcul tipic cu asa ceva merge la sute de mii de raze/pixel, pentru imagini 4k. Acum, sa-ti vedem codul mult mai simplu cu c++ stil vechi. Fara divagari aiurea. Omule, se vede in codul ala ca nu prea ai experienta serioasa in programare, n-ar trebui sa fii atit de batzos... Nu ai idee despre chestii minime de OOP, gen incapsulare. De ce ai facut astea publice in NRGAlgorithm? std::vector<Operator*> staticOperators; std::vector<SpectralOperator*> spectralOperators; De ce ar fi cit se poate de preferabil sa nu ai asa ceva si care sint cazurile in care se accepta variabile publice in clase? Si alta intrebare: de ce e o idee proasta a avea asa ceva in NRGAlgorithm Quote void SetResultsRetriever(ResultsRetrieverInterface *setd) { passData = setd; } si cum s-ar putea face mai bine? |
#247
Posted 25 April 2019 - 14:10
Quote
Vorbim de primul exemplu. Quote
Omule, se vede in codul ala ca nu prea ai experienta serioasa in programare, n-ar trebui sa fii atit de batzos... Nu ai idee despre chestii minime de OOP, gen incapsulare. De ce ai facut astea publice in NRGAlgorithm? Potim, explicatia e pe blog, de multa vreme: Quote
Since I’m not paid for them, do not expect commercial quality. I’ll write them fast and if they appear to work, it’s good enough for me. By the time I expose them in a blog post, I expect them to have plenty of bugs. Maybe I’ll fix them later. Maybe I’ll improve them. There is no warranty of any kind. To ease the work I might not write them as they should be written, on purpose. For example I’ll let class members exposed as public to be able to access them even if they shouldn’t be public. Anyway, that does not mean they will not work or that they will crash all over the places. It just means I can do much better but I’m not sure I want to spend the additional time for that. Often I’m using the IDE to create the class skeleton. The class might have a destructor even if it does not need it. Very often the rule of three (actually now the rule of five) will not be respected, although it’s a very good practice. Many objects in the projects will not be copied/assigned/moved around, so those constructors and operators are not really needed. Edited by parabellum, 25 April 2019 - 14:20. |
#248
Posted 25 April 2019 - 14:23
Lol. Bine ca stii tu. Sau macar ca esti dispus sa inveti cite ceva
|
#249
Posted 25 April 2019 - 15:01
Ok, hai s-o spun mai pe scurt, ca poate se gaseste vreun fraier sa-ti creada batutul de campii:
Proiectele alea sunt facute in timpul liber. Primele trei proiecte le-am scris in paralel, in vreo doua trei saptamani, lucru catre vreo doua ore, seara. Pe blog, intre prima si a doua postare e un interval de sub o saptamana, apoi de vreo 3 zile pentru urmatoarea, cand deja aveam nrg functional. Open-hub estimeaza (total aiurea) aproximativ cate un 'an effort' pentru fiecare. Exemplu: https://www.openhub..../estimated_cost (adica pentru primele trei, cam trei ani in total). Sigur ca pentru a avea o asemenea productivitate, a trebuit sa renunt la ceva. Ala-i cod cu care eu produc functionalitate in cateva ore, pe care o produc altii in luni sau ani (sau altii niciodata, pentru ca pur si simplu nu-i duce capul). N-as avea niciodata pretentia ca e perfect. Problema este ca daca te apuci sa faci pe puristul si sa zicem vrei sa respecti de-astea: https://github.com/i...reGuidelines.md iti ia o gramada de timp. Nu sunt dispus sa lucrez pe gratis atat. Pur si simplu. Nu sunt prea dispus nici macar sa lucrez de patru ori mai mult, suplimentar, pentru a mai adauga 20% la functionalitate, desi aia e mult mai importanta. Si apropo de lunile alea, nu o zic eu. Salt la proiectul DFT, de urmarit cursurile, la un moment dat explica ala acolo: 'months of development'. Pentru echipe intregi. Cat despre criticile tale, esti un anonim. Dupa ce incerci sa faci, nu prea sugerezi o inteligenta deosebita. Asa ca valoarea lor e fix egala cu zero (de fapt, negativa, dupa cum explicam mai sus). Tu, versus unul care apreciaza proiectul: http://www.cs.sandia.gov/~rmuller/ Lead la pyquante, Sandia Laboratories. Se poate verifica, a dat o steluta la proiect. Cine esti tu, din nou? Serios, daca iti vedeam codul miraculos pe GitHub, poate ca discutam altfel. PS M-am prins care-i 'problema' ta cu block-ul (de fapt nu e o problema, dar na, asa cred unii care n-au idee cum functioneaza threadurile alea), am modificat ca sa ai si tu o placere. Modificarea mai importanta e cu async-ul, ca ala are bunul obicei sa faca thread pooling, dar si aia conteaza doar in masura in care se folosesc stari putine. In mod realist, se folosesc multe. Programul ala e o 'jucarie', pe de-ala serios am scazut timp de rulare de la ore la secunde pe run simplu, de test (din nou, calculele realiste pot dura saptamani, pe cluster). Avand treaba cu de-astea: https://en.wikipedia...an_coefficients Sunt sigur ca se gaseau 'puristi' care sa comenteze si acolo, desi codul lor nici nu facea ce se intentiona, ce sa mai vorbim de performanta. |
|
#250
Posted 25 April 2019 - 15:45
parabellum, on 25 aprilie 2019 - 15:01, said:
Cat despre criticile tale, esti un anonim. Dupa ce incerci sa faci, nu prea sugerezi o inteligenta deosebita. Asa ca valoarea lor e fix egala cu zero (de fapt, negativa, dupa cum explicam mai sus). Tu, versus unul care apreciaza proiectul: http://www.cs.sandia.gov/~rmuller/ Lead la pyquante, Sandia Laboratories. Se poate verifica, a dat o steluta la proiect. Cine esti tu, din nou? Serios, daca iti vedeam codul miraculos pe GitHub, poate ca discutam altfel. Cat despre "Lead la pyquante" e de notorietate ca musterii ce se ocupa de "stiinta" si "cercetare" sunt muci la programare. Iar codul acelui musteriu confirma. Iei spre exemplu cod de aici: https://github.com/r...2/basis/cgbf.py si-l bagi aici: http://www.pylintonline.com/pylint Si vezi cate balarii are codul, inclusiv greseli de non-programator ce se apuca sa utilizeze literele alfabetului pe post de variabile din plin si la plesneala. Da nah, voi va puteti bate pe umeri intre voi... |
#251
Posted 25 April 2019 - 16:02
Ce-ar fi ca voi doi sa va deschideti un topic separat, in care sa va luptati cu programatorii, sa le disecati codul si sa faceti diverse afirmatii fara a fi capabili sa aratati o varianta mai buna?
Sunt convins ca veti avea foarte multi doritori. In acest topic, thread si async (care-s doar varful aisbergului) reprezinta niste aditii importante la C++, si elemente ale C++-ului modern. Multithreading portabil si facil. |
#252
Posted 25 April 2019 - 16:03
Vezi ca raspunsul a urmat unor atacuri la persoana. Sau alea sunt ok? Dar ale tale?
Cat despre autoritate, nu sunt o autoritate. Sunt simplu unul care poate furniza verificari experimentale ca a facut ceva functional. Spre deosebire de celalalt. Spre deosebire si de tine, cel mai probabil. Quote
Cat despre "Lead la pyquante" e de notorietate ca musterii ce se ocupa de "stiinta" si "cercetare" sunt muci la programare. Quote
Iar codul acelui musteriu confirma. Iei spre exemplu cod de aici Acum, uimeste-ne tu cu ceva mai bun. Opera ta. Si dupa aia, vorbim cu cei de la Sandia sa-l dea afara si sa te angajeze pe tine, tu evident esti genial si stii programare la perfectie: Quote
National Strategic Computing Initiative Worked on the NSCI with DOD, DOE, NSF, OSTP, OMB, NIST, IARPA. Led workshops exploring impact of foreign HPC on national and economic security. Initiated programs developing novel hardware and software paradigms for heterogeneous computing. Edited by parabellum, 25 April 2019 - 16:19. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users