2017年3月12日 星期日

[GDB] C/C++ Debugger

GNU Debugger

GDB 是 GNU Project Debugger的縮寫

是適合用在 Linux/MAC 上面的除錯工具

入門教學

首先,開始debug之前,請務必在command line 下指令時,在gcc或是g++後面加上 '-g' 這段文字[1]


下面是CS50所分享的使用教學影片

GDB1

GDB2
[1] 關於除錯(Debugging)選項 "-g"
要使用 gdb 那麼首先,在你 compile 程式的時候, 要加上 -g 的選項. (可以用-g, -g2, -g3具體請看 man gcc)。 
通常如果程式不會很大,在 compile 的時候我都是用 -g3 的,因為如果你用到了 inline 的 function, 用 -g 去 compile 就無法去 debug inline function了.這時候就用到 -g2, -g3了,g後面的數字越大,也就是說 可以 debug 的級別越高.最高級別就是 -g3. --- Debugging with GDB (入門篇)

g++ - is using the “-g” flag for production builds a good idea? 

How Does The Debugging Option -g Change the Binary Executable?
"-g tells the compiler to store symbol table information in the executable. Among other things, this includes:
  • symbol names
  • type info for symbols
  • files and line numbers where the symbols came from
Debuggers use this information to output meaningful names for symbols and to associate instructions with particular lines in the source."

2017年3月10日 星期五

認知思維模式升級 ! 在互聯網時代,如何升級自己的大腦OS

OS是電腦中最重要的部份,負責掌管電腦的工作順序,各種資源分配等等

這個聽起來跟人的認知思維模式是不是有很大的相似之處?

例如,早上起來的時候第一件事情是做什麼,選擇繼續賴床還是? 

吃完早餐之後到公司第一件事情做得是什麼?

身邊的人其實都是聰明人

那為什麼能夠達成一般人10倍到100倍,甚至1000倍收入的人這麼少???

反過來問,我該如何成為一般人1000倍甚至大於1000倍的收入呢?

除了成為公司的最高負責人或是高管以外,靠投資跟創業行不行?



在這篇<高收入,都是睡出来的>文章給我們一些方向 :

1、把单位时间卖贵;2、让时间可以被批量购买;3. 让时间产生复利

我們應該仔細檢視自己手上掌握的技能,握有的資源是不是同時能夠讓我們達到上面的事情?

Ex. 開發一款機器人理財系統,讓它在我們睡覺的時候繼續幫我們理財?


另一篇<认知升级,你不会经历比这更好的痛苦了>,提到了是否值得花錢去上課?

我想下面給出了一個解答

我问他,那有一些课,你花了这么多钱,没有达到你预期怎么样。
他回答说,首先,有没有学到东西,都是因人而异的。对我来说,牛人最牛逼的地方,在于认知层面的高阶,只要他们讲的其中一句话,或推荐的一本书,有可能给我带来不一样的思维方式,那就值回票价和时间了。
一个人之所以能成功,一定是拥有普通人缺少的特质。课讲的好不好只是很小的一方面,关键是做事的思维逻辑方式和风格,甚至整套运营的思路,都值得全方位整体去了解和学习。我们学的是更加高级的东西,而不只是关注内容而已。
这才是大格局的认知。
然而,认知的升级可以通过学习;比升级更重要的,是认知的迭代,而迭代,就是一个人的功课。

省錢真的能夠賺到大錢嗎 ? 我高度質疑這點

如果是牛人的課程,同時也是自己與市場上稀缺的能力

花費的學費未來一定能夠以數倍的方式回到自己身上

不先付出無形與有形的代價,哪能有任何收穫 ?



看到1000倍收入總是眼睛一亮

重點是在於,我們該如何打造符合我們自己性格,同時滿足上面3點性質的高收入工具

並且在有限的歲月中貫徹執行(有生之年能夠看到成果才是最重要的! 時間不等人)


高收入者與一般人,差別在哪,我想你我應該清楚

---------------------------------------------------------------
思想練習

Q : 我想要做得志業,是否能夠滿足上面提到的3點

2017年2月22日 星期三

Coding 修羅場 - Online Judge

除了  LeetCode / TopCoder 等常見的程式練習

下面列出了幾個常見的線上解題系統

UVa Online Judge

Virtual Judge  (華中科大 online judge )

HDU Online Judge System


2017年2月21日 星期二

[Tensorflow] 以Intel Vtune amplifier 對 Tensorflow 分散式學習 Profiling

硬體配置 - 4台PC  負責運算的worker 上面各有2張 NVIDIA 的 GTX 1080

我以負責其中一台 node0 當作 parameter server

Analysis Target

Application : /usr/bin/python  #填入執行 python 的 binary 所在位置

