C语言实现并行求和算法
来源:互联网 发布:pdf页面合并软件 编辑:程序博客网 时间:2024/06/16 19:32
1、问题描述
将数组A均匀划分成m个片段,每个数组片段最多有(n+m-1)/m 个元素。每个数组片段分别由一个线程负责局部求和,最后这些部分和加起来就得到数组中所有元素的总和。
2、相关代码
此代码在gcc4.3下编译通过
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 4
int N;
int *X;
int gSum[NUM_THREADS];
void* Summation(void *pArg){
}
void initArr(){
}
int main(void){
//
}
3、技术难点
1)动态数组初始化
这里使用malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型
void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
2)void类型转换
malloc返回类型是 void* 类型
这并不是说该函数调用后无返回值,而是返回一个结点的地址,该地址的类型为void,即一段存储区的首址,其具体类型无法确定,只有使用时根据各个域值数据再确定。可以用强转的方法将其转换为别的类型。例如:
int *pd=NULL;
pi=(int *)malloc(N*sizeof(int));
向系统申请10个连续的int类型的存储空间,用指针pi指向这个连续的空间的首地址。
并且用(int*)对malloc的返回类型进行转换,以便把int类型数据的地址赋值给指针pi
3)主线程等待子线程结束
对于多线程而言,一个主要的难题就是如何线程是否都已经执行结束。这里用的方法是pthread_join
pthread_join方法的功能就是等待线程结束
syntax: int pthread_join(pthread_t thread, void **retval);
第一个参数,线程id,就是要等待的线程ID
第二个参数用来接受线程函数的返回值,如果没有返回值,就直接设为NULL。
- C语言实现并行求和算法
- C语言实现并行求和算法
- Go语言实现并行分段求和计算
- 并行前缀求和的算法
- c语言实现分数数列求和
- C语言 素数求和(函数实现)
- 【C语言】 计数、求和、求阶乘等简单算法
- C语言Scanf函数剖析以及数字求和算法
- 判断素数并求和用平方根算法(C语言)
- C语言算法例题——a+aa+aaa...求和
- 分治法求和C语言-算法设计实验2
- c算法-阶乘求和
- PAT 2-06 数列求和(C语言实现)
- <C语言超大数求和>实现思路及源码
- 用c语言实现1+2+3+...+n求和
- 康威生命游戏C语言实现(串行+intrinsics并行)
- PageRank算法并行实现
- PageRank算法并行实现
- dll 详解与调用
- IP问问:网络欺诈的常见方式
- Android开发中出现的错误集(不断更新)
- 在SpringMVC中使用JSON的配置
- MATLAB 2015B 破解版 安装详细教程
- C语言实现并行求和算法
- androidstudio cmake指定so文件输出目录
- java迭代器自实现
- HashMap和Hashtable
- Python 天气预报
- 利用sklearn做房价预测
- Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- js模块化开发三
- React路由