一、一些概念準備
1、一些概念
- 核心密集型:該類型不太依賴內存的訪問速度;
- 存儲密集型:該類型內存的訪問速度高度敏感;
比如,8核心8線程和8核心16線程,後者對訪問速度更加敏感。8核心16線程會公用一些資源,甚至出現爭搶資源的情況!
將數據讀取到內存這個比較耗時間,一般單線程程序就能達到I/O讀取的極限。編寫多線程程序時時刻注意,I/O是計算機中速度中最慢的部分;同時需要注意的是,從CPU到GPU的數據傳輸要通過I/O子系統的PCI express總線進行。
2、調試
在Unix-like系統中調試一般用gdb或者valgrind;或者古典調試法。
在調試c程序時gdb可能會更加方便些;在cuda編程中可以使用古典調試法和nvvp(nvidia內置調試工具)。古典方法,比如:使用assert()和printf()函數告訴我們程序內部發生了什麼;在程序之間加入return,如果沒有出錯,那麼rerun之前的代碼是正確的,這個可以快速定位;