contributed by <xdennisx
>
baimao8437
將於本 result_clock_gettime.csv 的圖形用 gunplot 輸出
OpneMP(4) 一開始都比大家高?
error rate
原始公式:
指定要用幾個thread來執行
支援的運算元有 +, , –, &, ^, |, &&, ||,它讓各個執行緒針對指定的變數擁有一份有起始值的複本(起始值是運算元而定,像 +, – 的話就是 0, 就是 1),平行化計算時,以各自複本做運算,等到最後再以指定的運算元,將各執行緒的複本合在一起。
AVX 是一組 SIMD(Single Instruction Multiple Data)的指令集,擴展了原有的 MMX 及 Intel Streaming SIMD Extensions(Intel SSE)
支援 AVX 的硬體上會有 16 個 256-bit 的 YMM(YMM0-YMM15) 暫存器,還有一個 32-bit 的控制暫存器 MXCSR,舊有的 XMM 暫存器可以視為取 YMM 的 lower half,如下圖。
_mm256d : 它並不是一種暫存器,是指可以用來載入到 AVX 暫存器的 “Data type”,double precision, 64bit
_mm256_set1_pd(1.0):將參數浮點數值放到 _mm256 變數的所有位置。
_mm256_set_pd(dt * 3, dt * 2, dt * 1, 0.0):將dt * 3, dt * 2, dt * 1, 0.0這些參數依序放入_mm256 變數,參數順序和放進去的次序相反。
顧名思義就是掛鐘時間,也就是現實世界中實際經過的時間,是由 kernel 裡的 xtime 來紀錄,系統每次啟動時會先從設備上的 RTC 上讀入 xtime。
這個值是自 1970-01-01 起經歷的秒數,另外 Linux 核心也會決定每秒要發生幾次中斷 (透過常數 HZ) ,每次 timer interrupt,就會去更新 xtime
。
另外注意,有時系統要與網絡中某個節點時間同步,那這個 Wall-clock time 可能會和 NTP 伺服器、時區、日光節約時間同步或使用者自己調整。所以「通常」不建議拿來量測程式時間,因為它不是一個穩定的時間,用專業一點的用語講,Wall-clock time 不一定是單調遞增 (monotonic)。
指的是程序在 CPU 上面運行消耗 (佔用) 的時間,clock() 就是很典型用來計算 CPU time 的時間函式,但要注意的是,如果有多條 threads,那 CPU time 算的是「每條 thread 的使用時間加總」,所以如果我們發現 CPU time 竟然比 Wall-clock time 還大!這可能是個很重要的原因。
另外很多時候只計算 CPU time 是不夠的,因為執行時間可能還包括 I/O time、 communication channel delay、synchronization overhead…等等。
考慮以下分解:
對兩邊從0到1去做積分
當時,除積分項以外的項收斂到萊布尼茨級數。同時,積分項收斂到0:
所以這便證明了萊布尼茨公式。
通式
=
π = 3 + 4/(234) - 4/(456) + 4/(678) - 4/(8910) + 4/(101112) - (4/(121314) …
通式大概長這樣
π = 3+
某個資料說這個比萊布尼茨快,結果好像沒有,可能是環境或是其他因素