Na blogu Raspberry Pi byl představen Raspberry Pi AI Kit určený vlastníkům Raspberry Pi 5, kteří na něm chtějí experimentovat se světem neuronových sítí, umělé inteligence a strojového učení. Jedná se o spolupráci se společností Hailo. Cena AI Kitu je 70 dolarů.
Byla vydána nová verze 14.1 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.
Společnost Kaspersky vydala svůj bezplatný Virus Removal Tool (KVRT) také pro Linux.
Grafický editor dokumentů LyX, založený na TeXu, byl vydán ve verzi 2.4.0 shrnující změny za šest let vývoje. Novinky zahrnují podporu Unicode jako výchozí, export do ePub či DocBook 5 a velké množství vylepšení uživatelského rozhraní a prvků editoru samotného (např. rovnic, tabulek, citací).
Byla vydána (𝕏) nová verze 7.0 LTS open source monitorovacího systému Zabbix (Wikipedie). Přehled novinek v oznámení na webu, v poznámkách k vydání a v aktualizované dokumentaci.
Organizace Apache Software Foundation (ASF) vydala verzi 22 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Společnost AMD na veletrhu Computex 2024 představila (YouTube) mimo jiné nové série procesorů pro desktopy AMD Ryzen 9000 a notebooky AMD Ryzen AI 300.
OpenCV (Open Source Computer Vision, Wikipedie), tj. open source multiplatformní knihovna pro zpracování obrazu a počítačové vidění, byla vydána ve verzi 4.10.0 . Přehled novinek v ChangeLogu. Vypíchnout lze Wayland backend pro Linux.
Národní superpočítačové centrum IT4Innovations s partnery projektu EVEREST vydalo sadu open source vývojových nástrojů EVEREST SDK pro jednodušší nasazení aplikací na heterogenních vysoce výkonných cloudových infrastrukturách, zejména pro prostředí nabízející akceleraci pomocí FPGA.
Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu aktuálně činí 2,32 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Ubuntu, Linux Mint a Manjaro Linux. Při výběru jenom Linuxu vede SteamOS Holo s 45,34 %. Procesor AMD používá 75,04 % hráčů na Linuxu.
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 ENDCommon 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 ENDJednoduchý 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
Tiskni Sdílej: