Сценарий
Я разрабатываю приложение на C99 ANSI C, которое использует OpenMP и GMP. Его естественной средой обитания будет Linux-машина с большим количеством ядер, так что особых проблем здесь нет, но по причинам, которые я не хочу обсуждать здесь, я должен разрабатывать под Cygwin на 64-битной Windows-машине.
Когда я использую 32-битную версию gcc, что-то где-то идет ужасно неправильно, и приложение работает примерно в 60 раз медленнее, чем очень грубая однопоточная версия, хотя на самом деле оно должно быть быстрее на коэффициент, равный количеству процессоров. . С ним невозможно работать. Я действительно не знаю, что вызывает это; В любом случае, я решил вместо этого использовать 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
, я убежден, что это также вполне возможно.
Может ли кто-нибудь помочь мне с этим? Большое спасибо заранее.
-static
? - person Hristo Iliev   schedule 17.11.2012?
. Не могли бы вы попробовать получить более новую сборку GCC? - person Hristo Iliev   schedule 17.11.2012