c - 在 C 中使用 MPI 从文件中读取数据块
问题描述
我有一大块数据存储在一个文件(v_1 到 v_5)中。使用这些数据,我必须计算(v_6 到 v_9)和协方差矩阵。现在我必须将我的通用代码转换为 MPI,用于负责读取数据并检查数据读取正确性的部分。我无法理解如何在我的代码中使用 MPI!任何人都可以帮助我,因为我是初学者。在这里,我提供了我的通用代码。
先感谢您。
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include "need.h"
#define NELEMENTS 1342177
int main(int argc, char **argv)
{
int i,k,j;
// allocate memory
double *var[10];
for (i = 0; i < 10; i++)
cppmallocl(var[i], NELEMENTS, double); // call cppmallocl from need.h
// Read binary data
FILE *fp;
char file_name[128];
for (i = 0; i < 5; i++)
{
sprintf(file_name, "/home/data/var%d.dat", i + 1);
printf("# DATA: `%s`...\n", file_name);
fp = fopen(file_name, "rb");
if (fp == NULL)
{
printf("# ERROR: Cannot open `%s`!\n", file_name);
return EXIT_FAILURE;
}
size_t ftest = fread(var[i], sizeof(double), NELEMENTS, fp);
if (ftest != NELEMENTS)
{
printf("# ERROR: Cannot read `%s`!\n", file_name);
return EXIT_FAILURE;
}
fclose(fp);
}
// v_6, ..., v_10
for(i=0;i<NELEMENTS;i++)
{
var[5][i] = cos(var[0][i]);
var[6][i] = (-1 * (exp(var[4][i])));
var[7][i] = cos(var[0][i])) + sin(var[2][i]));
var[8][i] = hypot(var[3][1], var[1][i]);
var[9][i] = cbrt(var[3][i]);
}
// covariance matrix
double cov[10][10];
double average[10];
// average
for( i = 0; i < 10; i++)
{
double sum= 0.0;
for (j=0;j< NELEMENTS;j++)
{
sum = sum + var[i][j];
}
average[i] = sum /NELEMENTS;
}
// covariance
for (i = 0; i < 10; i++)
{
for (j=0; j<10;j++)
{ if (i>=j)
{
double covsum = 0.0;
for(k=0;k<NELEMENTS;k++)
{
covsum = covsum + (var[i][k] - average[i]) * (var[j][k] - average[j]);
}
cov[i][j] = covsum /(NELEMENTS-1);
}
}
}
// print
for (i = 0; i < 10; i++)
for (j = 0; j <= i; j++)
printf("cov(%2d,%2d)=%16.8g\n", i + 1, j + 1, cov[i][j]);
return (EXIT_SUCCESS);
}
解决方案
推荐阅读
- azure - 如何将 JWT 版本更新到 2.0?
- opencv - 循环迭代正确,但对于视频帧,它仅适用于前四个索引
- java - 如何仅打印二维数组的最后一列字符串长度?
- ios - 我们能区分 Physical Sim 和 Esim 信息吗?由 CTCarrier 收到
- sql - 来自递归 sql 查询的分层列表
- cloning - 使用 website-scraper-puppeteer 克隆网站
- sap-ase - sybase 表在插入语句末尾用分号锁定
- android - 创建虚拟显示后调用 release() 不起作用
- r - 如何替换r中列中字符串的第二个字符
- flutter - 如何在 Flutter 中创建如下所示的 UI