zoukankan      html  css  js  c++  java
  • 并行计算课程上机作业

    第一节课:

    估算面积分析 曲线y=-x4+x3+1与x轴围成的面积 图形范围: -1 < x < 2, 0 <= y < 2.2 整体面积为 6.6 划成小块,以块大小0.1*0.1为例 X方向分为30块 Y方向分为22块 计算每一块是否在图形中 面积=6.6*图形中的块数/总块数

    参考代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    //计算1/1+1/2+1/3+1/4+…+1/1000
    
    double res;   // res是全局变量,用来计算最终的结果
    
    typedef struct Args {
        long n;
        long begin;
        long step;
    } Args;
    
    void *cal(void *arg);
    
    int main(int argc, char *argv[]) {
        long i;
        long n = atol(argv[1]);   // n为计算的数据量
        int np = atoi(argv[2]);        // np为线程数
        Args *arg;
        double* val;
    
        pthread_t *pid;         // 用于声明线程ID
        pid = (pthread_t *)malloc(np * sizeof(pthread_t));
        
        res = 0.0;
        for (i = 0; i < np; i++) {
            arg = (Args *)malloc(sizeof(Args));
            arg->n = n;
            arg->begin = i+1;
            arg->step = np;
            pthread_create(&pid[i], NULL, cal, (void *)arg);
        }
        for (i = 0; i < np; i++) {
            pthread_join(pid[i], (void *)val); // 用来等待一个线程的结束,线程间同步的操作
        }
        printf("233#%lf
    ", res);
        free(pid);
        return 0;
    }
    
    void *cal(void *_arg) {
        long i;
        double val;
        Args *arg = (Args *)_arg;
        
        val = 0.0;
        for (i = arg->begin; i <= arg->n; i += arg->step) {
            val += 1.0 / i;
        }
        res += val;
        return NULL;
    }
    View Code

    我的代码

    出错的地方:

    (1)运行qsub命令时,报错script is written in DOS/Windows text format。

      解决办法:输入 dos2unix  <pbs-script-file> (就是dos2unix filename)

    (2)使用argv传递5个参数时结果总是不对,错误的地方是错用了atol,我传入的参数时double型,需要使用atof来将字符串转换为double型,使用atol会转换成long型

  • 相关阅读:
    Linux常用操作命令大全
    判断系统,是否是移动端
    一款兼容小程序和web端的框架 Kbone-API
    defer 和 async的区别
    快应用多次弹出添加到桌面的bug
    js判断一个元素是否在数组中
    css 画太极
    css3锯齿
    js 获取屏幕宽度
    js 判断div距离浏览器顶部或者底部的距离
  • 原文地址:https://www.cnblogs.com/vactor/p/7737852.html
Copyright © 2011-2022 走看看