小编Atu*_*pta的帖子

" - >"和"."之间的区别.在C.

可能重复:C中的
箭头运算符( - >)用法

我想弄清楚"."之间的区别.和" - >"C语言中的数据访问风格.例如.

struct div{
    int quo;
    int rem;
};
Run Code Online (Sandbox Code Playgroud)

1)使用" - >"

struct div *d = malloc(sizeof(struct div));
d->quo = 8/3;
d->rem = 8%3;
printf("Answer:\n\t Quotient = %d\n\t Remainder = %d\n-----------\n",d->quo,d->rem);
Run Code Online (Sandbox Code Playgroud)

2)使用"."

struct div d;
d.quo = 8/3;
d.rem = 8%3;
printf("Answer:\n\t Quotient = %d\n\t Remainder = %d\n-----------\n",d.quo,d.rem);
Run Code Online (Sandbox Code Playgroud)

我得到两个案件的相同输出.

答案:商数= 2剩余= 2

这两种方法如何在内部运作?什么时候应该使用哪一个?我尝试在互联网上搜索但没有多大帮助.任何相关链接也表示赞赏.

他们在内存中的存储也有什么区别吗?

c

4
推荐指数
2
解决办法
1807
查看次数

在群集上运行openmp

我必须在具有不同配置的集群上运行openmp程序(例如不同数量的节点).但我遇到的问题是,每当我尝试用2个节点运行程序时,那么同一块程序运行2次而不是并行运行.

我的节目 -

gettimeofday(&t0, NULL);
for (k=0; k<size; k++) {
    #pragma omp parallel for shared(A)
    for (i=k+1; i<size; i++) {
        //parallel code
    }
    #pragma omp barrier
    for (i=k+1; i<size; i++) {
        #pragma omp parallel for
        //parallel code
    }
}

gettimeofday(&t1, NULL);
printf("Did %u calls in %.2g seconds\n", i, t1.tv_sec - t0.tv_sec + 1E-6 * (t1.tv_usec - t0.tv_usec));
Run Code Online (Sandbox Code Playgroud)

这是一个LU分解程序.当我在2节点上运行时,我得到这样的输出 -
在5.2秒内完成
1000次呼叫在5.3秒内完成1000次
呼叫在41秒内完成
2000次呼叫在41秒内完成2000次呼叫

如您所见,每个程序对每个值运行两次(1000,2000,3000 ...)而不是并行运行.这是我的家庭作业计划,但我现在陷入困境.

我正在使用SLURM脚本在我的大学计算集群上运行该程序.这是教授提供的标准脚本.

#!/bin/sh
##SBATCH --partition=general-compute
#SBATCH --time=60:00:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=2
##SBATCH --mem=24000
# Memory per …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing cluster-computing openmp

2
推荐指数
1
解决办法
3675
查看次数