如果数组的元素b=[1,2,3,4,5]等于1或2或5,我想返回true .我该怎么做?
更新:我有问题,我不知道它是什么.我有一个MPI_INIT和MPI_FINALIZE测试程序.我有一个包含5个子程序的模块:3个子程序是相关的,独立于2个其他子程序.我想将测试程序中的MPI代码放入此模块中.我将MPI_INIT放在声明变量的模块中以及子例程之前.我使用相同的错误消息获取了一系列错误:
This statement must not appear in the specification part of a module
Run Code Online (Sandbox Code Playgroud)
"MPI_INIT和MPI_FINALIZE应该只调用一次"如何影响Fortran程序,模块和子程序?如果有多个独立的程序,每个调用该模块的子程序多次,我应该把MPI函数和变量放在哪里?
~~~~~~~~~我有一个包含一系列子程序的模块,其中包含我希望并行化的do循环.子例程是公共的,其他程序使用.我应该在子程序之外定义MPI:
module ...
call MPI_INIT
subroutine 1
... (MPI code)
subroutine 2
subroutine 3
MPI_GATHERV
call MPI_FINALIZE
module
Run Code Online (Sandbox Code Playgroud)
或者在每个子程序里面?
module ...
subroutine 1
call MPI_INIT
... (MPI code)
MPI_GATHERV
call MPI_FINALIZE
subroutine 2
call MPI_INIT
... (MPI code)
MPI_GATHERV
call MPI_FINALIZE
subroutine 3
call MPI_INIT
... (MPI code)
MPI_GATHERV
call MPI_FINALIZE
module
Run Code Online (Sandbox Code Playgroud)
我认为遵循粗粒原理的优点是解决方案1.如果一个程序调用子程序1,它还会在子程序之外执行MPI代码吗?
我正在关注这个例子,我的程序看起来像这样:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
struct Foo
{
int x;
int array[100];
};
struct Foo f;
f.x = 54;
f.array[3]=9;
void print(void){
printf("%u", f.x);
}
int main(){
print();
}
Run Code Online (Sandbox Code Playgroud)
但是,编译时我遇到错误make example_1:
example_1.c:13:1: error: unknown type name 'f'
f.x = 54;
^
example_1.c:13:2: error: expected identifier or '('
f.x = 54;
^
example_1.c:14:1: error: unknown type name 'f'
f.array[3]=9;
^
example_1.c:14:2: error: expected identifier or '('
f.array[3]=9;
^
4 errors generated.
make: *** [example_1] Error …Run Code Online (Sandbox Code Playgroud) 我想释放一些我没有指针的内存块.在我的计划,我打电话malloc顺序,希望内存中创建的malloc(1),malloc(4),malloc(5)是连续的.然后,当我只有指针时,我释放这些内存malloc(5).但我想不出如何做到这一点; 我不能简单地创建一个引用ptr [-5]地址的指针,然后释放5个字节的内存?如何才能做到这一点?
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
malloc(1);
malloc(4);
char* ptr = malloc(5);
free(ptr);
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,它有一个写入线程和几个读取线程,用于写入/读取磁盘上的文件。我希望写入/读取不会同时发生。我发现了很多使用pthread互斥锁在写入/读取期间保护内存阵列的示例,例如将受保护的内存数组声明为易失性。
volatile int array[NUMBER];
pthread_mutex_t locks[NUMBER];
pthread_mutex_lock(&locks[index]);
array[acct] -= SOME_NUMBER;
pthread_mutex_unlock(&locks[index]);
Run Code Online (Sandbox Code Playgroud)
但我找不到使用 pthread 保护磁盘上文件的示例。
volatile FILE* array[NUMBER]; ??
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?我希望写/读线程不会同时访问磁盘上的文件。
编辑:我阅读了更多内容,根据这篇文章,多线程似乎不适用于磁盘 IO。