Sunday, August 19, 2018

2018 COSCUP day 1

  • Introduction to Julia 308

    • https://hackmd.io/c/coscup18-julia/%2Fcoscup18-julia-introduction-to-julia
    • https://www.slideshare.net/ssuserd6984b/coscup-introduction-to-julia
    • 『Write like Python, run like C.』沒什麼比這句或更有吸引力了,這個語言一本上是語法融合R+Python的動態型別語言,不過她速度實測上接近C和Lua,不過按照講者說法Julia需要在宣告時給定變數型別才可獲得最佳效能。
    • pass by sharing,function內變數指向原本的參數位置
    • 語法上有趣的部份是他的陣列Index是從1開始的,陣列支援comprehension展開,此外支援複數型別和有理數型別,而且在有UTF-8,可以輕易的打出希臘字母,對於學術界來說時的親切。也因此金融界,和科學運算界用這個語言比較多。我覺得她可以取代Scipy和Numpy在這些領域的地位。
    • 有內建的profile tool,不用像C/C++需要prof或是valgrind。可以用@time產生火焰圖。
    • 有平行語法@parallel修飾字,基本上就是openmp的#pragma parallel for之類的包裝。
    • @code_native與@code_llvm的修飾字可以方便了解當時程式的組語以及LLVM IR。
    • Machine Learning,Deep Learning和web full stack均有套件,還也史上最強大微分方程套件。
  • 小鴨城 (Duckietown),一個基於 Raspberry Pi 和 ROS 的開源無人小車專案介紹

    • https://hackmd.io/c/coscup18-misc/%2Fcoscup18-misc307-duckietown
    • Ubutu + ROS + OpenCV + Raspberry Pi用來訓練學生對於無人車的設計基本了解。
    • 主要注重車子與雙黃線的距離估計,圖像與真實世界的投影轉換,光影的補完與校正。
    • 交大也有開課歐(軟體創意專題)。
    • Puyuma
  • 在 RISC-V 上的 ftrace 及 perf 工具移植經驗

    • https://hackmd.io/c/coscup18-kernel/%2Fcoscup18-kernel-risc-v-ftrace-perf
    • kernel是黑盒子,需要透過ftrace和perf來了解kernel效能。
    • 流程:開發者使用效能監控工具->改變kernel設定,進入開發模式->產生監控資料->離開監控模式->開發者存取資料
    • Ftrace:以 function 為等級的監控,進入每個函數,綁架正流執行流程,產生執行與離開的時間戳記,使用者透過透過 tracefs 檔案系統取的 trace 內容。
    • Perf : 以 process 為等級的監控,排程器在排入形成時啟動、形成離開時移除 perf 機制,產生包括軟體組態,以及硬體counter,甚至cache miss資料。透過一些gui tool 或是 CLI 獲得perf解碼資料。
    • 均須在compile時加入 -pg flag,插入_mcount
    • _mcount 如何運作,透過更改call stack中當前的return address,讓其進入_mcount產生資料進行計算。https://github.com/lattera/glibc/blob/master/sysdeps/sh/_mcount.S
    • patch重點->硬體counter。
  • 快快樂樂 SIMD

    • https://hackmd.io/c/coscup18-kernel/%2Fcoscup18-kernel-simd
    • https://www.slideshare.net/WeiTaWang/simd-109492525
    • SIMD算是現代CPU特色,Intel每幾年會double一次SIMD大小。SIMD是一些特殊組語,在C語言使用時通常用一些函式包裝,Vector register也會用typedef重新定義。
    • 使用SIMD前一定要會算指令cycle,最好還要有計算機組織的基礎,才有辦法trade off。
    • SIMD除了指令以外,還要了解記憶體與cache。唯有讓運算停留在register中進行愈久愈好。為了避免cache miss,array可以在function中宣告,用O3讓參數穿透(inline),interrupt避免,以免cahce被洗出去。計算cache size,避免在存圖片時cache滿出來。由於編譯器對於指標較難優化。所以避免直接使用間接取址操作,不然會編出大量load/store與cache miss。應該用中繼變數取代。少用陣列多用pointer可以避免編出大量load / store
    • algin很重要,滿出vector size不會得到好的增益。可用align指令包裝。
    • 必須記得當前CPU的register數量,避免滿出vector register的大小。
    • 使用shuffle指令ex: vtrnq(arm)重新排列資料在vector的位置
    • 盡量一口氣load store達到pipeline
    • 使用新版gcc / clang
    • -fvectorize 需要讓編譯器知道迴圈大小裁可以達到最佳優化。
    • 這個議程強調速度,所以會忽略一些可讀性。
  • LPWAN 物聯網通訊技術

  • Web 可用的組合語言 - WebAssembly & 自幹 WebAssembly 虛擬機器


  • The bright future of SUSE and openSUSE

  • The DEXON Network - The Infrastructure of the Internet’s Decentralized Future

  • Lightning Talk

No comments:

Post a Comment

精選文章

使用Ardunio Atmega2560 連接 nRF24L01+

使用Ardunio Atmega2560 連接 nRF24L01+ 關於library 目前主流有 https://github.com/maniacbug/RF24 與 https://github.com/TMRh20/RF24 這兩個。 其中TMRh20大大做...