abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    dnes 12:44 | IT novinky

    Nizozemská vláda ve snaze šetřit a zvyšovat efektivitu s využitím umělé inteligence (AI) hodlá zrušit asi 25.000 pracovních míst ve státní správě. Cílem je postupně dosáhnout ročních úspor až 3,5 miliardy eur (85,2 miliardy Kč). Na konci loňského roku ve státní správě pracovalo rekordních 160.000 lidí. „Nemůžeme pokračovat v tom, co jsme dělali dosud,“ uvedl státní tajemník pro efektivní fungování vlády Eric van den Burg. „Proto

    … více »
    Ladislav Hagara | Komentářů: 6
    dnes 12:00 | IT novinky

    Příspěvek na blogu PRUSA 3D představuje fotoaparát CAIM1 (Counter Artificial Intelligence Machine 1). Uměle vytvořený obsah je každým dnem těžší rozeznat od skutečných záběrů či fotografií, což podrývá důvěryhodnost žurnalistiky, archivních materiálů i každodenní tvorby obsahu. Fotoaparát CAIM1 byl vyvinut právě k tomu, aby ověřoval původ fotografií a videí přímo během jejich pořizování. Uvnitř fotoaparátu se nachází hardwarová Web3 peněženka se zabezpečovacím čipem Tropic Square TROPIC01.

    Ladislav Hagara | Komentářů: 3
    dnes 00:11 | Nová verze

    Jonathan Thomas oznámil vydání nové verze 4.1 video editoru OpenShot (Wikipedie). Zdrojové kódy OpenShotu jsou k dispozici na GitHubu. Ke stažení je i balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit.

    Ladislav Hagara | Komentářů: 0
    včera 23:33 | Zajímavý článek

    Při běžné migraci virtuálního stroje mezi hypervizory se jeho MAC adresa přesune na jiný leaf switch. EVPN tuto změnu distribuuje pomocí BGP Type-2 route a MAC mobility sequence number. Problém nastává, pokud útočník podvrhne zdrojovou MAC adresu jiného zařízení. Leaf může změnu interpretovat jako legitimní přesun MAC a rozšířit ji přes BGP do celé fabric. Výsledkem může být přesměrování provozu určeného původnímu zařízení. Autor článku rozebírá možnosti detekce pomocí sledování MAC moves, BGP route reflektorů a kontroly na přístupové vrstvě.

    vencour | Komentářů: 0
    včera 15:11 | Nová verze

    Vývojáři desktopového prostředí Enlightenment (Wikipedie) a souvisejících knihoven Enlightenment Foundation Libraries (EFL) vydali nové verze. Enlightenment byl vydán ve verzi 0.28.0 a Enlightenment Foundation Libraries ve verzi 1.29.

    Ladislav Hagara | Komentářů: 4
    včera 13:55 | Zajímavý článek

    Cloudflare zjistil, že některé odpovědi modelu GLM-5.3 obsahovaly části dat z předchozích požadavků jiných zákazníků. Příčinou byla kombinace chybné konfigurace a chyby v inference enginu SGLang. Model podporoval kontextové okno 1 048 576 tokenů, ale GPU KV cache pool měl kapacitu pouze 681 280 tokenů. Při překročení kapacity docházelo k nesprávnému zpracování odmítnutého požadavku. Decode část systému následně pracovala se starými

    … více »
    vencour | Komentářů: 1
    včera 13:00 | Zajímavý článek

    Vývojáři Knot Resolver vysvětlují, jak změnili rozhodování o tom, které DNS záznamy ponechat v cache a které odstranit. Článek obsahuje skutečná měření: devět hodin DNS provozu při 2 000 QPS, srovnání cache o velikosti 25 MB a 40 GB a také porovnání s BIND 9, kromě algoritmů obsahuje konkrétní doporučení pro konfiguraci a diagnostiku.

    vencour | Komentářů: 0
    30.10. 13:44 | IT novinky

    Největší kryptoměnová burza světa Binance se stala terčem útoku, při kterém podvodníci odcizili během několika minut kryptoměny v hodnotě přibližně 6,3 miliardy dolarů. Jedná se o největší kryptoměnovou krádež v historii, přibližně čtyřikrát větší než loňský útok na burzu Bybit. Binance se podařilo ve spolupráci s partnery zmrazit aspoň aktiva v hodnotě zhruba 3 miliard dolarů a slíbila, že veškeré ztráty pokryje z vlastních prostředků.

    Ladislav Hagara | Komentářů: 16
    30.10. 02:16 | Bezpečnostní upozornění

    Zranitelnost CVE-2026-98432 s CVSS 9.8 odhalila AI od společnosti Anthropic. Jedná se o kritickou chybu v implementaci MPTCP (multipath TCP). Debian vydal patche 16.10. a 22.10., ale např. Ubuntu je zatím bez opravy. Více informací na The Hacker News.

    Max | Komentářů: 20
    29.10. 23:22 | Zajímavý software

    Na Slovensku vznikla úplne nová rally hra, ktorá je zadarmo a funguje vo Windowse, Linuxe či na Macu. Greenie Rally má viac ako 50 tratí a vozidiel, šampionáty či turnaje. Má retro feeling a imituje automobilové hry z prelomu tisícročí. Vyskúšate prejsť všetky mapy na Škode 130RS?

    Stanislav Hoferek | Komentářů: 13
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (20%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2962 hlasů
     Komentářů: 34, poslední 26.10. 08:24
    Rozcestník

    Interface mezi C++ a F77

    6.3.2008 10:35 | Přečteno: 1366× | Výběrový blog | poslední úprava: 10.6.2008 17:33

    Jednoduchy příklad interface mezi C++ a f77

    Minulý víkend jsem za po dlouhé době potřeboval udělat interface mezi kódem ve fortranu a kódem v C++. Jelikož jsem to již dlouho nedělal, chvíli mi trvalo, než jsem si vzpomněl, jak to udělat (neměl jsem přístup na net; při této příležitosti jsem si zas uvědomil, že bez netu jsem jako bez ruky :-( - tedy co se programování týče). Poté, co se mi to zadařilo, jsem se rozhodnul udělat si jednoduchý prográmek pro přístě, až zas budu bez netu a budu vzpomínat, jak se to dělá. Vše níže uvedené platí pro kompilátor gcc.

    Volání fortranovské rutiny z C++ je vcelku jednoduché, stačí funkci deklarovat jako externí, název je stejný jako ve fortranu, ale přídáme podtržítko. Případný parameter předáme pomocí jeho adresy:

    extern "C" {void vypisparam_(int* cislo);}
    ...
    vypisparam_(&mojeCislo);
    

    Obvykle ale potřebujeme víc. Velmi často je potřeba nějak přistupovat k proměnným ve fortranovských common blocích. Mějme následně definovaný common blok a jednoduchý fotranovský prográmek:
    test.inc:

           DOUBLE PRECISION dp1,dp2
           INTEGER int1
           COMMON/MYTEST/dp1,dp2,int1
    
    test.f:
          PROGRAM TEST
          INCLUDE 'test.inc'
          CALL NASTAV
          CALL VYPIS
          CALL VYPISPARAM(20)
          CALL VYPIS
          END
    
          SUBROUTINE NASTAV
          INCLUDE 'test.inc'
          PRINT*,'Rutina Nastav - nastavuji parametry'
          dp1 = 1.D0
          dp2 = 3.5D0
          int1 = 10
          END
    
          SUBROUTINE VYPIS
          INCLUDE 'test.inc'
          PRINT*,"Rutina Vypis:"
          PRINT*,'dp1 = ',dp1
          PRINT*,'dp2 = ',dp2
          PRINT*,'int1 = ',int1
          END
    
          SUBROUTINE VYPISPARAM(a)
          INCLUDE 'test.inc'
          INTEGER a
          dp1 = a
          dp2 = a
          int1 = a
          PRINT*,'Rutina VypisParam:'
          PRINT*,'a=',a
          END
    
    Common blok bude v C++ reprezentovat struktura. Proměnné v common bloku jsou uloženy v paměti za sebou. Inicializace tedy probíhá tak, že se ukazateli na strukturu v C++ předá adresa první proměnné common bloku z fortranu. Je proto nutné, aby proměnné ve struktuře byly stejného typu a ve stejném pořadí jako ve fortranu (pro vícerozměrná pole pak ješte je nutno dát pozor indexy). O vrácení adresy common bloku se nám postará jednoduchá fortranovská funkce:
          FUNCTION common_block_address(common_block_name)
          INCLUDE 'test.inc'
          CHARACTER*(*) common_block_name
          INTEGER common_block_address
          INTEGER aaadress
          IF(common_block_name.EQ.'MYTEST')THEN
             common_block_address = adress(dp1)
          ELSE
             PRINT*,'Neexistujici common block'
          ENDIF
          RETURN
          END
    
    Jednoduchý prográmek v C++, který volá rutiny fortranovského kódu a pracuje s proměnnými v common bloku, by mohl vypadat takto (v C++ by tedy bylo vhodnejší, abychom byli objektoví:-), vytvořit objekt, který by reprezentoval fortanovský kód):
    #include <iostream>
    
    double loc_dp1,loc_dp2;
    int loc_int1;
    
    
    struct MyTest_t{
      double dp1,dp2;
      int int1;
    };
    
    extern "C" {
      void nastav_();
      void vypis_();
      void vypisparam_(int* cislo);
    }
    
    extern "C" void* adress_(void* var){
      return var;
    }
    
    extern "C" void* common_block_address_(char*,int len);
    
    MyTest_t* fMyTest;
    void InitCommonBlock(){
      fMyTest = (MyTest_t*)common_block_address_("MYTEST",6);
    }
    
    void LocalParToFor(){
        fMyTest->dp1 = loc_dp1;
        fMyTest->dp2 = loc_dp2;
        fMyTest->int1 = loc_int1;
    }
    
    void ForToLocalPar(){
        loc_dp1 = fMyTest->dp1;
        loc_dp2 = fMyTest->dp2;
        loc_int1 = fMyTest->int1;
    }
    
    int main(){
      int aaa = 100;
      InitCommonBlock();
      nastav_();
      vypis_();
      ForToLocalPar();
      std::cout << "loc_dp1 je " << loc_dp1 << std::endl;
      std::cout << "loc_dp2 je " << loc_dp2 << std::endl;
      std::cout << "loc_int1 je " << loc_int1 << std::endl;
      vypisparam_(&aaa);
      loc_dp1 = 4.5;
      loc_dp2 = 8.3;
      loc_int1 = 15;
      LocalParToFor();
      vypis_();
      return 0;
    }
    
    Vše kompilujeme pomocí g++ a poté slikujeme dohromady společně s knihovnou gfortan, u mě např. takto:
    g++ common_block_address.o interface.o test.o -L/usr/lib/gcc/i386-redhat-linux/4.3.0/ -lgfortran        

    Hodnocení: 100 %

            špatné • dobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    6.3.2008 11:14 anicka | blog: ze_zivota
    Rozbalit Rozbalit vše Re: Interface mezi C++ a F77
    Hezky clanek a pekne osklive dejavu. Staci nad clankem jen trochu privrit oci a predstavim si zdrojaky octave... :-)
    ^D
    6.3.2008 13:55 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
    Rozbalit Rozbalit vše Re: Interface mezi C++ a F77
    Sice nechapu co to dela ve vyberu, ale jinak dobry zapisek.
    Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.