Try   HackMD

2016q3 Homework1(Compute Pi)

SIMD

  • Single Instruction Multiple Data

  • SIMD 利用擴展 bit 的儲存空間,同一運算來達成加快效率,AVX 支援128、256 bit 為整合單位

  • 4個 16 bit (int)放入 128 bit 中, double 在linux下 align為32(windows則是64)

  • int tmp[4] attribute((aligned(16)));
    16 為 16bytes, 需要align機制, 來將tmp整合128bits

  • 順帶一提,以下是struct 的align機制

struct example{
	char data1;
	short data2;
	int data3;
	char data4;
};

struct 的 align 是以當前型態別的倍數來存放

  1. data1 , char的align 為 1 放置0X00
  2. data2 , short的align 為 2 放置0X02, 要2的倍數所以0X01時 padding
  3. data3 , int的align 為 4 放置0X0
  4. data4 , char的align 為 1 放置0X09
  5. 因為目前最大align 數為 32,所以struct 也要以4的倍數結束,所以要 padding

這樣可以一次取出struct,在取各值,如果要節省空間則可以用#pragma pack(16)

OpenMP

結果圖

  • Makefile
for i in ` seq  100     5000    25000 `; do \
   變數         初始值   counter   末值      同一行


使用openMP thread 4 ,跳動非常大,但整體而言曲線較低於openMP thread 2

  • 因該可以設平滑取線, smooth acsplines ,目前會有負數加值的錯?
  • 修改MAKEFILE 的迴圈,使得可以不以+1來紀錄,可以+5、+10