编写OpenMP程序,数组里存放大量浮点数,数据分布在05之间,为了对数据分布有一个更为直观的感受,对数据进行统计,01之间、1~2之间…分别有多少浮点数。
相关阅读
OpenMP实现求矩阵均值最大值以及最小值
OpenMP实现数据统计
Pthreads实现任务队列
Pthreads实现梯形积分
visual studio 2019配置Pthreads和OpenMP
CodeBlocks 17.12配置Pthreads和OpenMP
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#define DATA_COUNT 10000
#define BIN_COUNT 5
double data[DATA_COUNT];
int min = 0, max = 5;
int bin_counts[BIN_COUNT] = {0};
int bin_maxes[BIN_COUNT] = {0};
void create_data(){
srand(time(0));
for(int i = 0; i < DATA_COUNT; i++)
data[i] = 1.0*(rand()%RAND_MAX)/RAND_MAX*5;
/*for(int i = 0; i< DATA_COUNT; i++)
printf("%lf\n", data[i] );*/
}
void init_bin_maxes(){
int bin_width;
bin_width = (max-min)/BIN_COUNT;
for(int i = 0; i < BIN_COUNT; i++)
bin_maxes[i] = min+bin_width*(i+1);
}
int main()
{
create_data();
init_bin_maxes();
#pragma omp parallel for
for(int i = 0; i < DATA_COUNT; i++){
if(min <= data[i] && data[i] < bin_maxes[0]){
#pragma omp atomic
bin_counts[0]++;
continue;
}
for(int j = 1; j < BIN_COUNT; j++)
if(bin_maxes[j-1] <= data[i] && data[i] < bin_maxes[j])
#pragma omp atomic
bin_counts[j]++;
}
for(int i = 0; i < BIN_COUNT; i++){
printf("Bin%d\t",i);
}
printf("\n");
for(int i = 0; i < BIN_COUNT; i++){
printf("%d\t", bin_counts[i]);
}
return 0;
}