## 星期六, 6月 17, 2017

### Virtual Memory

RSVM: a Region-based Software Virtual Memory for GPU
Parallel Architectures and Compilation Techniques (PACT), 2013 22nd International Conference on

Fast, Multicore-Scalable, Low-Fragmentation Memory Allocation through Large Virtual Memory and Global Data Structures

# Main-memory hash joins on multi-core CPUs: Tuning to the underlying hardware

ISCA’13 Tel-Aviv, Israel Copyright 2013 ACM 978-1-4503-2079-5/13/06... $15.00 Page Replication # DMR3D: Dynamic Memory Relocation in 3D Multicore Systems http://ieeexplore.ieee.org/document/6560750/ https://www.youtube.com/watch?v=Dml54J3Kwm4 Dynamic Memory Relocation 我们来想一下这个情况：MySQL的线程分为两种，用户线程（SQL执行线程）和内部线程（内部功能，如：flush，io，master等）。对于用户线程来说随机性相当的强，但对于内部线程来说他们的行为以及所要访问的内存区域其实是相对固定且可以预测的。如果能对于这把这部分内存集中到这些内存线程所在的core上的时候，就能减少大量Remote Access，潜在的提升例如Page Flush，Purge等功能的吞吐量，甚至可以提高MySQL Crash后Recovery的速度（由于recovery是单线程）。 那是否能在Interleave模式下，把那些明显应该聚集在一个CPU上的内存集中在一起呢？ 很可惜，Dynamic Memory Relocation这种技术目前只停留在理论和实验阶段。我们来看下难点：要做到按照线程的行为动态的调整page在memory的分布，就势必需要做线程和内存的实时监控（profile）。对于Memory Access这种非常异常频繁的底层操作来说增加profile入口的性能损耗是极大的。在 关于CPU Cache程序应该知道的那些事的评论中我也提到过，这个道理和为什么Linux没有全局监控CPU L1/L2 Cache命中率工具的原因是一样的。当然优化不会就此停步。上文提到的Carrefour算法和Linux社区的Auto NUMA patch都是积极的尝试。什么时候内存profile出现硬件级别，类似于CPU中 PMU 的功能时，动态内存规划就会展现很大的价值，甚至会作为Linux Kernel的一个内部功能来实现。到那时我们再回过头来审视这个方案的实际价值。 Page Replication 再来看一下这些情况：一些动态加载的库，把他们放在任何一个线程所在的CPU都会导致其他CPU上线程的执行效率下降。而这些共享数据往往读写比非常高，如果能把这些数据的副本在每个Memory Zone内都放置一份，理论上会带来较大的性能提升，同时也减少在inter-connect上出现的瓶颈。实时上，仍然是上文提到的Carrefour也做了这样的尝试。由于缺乏硬件级别（如MESI协议的硬件支持）和操作系统原生级别的支持，Page Replication在数据一致性上维护的成本显得比他带来的提升更多。因此这种尝试也仅仅停留在理论阶段。当然，如果能得到底层的大力支持，相信这个方案还是有极大的实际价值的。 ## 星期四, 1月 12, 2017 ### By or With By or With By + Ving ## 星期三, 12月 21, 2016 ### TDCi正常的電瓶 TDCi正常的電瓶 放空檔拉手煞車，不踩煞車踏板 從Test mode看電瓶電壓 未發動時應該在12.5~12.6V 發動瞬間會掉到9.3~9.6V 發動後穩定狀態的電壓會在14.0~14.2V浮動 開始有點虛弱的電瓶 未發動Test mode 的電瓶電壓應該在12.1~12.3V 發動瞬間會掉到8.4~8.8V 發動後穩定狀態的電壓會在13.7~14.0V浮動 快要掛掉或已經不行的電瓶 未發動Test mode 的電瓶電壓應該在11.6~12.0V 發動瞬間會掉到7.5~8.3V 發動後穩定狀態的電壓會在13.7~14.0V浮動 (可能已經發不動了) 另外 其實原廠出廠電瓶Motocraft GR-40A是可以加水的 只是他故意做成很像免加水免保養電瓶 只要把上蓋撬開，就會看到6個加水孔，用10元硬幣把蓋子打開就好了 我的Focus TDCi 6MT電瓶這星期一也是掛了 好在我還有一顆備用電瓶頂著用 之後我把原廠電瓶拆下來，看看能不能死馬當活馬醫充充電(已經用了2年多6萬多公里了) 拆下來以後發現電解液已經乾到只剩一半了，沒電是正常的... 6個孔我總共補了大約300cc的純水進去 再用充電器把電充飽... 充飽靜置一天後的電壓還能在12.8V以上，看起來是有救回來 提供給各位參考... AMAROM 銀合金汽車電瓶- 歐規 -58012-80AH-730.CCA(EN) ## 星期二, 12月 20, 2016 ### Intel® 無線 Bluetooth® 適用於軟體 Windows® 10 (JP) Intel® 無線 Bluetooth® 適用於軟體 Windows® 10 (JP) https://downloadcenter.intel.com/zh-tw/download/26363/Intel-Wireless-Bluetooth-Software-for-Windows-10-JP- ## 星期一, 11月 28, 2016 Press Release: The Nobel Prize in Physics 2016 科普版 +http://pansci.asia/archives/106857 -http://www.ifuun.com/a2016105413181/ Scientific Background 量子霍爾效 The Kosterlitz-Thouless phase transition 拓撲物理研究物質被拉伸、扭轉或發生形變而未斷裂時有哪些性質仍然保持不變。從拓撲學上來說，球體和碗可以被歸為同一類，因為一團球形的粘土可以被捏成一個碗。然而，麵包圈中間和咖啡杯把手處都有一個洞，它們屬於另一類型；它們也可以通過連續形變，變成對方的形狀。因此，拓撲物體可以包含一個洞，兩個洞，或者三四個洞……但這個數字必須是整數。因此，在發生量子霍爾效應時，電導率總是以整數倍發生變化，不難想像這可能與拓撲學有關。 http://pansci.asia/archives/106857 編結量子計算 量子位元的特殊性質，令科學家對量子計算興致勃勃。如果能再結合數學上拓撲的概念，或可創造出新的量子計算方式。 撰文／柯林斯（Graham P. Collins） 翻譯／高涌泉 http://www.cs.virginia.edu/~robins/Computing_with_Quantum_Knots.pdf 拓撲與扭結一個封閉迴圈（a）的拓撲不會因為扭曲成另一種形狀（b）而改變，但是會不同於帶有扭結的封閉迴圈（c）的拓撲。如果只是把迴圈扭來扭去，並不會造出扭結，我們必須切斷迴圈，綁個結，然後再把兩端接起來才能得到扭結（c）。由此可知，迴圈的拓撲不會受到微擾（如果只是扭來扭去）的影響。 資訊保存機率的可能性 當他維持最大面積時, 表示資訊量保存最多 888 0/24 12 12 0 12/24 1 22 1 42/24 ## 星期一, 11月 14, 2016 ### 調整系統分頁檔，刪除hiberfil.sys休眠設定，讓你的SSD多出20GB硬碟空間 http://www.techbang.com/posts/12827-unknown-system-cannot-be-deleted-through-the-system sudo powercfg –h off ## 星期四, 10月 20, 2016 ### For FFMPEG it will be 3.1.1 & NDK it will be r12b.(How to Build FFmpeg for Android) ref: http://stackoverflow.com/questions/36277628/android-how-to-configure-ffmpeg-latest-version-in-android-studio For FFMPEG it will be 3.1.1 & NDK it will be r12b. Building FFMPEG with NDK r12b: Download Android NDK : The latest version of Android NDK can be downloaded at Android NDK website. At the time of writing this answer, the newest version is NDK r12. simply decompress the archive Download ffmpeg source code : FFMPEG source code can be downloaded from the ffmpeg website. The latest stable release is 3.1.1 (at the time of writing). Download the source code and decompress it to$NDK/sources folder.
Update configure file : Open ffmpeg-3.1.1/configure file with a text editor, and locate the following lines.

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "(LIBDIR)/(LIBNAME)"' SLIB_INSTALL_NAME='(SLIBNAME_WITH_VERSION)' SLIB_INSTALL_LINKS='(SLIBNAME_WITH_MAJOR) (SLIBNAME)' This cause ffmpeg shared libraries to be compiled to libavcodec.so. (e.g. libavcodec.so.55), which is not compatible with Android build system. Therefore we’ll need to replace the above lines with the following lines. SLIBNAME_WITH_MAJOR='(SLIBPREF)(FULLNAME)-(LIBMAJOR)(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)
Build ffmpeg : Copy the following text to a text editor and save it as build_android.sh in ffmpeg_3.1.1 folder.

#!/bin/bash
NDK=$HOME/Desktop/adt/android-ndk-r9 SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64 function build_one { ./configure --prefix=$PREFIX
--enable-shared
--disable-static
--disable-doc
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-avdevice
--disable-doc
--disable-symver
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=$SYSROOT
--extra-cflags="-Os -fpic $ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS"
$ADDITIONAL_CONFIGURE_FLAG make clean make make install } CPU=arm PREFIX=$(pwd)/android/$CPU ADDI_CFLAGS="-marm" build_one Once the file is saved, go to the directory where this file lies & execute the command below, sudo chmod +x build_android.sh Then execute the script by the command, ./build_android.sh Build Output : The build can take a while to finish depending on your computer speed. Once it’s done, you should be able to find a folder$NDK/sources/ffmpeg-3.1.1/android, which contains arm/lib and arm/include folders.
Make ffmpeg Libraries available for Your Projects
Steps above are fully tested and i performed them on my machine and the build was successful. For writing this answer i have took the reference from this article How to Build ffmpeg with NDK r9 but as it was for older version i have made some corrections on my own.