在OSX上使用openMP支持安装gcc的一种方法是使用Homebrew.但是,当我遵循通常的指示
brew reinstall gcc --without-multilib
它给了我一个警告,说明没有与该--without-multilib选项相对应的公式,因此这将没有任何效果.因此,在重新安装过程之后,我没有openMP支持.这是详细的终端输出.
poulin8:02-prange-parallel-loops poulingroup$ brew --version
Homebrew 1.3.6
Homebrew/homebrew-core (git revision b5afc; last commit 2017-10-27)
poulin8:02-prange-parallel-loops poulingroup$ brew reinstall gcc --without-multilib
==> Reinstalling gcc
Warning: gcc: this formula has no --without-multilib option so it will be ignored!
==> Downloading https://homebrew.bintray.com/bottles/gcc-7.2.0.el_capitan.bottle
Already downloaded: /Users/poulingroup/Library/Caches/Homebrew/gcc-7.2.0.el_capitan.bottle.tar.gz
==> Pouring gcc-7.2.0.el_capitan.bottle.tar.gz
/usr/local/Cellar/gcc/7.2.0: 1,486 files, 289.8MB
poulin8:02-prange-parallel-loops poulingroup$
Run Code Online (Sandbox Code Playgroud)
在包含omp.h在文件和编译中,我得到错误
julia.c:447:10: fatal error: 'omp.h' file not found
#include <omp.h>
^
1 error generated.
error: command …Run Code Online (Sandbox Code Playgroud) 我有一个使用几个指针,例如一个C程序int **,float **,double **,long **,等最后,我想以释放被分配给他们的空间.
为了模块化,我有一个函数可以获取指针到指针的形式的对象并释放为它分配的内存空间.例如,对于变量类型,以下内容int **.
void FreeIntArray(int **A, int length){
int i;
for (i = 0; i < length; i ++)
free(A[i]);
free(A);
}
Run Code Online (Sandbox Code Playgroud)
然而,以释放形式的可变float **或double **,我需要编写另一个功能几乎是上面的一个的碳副本,除改变int **到float **在函数定义.
是设计,可以自由分配到以下任一数据类型的空间功能单一的方式:int **,float **,double **,long **?
我正在尝试用C编写程序来完成以下任务.
输入:三个双精度数,a,b和c.
输出:从b到a的所有数字,可以通过c的减量达到.
这是一个简单的程序(filename:range.c).
#include <stdlib.h>
#include <stdio.h>
int main()
{
double high, low, step, var;
printf("Enter the <lower limit> <upperlimit> <step>\n>>");
scanf("%lf %lf %lf", &low, &high, &step);
printf("Number in the requested range\n");
for (var = high; var >= low; var -= step)
printf("%g\n", var);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然而,对于某些输入,for循环表现得相当奇怪.例如,以下内容.
10-236-49-81:stackoverflow pavithran$ ./range.o
Enter the <lower limit> <upperlimit> <step>
>>0.1 0.9 0.2
Number in the requested range
0.9
0.7
0.5
0.3
10-236-49-81:stackoverflow pavithran$
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么循环在var = 0.1时退出.而对于另一个输入,它的行为与预期的一样.
10-236-49-81:stackoverflow pavithran$ ./range.o
Enter the …Run Code Online (Sandbox Code Playgroud) 我正在尝试一个简单的 Open MP 示例来并行化 for 循环,但我看不到 for 循环正在多个内核上执行。
这是C程序:
#include </usr/local/Cellar/gcc/5.1.0/lib/gcc/5/gcc/x86_64-apple-darwin14.5.0/5.1.0/include/omp.h>
#include <stdio.h>
#include <unistd.h>
int main() {
int n;
#pragma omp parallel
{
#pragma omp for
for(n = 0; n < 10; n++)
printf(" Thread %d: %d\n", omp_get_thread_num(), n);
printf("Number of threads: %d\n", omp_get_num_threads());
}
printf("Total number of cores in the CPU: %ld\n", sysconf(_SC_NPROCESSORS_ONLN));
}
Run Code Online (Sandbox Code Playgroud)
上面的代码与这个例子非常相似。
当我执行这个程序并打印出它正在使用的线程总数(默认情况下它应该是 CPU 内核总数)时,我找到了结果1。这是输出:
10:pavithran$ gcc -fopenmp openMPExample.c -o openMPExample.o
10:pavithran$ ./openMPExample.o
Thread 0: 0
Thread 0: 1
Thread 0: …Run Code Online (Sandbox Code Playgroud)