Skip to content

Instantly share code, notes, and snippets.

@zmughal

zmughal/marp.pl Secret

Forked from wchristian/marp.pl
Last active December 21, 2015 06:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zmughal/2f15c631cc52a98ecdf0 to your computer and use it in GitHub Desktop.
Save zmughal/2f15c631cc52a98ecdf0 to your computer and use it in GitHub Desktop.
use strict;
use warnings;
use 5.010;
use PDL; # must be called before (!) 'use Inline Pdlpp' calls
use IO::All -binary;
use Inline 'Pdlpp' => io( "pdlpp.pm" )->all;
use Benchmark 'timethis';
my $v = transpose pdl q( [ 1, 0, 0; 1 0 0 ] );
$v->rotate( 180, transpose pdl( 0, 1, 0 ) );
say $v;
my $vec = pdl( 1, 0, 0 );
my $axis = pdl( 0, 1, 0 );
timethis( 40000, sub { $vec->rotate( 180, $axis ) } );
use strict;
pp_def(
'rotate',
Pars => 'vec(n); angle(); axis(n)',
Code => q{
double PI = 3.141592653589793;
double SinHalfAngle = sin( $angle() / 2.0 / 180.0 * PI );
double CosHalfAngle = cos( $angle() / 2.0 / 180.0 * PI );
// rotation quaternion
double Rx = $axis(n=>0) * SinHalfAngle;
double Ry = $axis(n=>1) * SinHalfAngle;
double Rz = $axis(n=>2) * SinHalfAngle;
double Rw = CosHalfAngle;
double Vx = $vec(n=>0);
double Vy = $vec(n=>1);
double Vz = $vec(n=>2);
double Vw = 0;
// first step
double x1 = ( Rx * Vw ) + ( Rw * Vx ) + ( Ry * Vz ) - ( Rz * Vy );
double y1 = ( Ry * Vw ) + ( Rw * Vy ) + ( Rz * Vx ) - ( Rx * Vz );
double z1 = ( Rz * Vw ) + ( Rw * Vz ) + ( Rx * Vy ) - ( Ry * Vx );
double w1 = ( Rw * Vw ) - ( Rx * Vx ) - ( Ry * Vy ) - ( Rz * Vz );
// conjugated quaternion
double Qx = Rx * -1;
double Qy = Ry * -1;
double Qz = Rz * -1;
double Qw = CosHalfAngle;
// second step
double x2 = ( x1 * Qw ) + ( w1 * Qx ) + ( y1 * Qz ) - ( z1 * Qy );
double y2 = ( y1 * Qw ) + ( w1 * Qy ) + ( z1 * Qx ) - ( x1 * Qz );
double z2 = ( z1 * Qw ) + ( w1 * Qz ) + ( x1 * Qy ) - ( y1 * Qx );
double w2 = ( w1 * Qw ) - ( x1 * Qx ) - ( y1 * Qy ) - ( z1 * Qz );
$vec(n=>0) = x2;
$vec(n=>1) = y2;
$vec(n=>2) = z2;
},
);
[
[ 3.7493995e-33 3.7493995e-33]
[3.2608333e-322 3.2608333e-322]
[ 0 0]
]
timethis 40000: 0 wallclock secs ( 0.23 usr + 0.00 sys = 0.23 CPU) @ 173913.04/s (n=40000)
(warning: too few iterations for a reliable count)
*** Error in `perl': free(): invalid next size (fast): 0x0000000002387bd0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7aa26)[0x7ff1adc29a26]
/lib/x86_64-linux-gnu/libc.so.6(+0x7b7a3)[0x7ff1adc2a7a3]
/usr/lib/libperl.so.5.14(Perl_sv_clear+0x343)[0x7ff1ae737903]
/usr/lib/libperl.so.5.14(Perl_sv_free2+0x52)[0x7ff1ae7381d2]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl__free+0x1e9)[0x7ff1acd42d39]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x258)[0x7ff1acd442e8]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroytransform+0x24c)[0x7ff1acd43d3c]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x2d4)[0x7ff1acd44364]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroytransform+0x24c)[0x7ff1acd43d3c]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x2d4)[0x7ff1acd44364]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroytransform+0x24c)[0x7ff1acd43d3c]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(pdl_destroy+0x2d4)[0x7ff1acd44364]
/usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so(XS_PDL_DESTROY+0xb3)[0x7ff1acd37003]
/usr/lib/libperl.so.5.14(Perl_pp_entersub+0x58c)[0x7ff1ae73164c]
/usr/lib/libperl.so.5.14(Perl_call_sv+0x611)[0x7ff1ae6c4ad1]
/usr/lib/libperl.so.5.14(Perl_sv_clear+0x559)[0x7ff1ae737b19]
/usr/lib/libperl.so.5.14(Perl_sv_free2+0x52)[0x7ff1ae7381d2]
/usr/lib/libperl.so.5.14(Perl_leave_scope+0x122f)[0x7ff1ae75fc2f]
/usr/lib/libperl.so.5.14(Perl_pp_leave+0xf2)[0x7ff1ae72e052]
/usr/lib/libperl.so.5.14(Perl_runops_standard+0x16)[0x7ff1ae728c26]
/usr/lib/libperl.so.5.14(perl_run+0x3a5)[0x7ff1ae6ca755]
perl(main+0x149)[0x400f89]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7ff1adbd0995]
perl[0x400fc1]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:02 7464200 /usr/bin/perl
00601000-00602000 r--p 00001000 08:02 7464200 /usr/bin/perl
00602000-00603000 rw-p 00002000 08:02 7464200 /usr/bin/perl
0180a000-023c7000 rw-p 00000000 00:00 0 [heap]
7ff1aa3f6000-7ff1aa40c000 r-xp 00000000 08:02 6463527 /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff1aa40c000-7ff1aa60b000 ---p 00016000 08:02 6463527 /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff1aa60b000-7ff1aa60c000 rw-p 00015000 08:02 6463527 /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff1aa646000-7ff1aa64d000 r-xp 00000000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so
7ff1aa64d000-7ff1aa84c000 ---p 00007000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so
7ff1aa84c000-7ff1aa84d000 r--p 00006000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so
7ff1aa84d000-7ff1aa84e000 rw-p 00007000 08:02 6463732 /lib/x86_64-linux-gnu/librt-2.17.so
7ff1aa84e000-7ff1aa853000 r-xp 00000000 08:02 7668276 /usr/lib/perl/5.14.2/auto/Time/HiRes/HiRes.so
7ff1aa853000-7ff1aaa52000 ---p 00005000 08:02 7668276 /usr/lib/perl/5.14.2/auto/Time/HiRes/HiRes.so
7ff1aaa52000-7ff1aaa53000 rw-p 00004000 08:02 7668276 /usr/lib/perl/5.14.2/auto/Time/HiRes/HiRes.so
7ff1aaa53000-7ff1aaa5a000 r-xp 00000000 08:02 1089761 /tmp/1ac83b4973ad61a9870f/_Inline/lib/auto/marp_pl_9a66/marp_pl_9a66.so
7ff1aaa5a000-7ff1aac59000 ---p 00007000 08:02 1089761 /tmp/1ac83b4973ad61a9870f/_Inline/lib/auto/marp_pl_9a66/marp_pl_9a66.so
7ff1aac59000-7ff1aac5a000 rw-p 00006000 08:02 1089761 /tmp/1ac83b4973ad61a9870f/_Inline/lib/auto/marp_pl_9a66/marp_pl_9a66.so
7ff1aac5a000-7ff1aac5e000 r-xp 00000000 08:02 574486 /usr/local/lib/perl/5.14.2/auto/Digest/MD5/MD5.so
7ff1aac5e000-7ff1aae5d000 ---p 00004000 08:02 574486 /usr/local/lib/perl/5.14.2/auto/Digest/MD5/MD5.so
7ff1aae5d000-7ff1aae5e000 rw-p 00003000 08:02 574486 /usr/local/lib/perl/5.14.2/auto/Digest/MD5/MD5.so
7ff1aae5e000-7ff1aae60000 r-xp 00000000 08:02 7667781 /usr/lib/perl/5.14.2/auto/Cwd/Cwd.so
7ff1aae60000-7ff1ab05f000 ---p 00002000 08:02 7667781 /usr/lib/perl/5.14.2/auto/Cwd/Cwd.so
7ff1ab05f000-7ff1ab060000 rw-p 00001000 08:02 7667781 /usr/lib/perl/5.14.2/auto/Cwd/Cwd.so
7ff1ab060000-7ff1ab06c000 r-xp 00000000 08:02 8667316 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Pnm/Pnm.so
7ff1ab06c000-7ff1ab26b000 ---p 0000c000 08:02 8667316 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Pnm/Pnm.so
7ff1ab26b000-7ff1ab26c000 rw-p 0000b000 08:02 8667316 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Pnm/Pnm.so
7ff1ab26c000-7ff1ab271000 r-xp 00000000 08:02 8667322 /usr/local/lib/perl/5.14.2/auto/PDL/ImageRGB/ImageRGB.so
7ff1ab271000-7ff1ab470000 ---p 00005000 08:02 8667322 /usr/local/lib/perl/5.14.2/auto/PDL/ImageRGB/ImageRGB.so
7ff1ab470000-7ff1ab471000 rw-p 00004000 08:02 8667322 /usr/local/lib/perl/5.14.2/auto/PDL/ImageRGB/ImageRGB.so
7ff1ab471000-7ff1ab47a000 r-xp 00000000 08:02 8667317 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Misc/Misc.so
7ff1ab47a000-7ff1ab679000 ---p 00009000 08:02 8667317 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Misc/Misc.so
7ff1ab679000-7ff1ab67a000 rw-p 00008000 08:02 8667317 /usr/local/lib/perl/5.14.2/auto/PDL/IO/Misc/Misc.so
7ff1ab67a000-7ff1ab67c000 r-xp 00000000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so
7ff1ab67c000-7ff1ab87b000 ---p 00002000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so
7ff1ab87b000-7ff1ab87c000 r--p 00001000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so
7ff1ab87c000-7ff1ab87d000 rw-p 00002000 08:02 7675989 /usr/lib/perl/5.14.2/auto/attributes/attributes.so
7ff1ab87d000-7ff1ab89e000 r-xp 00000000 08:02 8667320 /usr/local/lib/perl/5.14.2/auto/PDL/Bad/Bad.so
7ff1ab89e000-7ff1aba9e000 ---p 00021000 08:02 8667320 /usr/local/lib/perl/5.14.2/auto/PDL/Bad/Bad.so
7ff1aba9e000-7ff1aba9f000 rw-p 00021000 08:02 8667320 /usr/local/lib/perl/5.14.2/auto/PDL/Bad/Bad.so
7ff1aba9f000-7ff1abb42000 r-xp 00000000 08:02 8667323 /usr/local/lib/perl/5.14.2/auto/PDL/Ufunc/Ufunc.so
7ff1abb42000-7ff1abd42000 ---p 000a3000 08:02 8667323 /usr/local/lib/perl/5.14.2/auto/PDL/Ufunc/Ufunc.so
7ff1abd42000-7ff1abd45000 rw-p 000a3000 08:02 8667323 /usr/local/lib/perl/5.14.2/auto/PDL/Ufunc/Ufunc.so
7ff1abd45000-7ff1abe01000 r-xp 00000000 08:02 8667328 /usr/local/lib/perl/5.14.2/auto/PDL/Primitive/Primitive.so
7ff1abe01000-7ff1ac000000 ---p 000bc000 08:02 8667328 /usr/local/lib/perl/5.14.2/auto/PDL/Primitive/Primitive.so
7ff1ac000000-7ff1ac003000 rw-p 000bb000 08:02 8667328 /usr/local/lib/perl/5.14.2/auto/PDL/Primitive/Primitive.so
7ff1ac003000-7ff1ac04a000 r-xp 00000000 08:02 8667324 /usr/local/lib/perl/5.14.2/auto/PDL/Math/Math.so
7ff1ac04a000-7ff1ac249000 ---p 00047000 08:02 8667324 /usr/local/lib/perl/5.14.2/auto/PDL/Math/Math.so
7ff1ac249000-7ff1ac24c000 rw-p 00046000 08:02 8667324 /usr/local/lib/perl/5.14.2/auto/PDL/Math/Math.so
7ff1ac24c000-7ff1ac261000 r-xp 00000000 08:02 8667330 /usr/local/lib/perl/5.14.2/auto/PDL/MatrixOps/MatrixOps.so
7ff1ac261000-7ff1ac461000 ---p 00015000 08:02 8667330 /usr/local/lib/perl/5.14.2/auto/PDL/MatrixOps/MatrixOps.so
7ff1ac461000-7ff1ac462000 rw-p 00015000 08:02 8667330 /usr/local/lib/perl/5.14.2/auto/PDL/MatrixOps/MatrixOps.so
7ff1ac462000-7ff1ac465000 r-xp 00000000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so
7ff1ac465000-7ff1ac664000 ---p 00003000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so
7ff1ac664000-7ff1ac665000 r--p 00002000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so
7ff1ac665000-7ff1ac666000 rw-p 00003000 08:02 7741934 /usr/lib/perl5/auto/Filter/Util/Call/Call.so
7ff1ac666000-7ff1ac66a000 r-xp 00000000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so
7ff1ac66a000-7ff1ac869000 ---p 00004000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so
7ff1ac869000-7ff1ac86a000 r--p 00003000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so
7ff1ac86a000-7ff1ac86b000 rw-p 00004000 08:02 5300246 /usr/lib/perl/5.14.2/auto/IO/IO.so
7ff1ac86b000-7ff1ac8ca000 r-xp 00000000 08:02 8667367 /usr/local/lib/perl/5.14.2/auto/PDL/Slices/Slices.so
7ff1ac8ca000-7ff1acac9000 ---p 0005f000 08:02 8667367 /usr/local/lib/perl/5.14.2/auto/PDL/Slices/Slices.so
7ff1acac9000-7ff1acacb000 rw-p 0005e000 08:02 8667367 /usr/local/lib/perl/5.14.2/auto/PDL/Slices/Slices.so
7ff1acacb000-7ff1acb28000 r-xp 00000000 08:02 8667370 /usr/local/lib/perl/5.14.2/auto/PDL/Ops/Ops.so
7ff1acb28000-7ff1acd28000 ---p 0005d000 08:02 8667370 /usr/local/lib/perl/5.14.2/auto/PDL/Ops/Ops.so
7ff1acd28000-7ff1acd2a000 rw-p 0005d000 08:02 8667370 /usr/local/lib/perl/5.14.2/auto/PDL/Ops/Ops.so
7ff1acd2a000-7ff1acd4f000 r-xp 00000000 08:02 8667369 /usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so
7ff1acd4f000-7ff1acf4f000 ---p 00025000 08:02 8667369 /usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so
7ff1acf4f000-7ff1acf50000 rw-p 00025000 08:02 8667369 /usr/local/lib/perl/5.14.2/auto/PDL/Core/Core.so
7ff1acf50000-7ff1acf56000 r-xp 00000000 08:02 1400883 /usr/local/lib/perl/5.14.2/auto/File/Map/Map.so
7ff1acf56000-7ff1ad155000 ---p 00006000 08:02 1400883 /usr/local/lib/perl/5.14.2/auto/File/Map/Map.so
7ff1ad155000-7ff1ad156000 rw-p 00005000 08:02 1400883 /usr/local/lib/perl/5.14.2/auto/File/Map/Map.so
7ff1ad156000-7ff1ad158000 r-xp 00000000 08:02 8544803 /usr/local/lib/perl/5.14.2/auto/PerlIO/Layers/Layers.so
7ff1ad158000-7ff1ad357000 ---p 00002000 08:02 8544803 /usr/local/lib/perl/5.14.2/auto/PerlIO/Layers/Layers.so
7ff1ad357000-7ff1ad358000 rw-p 00001000 08:02 8544803 /usr/local/lib/perl/5.14.2/auto/PerlIO/Layers/Layers.so
7ff1ad358000-7ff1ad36b000 r-xp 00000000 08:02 7938330 /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so
7ff1ad36b000-7ff1ad56a000 ---p 00013000 08:02 7938330 /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so
7ff1ad56a000-7ff1ad56b000 rw-p 00012000 08:02 7938330 /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so
7ff1ad56b000-7ff1ad56f000 r-xp 00000000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so
7ff1ad56f000-7ff1ad76e000 ---p 00004000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so
7ff1ad76e000-7ff1ad76f000 r--p 00003000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so
7ff1ad76f000-7ff1ad770000 rw-p 00004000 08:02 5300244 /usr/lib/perl/5.14.2/auto/Fcntl/Fcntl.so
7ff1ad770000-7ff1ad778000 r-xp 00000000 08:02 7716922 /usr/local/lib/perl/5.14.2/auto/List/Util/Util.so
7ff1ad778000-7ff1ad977000 ---p 00008000 08:02 7716922 /usr/local/lib/perl/5.14.2/auto/List/Util/Util.so
7ff1ad977000-7ff1ad978000 rw-p 00007000 08:02 7716922 /usr/local/lib/perl/5.14.2/auto/List/Util/Util.so
7ff1ad978000-7ff1ad980000 r-xp 00000000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so
7ff1ad980000-7ff1adb7f000 ---p 00008000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so
7ff1adb7f000-7ff1adb80000 r--p 00007000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so
7ff1adb80000-7ff1adb81000 rw-p 00008000 08:02 6463674 /lib/x86_64-linux-gnu/libcrypt-2.17.so
7ff1adb81000-7ff1adbaf000 rw-p 00000000 00:00 0
7ff1adbaf000-7ff1add51000 r-xp 00000000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so
7ff1add51000-7ff1adf51000 ---p 001a2000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so
7ff1adf51000-7ff1adf55000 r--p 001a2000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so
7ff1adf55000-7ff1adf57000 rw-p 001a6000 08:02 6463662 /lib/x86_64-linux-gnu/libc-2.17.so
7ff1adf57000-7ff1adf5b000 rw-p 00000000 00:00 0 Aborted
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment