Я изменяю исходный код OpenMP и хочу убедиться, что он действительно работает. Например, следующий код:
#include "omp.h"
int main()
{
int i=0;
#pragma omp parallel for schedule(dynamic,4)
for(i=0;i<1000;++i)
{
int x = 4+i;
}
}
Должен вызывать __kmpc_dispatch_init_4 (). И я проверил это, используя опцию emit-llvm в clang.
Для двойной проверки я добавил следующий оператор печати:
void __kmpc_dispatch_init_4(ident_t *loc, kmp_int32 gtid,
enum sched_type schedule, kmp_int32 lb,
kmp_int32 ub, kmp_int32 st, kmp_int32 chunk) {
KMP_DEBUG_ASSERT(__kmp_init_serial);
printf("%s\n", "Hello OpenMP");
#if OMPT_SUPPORT && OMPT_OPTIONAL
OMPT_STORE_RETURN_ADDRESS(gtid);
#endif
__kmp_dispatch_init<kmp_int32>(loc, gtid, schedule, lb, ub, st, chunk, true);
}
Но когда я компилирую код, я не получаю этот вывод на терминал.
Я компилирую код следующим образом:
llvm_build/bin/clang sc.c -L/usr/local/lib -fopenmp
И после построения исходного кода openmp вывод sudo make install
будет таким:
Install the project...
-- Install configuration: "Release"
-- Up-to-date: /usr/local/lib/libomp.so
-- Up-to-date: /usr/local/include/omp.h
-- Up-to-date: /usr/local/include/omp-tools.h
-- Up-to-date: /usr/local/include/ompt.h
-- Up-to-date: /usr/local/lib/libomptarget.so
-- Up-to-date: /usr/local/lib/libomptarget.rtl.x86_64.so
Для перекрестной проверки, если это используется, я использовал:
ldd a.out
И вывод:
linux-vdso.so.1 (0x00007fff25bb6000)
libomp.so => /usr/local/lib/libomp.so (0x00007f75a52c6000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f75a50a7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f75a4cb6000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f75a4ab2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f75a558a000)
Итак, я предполагаю, что он должен использовать код, который я изменил. Но не в состоянии увидеть выходные данные оператора печати. Я также пытался использовать fprintf (stderr, ....), но не работает.
Заранее спасибо.