CUDA 求平方和

2021-07-02 01:01:21 字數 2606 閱讀 7641

#include#include#include#define data_size 1048576

int data[data_size];

void generatenumbers(int *number,int size)

printf("sum (cpu): %d\n", sum);

system("pause");

}

//要怎麼把計算平方和的程式並行化呢?最簡單的方法,似乎就是把數字分成若干組,

//把各組數字分別計算平方和後,最後再把每組的和加總起來就可以了。

//一開始,我們可以把最後加總的動作,由 cpu 來進行。

#include#include#include#include#define data_size 1048576

#define thread_num 256 //設定thread數目

int data[data_size];

//產生陣列元素值

void generatenumbers(int *number,int size)

printf("sum: %d time: %d\n", final_sum, time_used);

}

//在 cuda 中,thread 是可以分組的,也就是 block。

//乙個 block 中的 thread,具有乙個共享的 shared memory,也可以進行同步工作。

//不同 block 之間的 thread 則不行。在我們的程式中,其實不太需要進行 thread 的同步動作,

//因此我們可以使用多個 block 來進一步增加 thread 的數目。

#include#include#include#include#define data_size 1048576

#define block_num 32 //塊數量

#define thread_num 256 //每個塊中線程數

int data[data_size];

//這表示我們會建立 32 個 blocks,每個 blocks 有 256 個 threads,總共有 32*256 = 8192 個 threads。

//產生陣列元素值

void generatenumbers(int *number,int size)

offset >>= 1; __syncthreads(); }

//這樣同時也省去了mask 變數。因此,這個版本的執行的效率就可以再提高一些

//如果還要再提高效率,可以把樹狀加法整個展開:

//if(tid < 128) __syncthreads();

//if(tid < 64) __syncthreads();

//if(tid < 32) __syncthreads();

//if(tid < 16) __syncthreads();

//if(tid < 8) __syncthreads();

//if(tid < 4) __syncthreads();

//if(tid < 2) __syncthreads();

//if(tid < 1) __syncthreads();

if(tid == 0) }

int main()

{ //...cuda初始化

generatenumbers(data,data_size); //產生隨機數

int *gpudata,*result; //gpu裝置上的數

clock_t* time; //計算時間(以gpu時鐘為基準)

cudamalloc((void**)&gpudata,sizeof(int)*data_size); //分配視訊記憶體,allocate memory on the device

cudamalloc((void**)&result,sizeof(int)*block_num);

cudamalloc((void**)&time,sizeof(clock_t)*block_num*2);

cudamemcpy(gpudata,data,sizeof(int)*data_size,cudamemcpyhosttodevice); //host->device

// 函式名稱<<>>(gpudata,result,time);

int sum[block_num];

clock_t time_used[block_num*2]; //執行時間

cudamemcpy(&sum,result,sizeof(int)*block_num,cudamemcpydevicetohost);

cudamemcpy(&time_used,time,sizeof(clock_t)*block_num*2,cudamemcpydevicetohost);

cudafree(gpudata); //釋放視訊記憶體

cudafree(result);

cudafree(time);

//計算每個執行緒計算出來和的總和

int final_sum=0;

for(int i=0;itime_used[i])

min_start=time_used[i];

if(max_end

試題 演算法訓練 求平方和

試題 演算法訓練 求平方和 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 請用函式過載實現整型和浮點習型的兩個數的平方和計算 輸入格式 測試資料的輸入一定會滿足的格式。2 2 2行2列,第1行整型,第2行浮點型 輸出格式 要求使用者的輸出滿足的格式。2 1 2行1列,第1行整型...

平方和定理

在數論裡,平方和定理的物件為整數 n 1 n 1能夠被寫為兩個平方和的形式,即n a2 b 2 n a 2 b2 該定理如下 乙個比 1 1 大的整數能夠被寫成兩個平方的和的形式,當且僅當它的素數分解中不包含這樣的素數,該素數對4取餘等於3且該素數的指數為奇數。例如,2450 2 52 72 rol...

平方和公式

x sum 這個式子怎麼計算?1.for迴圈 復 雜度 o n 2.公式 frac 證明 摘自milky way學姐的部落格 關於二階等差數列 a a n 1 k frac 證明 a a k,a a k d,a a k n 2 d a a k n 2 d k n 3 d k d a a n 1 k ...