日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenMP 编程实例(蒙特卡罗算法)

發布時間:2025/7/25 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenMP 编程实例(蒙特卡罗算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有關clock()函數

1,clock()函數在頭文件#include<time.h>中

2,clock()函數的返回值類型為clock_t。clock_t其實是long,即長整形。

clock_t是用來保存時間的數據類型,typedef long clock_t。

3,clock()函數的功能:從程序被調用,創建程序進程到clock()函數調用之間的cpu時間計時單位

4,常量CLOCKS_PER_SEC,他表示一秒鐘有多少個時鐘計時單位。

#define CLOCK_PER_SEC ((clock_t)1000)

5. 注意: (1) clock()函數范圍的時間單位是ms(毫秒)。(2) 現在的機器運算速度很快,當用clock()函數記錄算法的效率時,不一定有效,可能得到的結果為0。可以嘗試多次調用,這個“多”就自己去嘗試吧

//利用蒙特卡羅算法計算半徑為 1 單元的球體體積: //(1)串行執行程序為:#include<iostream> #include<stdlib.h> #include<time.h>using namespace std; int main() {long int max=10000000;long int i,count=0;double x,y,z,bulk,start_time,end_time;start_time=clock();time_t t;srand((unsigned) time(&t));//函數產生一個以當前時間開始的隨機種子for(i=0;i<max;i++){x=rand(); //生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統有關。 /*  RAND_MAX是VC中stdlib.h中宏定義的一個字符常量:  #define RAND_MAX 0x7FFF   其值最小為32767,最大為2147483647   通常在產生隨機小數時可以使用RAND_MAX。*/x=x/32767;y=rand(); y=y/32767; z=rand(); z=z/32767;if((x*x+y*y+z*z)<=1)count++;}bulk=8*(double(count)/max);end_time=clock();cout<<"球體的體積為"<<bulk<<endl; cout<<"運算時間為"<<(end_time-start_time)<<endl;return 0; } //在四核服務器上執行結果為:球體體積為 4.18862,運算時間為 1703ms。//(2)并行執行程序:利用 for 語句和歸并語句對程序進行并行化。#include<stdlib.h> #include<time.h> #include <stdio.h>int main() {long long max=10000000;long long i,count=0;double x,y,z,bulk,start_time,end_time;start_time=clock();time_t t;srand((unsigned) time(&t));//函數產生一個以當前時間開始的隨機種子#pragma omp parallel for private(x,y,z) reduction(+:count)for(i=0;i<max;i++){x=rand();x=x/32767;y=rand();y=y/32767;z=rand();z=z/32767;if((x*x+y*y+z*z)<=1)count++;} bulk=8*((double)(count)/max); end_time=clock();printf("球體的體積為%0.8f\n",bulk);printf("運算時間為%0.8f s\n",(end_time-start_time)/1000);return 0; } //在四核服務器上執行結果為:球體體積為 4.18861,運算時間為 406ms。

總結

以上是生活随笔為你收集整理的OpenMP 编程实例(蒙特卡罗算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。