#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 ...