Schrift
[thread]7843[/thread]

Effizienz von Inline C



<< >> 5 Einträge, 1 Seite
master
 2006-03-31 12:24
#64224 #64224
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Kann Inline C von Perl mit dem Speed normalen C's mithalten?
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
esskar
 2006-03-31 12:30
#64225 #64225
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich nehme mal an, es passiert folgendes:

Perl interpretiert dein Script; das Inline C wird an deinen C-Compiler weitergereicht und compiliert und dann via XS ausgeführt. Ich denke mal, dass modul ist so schlau, dass es das compilieren nur dann ausführt, wenn eine Änderung am C Code erfolgt ist. Wenn nicht, dann dauert das interpertieren des Scriptes recht lange. Sobald die Sache mal läuft, wird es wohls schnell sein. Für eine Applikation, die lange Läuft kann das Vorteile haben. Ansonsten würde ich aber direkt XS benutzen.
pq
 2006-03-31 13:02
#64226 #64226
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=esskar,31.03.2006, 10:30]Ich denke mal, dass modul ist so schlau, dass es das compilieren nur dann ausführt, wenn eine Änderung am C Code erfolgt ist.[/quote]
ist es natürlich.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
master
 2006-03-31 13:07
#64227 #64227
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Es geht hauptsächlich darum subs

in C zu schreiben die schnell sein sollen.

Der code wird nicht geändert aber die von Perl an C übergebenen Variablen.

&brechne(@array);

und in der sub berechne ist dann z. B alles in C.
mit einem return wert.
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Taulmarill
 2006-03-31 13:17
#64228 #64228
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
die subroutine selbst sollte genau so schnell sein, als hättest du sie mit dem gcc compiliert und ausgeführt. die subroutine selbst aufzurufen und ihr die variablen zu übergeben kostet allerdings ein bischen und wie schon gesagt wird der C-code nach jeder änderung neu compiliert.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
<< >> 5 Einträge, 1 Seite



View all threads created 2006-03-31 12:24.