情景
我正在使用 C99 ANSI C 开发一个使用OpenMP和GMP的应用程序。它的自然栖息地将是具有大量内核的 linux 机器,所以那里基本上没有什么大问题,但由于我不想在这里讨论的原因,我必须在 64 位 Windows 机器上在 Cygwin 下开发。
当我使用 32 位版本的 gcc 时,某处出现了可怕的错误,并且应用程序比非常粗糙的单线程版本慢了大约 60 倍,而实际上它应该比 CPU 的数量更快. 它使工作变得不可能。我真的不知道是什么原因造成的;无论如何,我已经决定改用 64 位版本的 MinGW,x86_64-w64-mingw32-gcc-4.5.3
确切地说是和他的朋友。
附注:我确信减速不是我的多线程中的缺陷,多线程应用程序在 linux 机器上工作正常且速度更快。
实际问题
设置 GMP 很容易,它可以从源代码编译而没有任何麻烦,然后就像一个魅力一样工作。编译下面的简单示例-fopenmp
也很有魅力:
#include <gmp.h>
#include <omp.h>
int main() {
#pragma omp parallel
{
mpz_t t;
mpz_init(t);
mpz_set_si(t,omp_get_thread_num());
# pragma omp critical
{
gmp_printf("Hello From GMP'd Thread %Zd!\n",t);
fflush(stdout);
}
mpz_clear(t);
}
return 0;
}
但是,执行它给了我
$ ./test
test.exe: error while loading shared libraries: ?:
cannot open shared object file: No such file or directory
我知道这个问题,但我想在不下载任何二进制文件的情况下完成这项工作,而不是从官方 Cygwin 存储库下载任何二进制文件。由于我的示例是使用-fopenmp
switch 编译的,我相信这也应该是很有可能的。
有人可以帮我吗?提前感谢一堆。