Application parameters : /home/paslab/workspace/benchmark/tensorflow/exercise-01/example.py python example.py --job_name="ps" --task_index=0  #這邊相當於填入command line裡面的內容,我們在這邊輸入要profile程式的位置,接下來在輸入執行 python 訓練程式所在的位置

Working Directory : 選擇你要把分析完的結果存放在那理

Analysis Type

選擇自己需要的分析方式


以上都填寫正確並選擇完畢之後

按下 start 之後,如果一切正確,就可以看到分散式訓練順利的開始執行,如下圖一所示


圖一、VTune 成功執行分散式運算

表示 VTune 開始執行該支程式並開始 Profiling

[Tensorflow] [Linux] 執行分散式學習常見問題

Q1 : 在Linux環境底下,Parameter Server 該如何關閉 ?


A1 : 有個方法,先按下  [Ctrl] + [Z] 將該程式丟到背景並暫停

並在 cmd window 裡面下

pkill python

pkill 指令與 killall 指令類似,也是可以指定程式名稱,但是其所指定的名稱會直接以常規表示法(regular expression)的方式比對,只要比對成功,就會中止該程式。 對於不熟悉常規表示法的初學者而言,用此程式可能比較危險,如果使用不正確的常規表示法,可能會把不該中止的程式也砍了,所以使用上要注意。 --- 在 Linux 中使用 kill、killall 與 xkill 等指令強迫關閉程式

接下來再輸入

fg

fg 是將背景工作移動到前景,目的是確認該支程式已經被關閉 (Terminated)





Q2 :  明明檢查了cmd輸入的指令,還有不同台負責作工作分配的Parameter Server、算權重的Worker 它們運行的程式,為什麼不能執行?


A2 : 有個問題可能是之前執行的 python 程式並未正確關閉沒有結束,因此在GPU當中依舊存在殭屍程序。如果GPU的廠牌是 Nvidia,這個時候可以透過以下的指令

nvidia-smi

檢查 GPU 裡面運行的Process有那些,再利用以下的指令把它關閉

kill -9 process / kill -9 PID

kill -9 process 這個指令可以在沒有 admin 權限下把我自己帳號產生的 python 程序強制關閉,這邊要注意我所說的強制的意思,就是在這樣的關閉情況底下,程式所產生的暫存檔會消失。所以使用上需要特別注意,除非 -15 沒辦法正常關閉,不然不要隨意使用。

-9  :代表立刻強制刪除一個工作

-15:以正常的程序方式結束一件工作,與 -9 關閉的方式不同(類似直接關閉電腦的電源或是長按電腦的電源鍵 vs 正常程序關機)
不過,畢竟正常的作法中,你應該先使用 fg 來取回前景控制權,然後再離開 vim 才對~因此,以上面的範例二為例,其實 kill 確實無法使用 -15 正常的結束掉 vim 的動作喔!此時還是不建議使用 -9 啦!因為你知道如何正常結束該程序不是嗎? 通常使用 -9 是因為某些程式你真的不知道怎麼透過正常手段去終止他,這才用到 -9 的! ---  第十六章、程序管理與 SELinux 初探 - 管理背景當中的工作: kill

在 Linux 當中,常常遇到下的指令不符合權限這個問題,因此需要特別注意

由前面一連幾個章節的資料看來,我們一直強調在 Linux 底下所有的指令與你能夠進行的動作都與權限有關, 而系統如何判定你的權限呢?當然就是第十三章帳號管理當中提到的 UID/GID 的相關概念,以及檔案的屬性相關性囉!再進一步來解釋,你現在大概知道,在 Linux 系統當中:『觸發任何一個事件時,系統都會將他定義成為一個程序,並且給予這個程序一個 ID ,稱為 PID,同時依據啟發這個程序的使用者與相關屬性關係,給予這個 PID 一組有效的權限設定。』 從此以後,這個 PID 能夠在系統上面進行的動作,就與這個 PID 的權限有關了!---  第十六章、程序管理與 SELinux 初探
第十六章 程序管理與 SELinux 初探 這個是基礎知識補充,有需要再查詢即可

2017年2月16日 星期四

恆毅力 Grit : The power of passion and perseverance

Grit 這本書在台灣的書名翻譯作 恆毅力

這是作者Angela Lee Duckworth 在 TED 上的演講 Grit: The power of passion and perseverance

書中探討一個有趣的現象

就是關於成功的一個關鍵要素之一

猶記得羅胖在這集 怎樣成為一個高手  有提到

一個成長最簡單的方式就是,讓自己投身在一個你想要學習項目的環境

並且持續的做自己不會做的事情



提供一條道路給想要不斷升級自己心智作業系統的人
/* 載入prettify的autoloader */ /* 載入JQuery */