Alien-OpenMP
view release on metacpan or search on metacpan
t/02-with.t view on Meta::CPAN
BEGIN {
# https://bugs.llvm.org/show_bug.cgi?id=50579
$ENV{LIBOMP_USE_HIDDEN_HELPER_TASK} = $ENV{LIBOMP_NUM_HIDDEN_HELPER_THREADS} = 0 if $^O eq 'darwin';
}
use strict;
use warnings;
use Test::More;
use Test::Needs 'Inline::C';
use Alien::OpenMP;
use File::Temp ();
Inline->import(
C => do { local $/ = undef; <DATA> },
filters => [ sub { (my $filt = $_[0]) =~ s/^__C__$//mg; $filt } ],
with => qw/Alien::OpenMP/,
directory => ( my $tmp = File::Temp::tempdir() ),
build_noisy => !!$ENV{HARNESS_IS_VERBOSE}
);
for my $num_threads (qw/1 2 4 8 16 32 64 128 256/) {
is test($num_threads), $num_threads, qq{Ensuring compiled OpenMP program works as expected. Threads = $num_threads};
}
{
local %ENV = %ENV;
$ENV{CC} = q{gcc};
my $config_ref = Alien::OpenMP->Inline('C');
like $config_ref->{CCFLAGSEX}, qr/-fopenmp/, q{inspecting value of CCFLAGSEX.};
like $config_ref->{LDDLFLAGS}, qr/(?:-lomp|-fopenmp)/, q{inspecting value of LDDLFLAGS.};
is $config_ref->{AUTO_INCLUDE}, q{#include <omp.h>}, q{inspecting value of AUTO_INCLUDE.};
}
done_testing;
__DATA__
__C__
#include <stdio.h>
int test(int num_threads) {
omp_set_num_threads(num_threads);
int ans = 0;
#pragma omp parallel
#pragma omp master
ans = omp_get_num_threads(); // done in parallel section, but only by master thread (0)
return ans;
}
( run in 0.384 second using v1.01-cache-2.11-cpan-411bb0df24b )