From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Matthew Mundell Newsgroups: gmane.emacs.devel Subject: Re: Compilation to native Date: 30 Mar 2004 23:18:03 +0100 Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <87k712gesk.fsf@sno.mundell.ukfsn.org> References: <87eks0654s.fsf@sno.mundell.ukfsn.org> <87n06bp4ng.fsf@sno.mundell.ukfsn.org> <877jxccutf.fsf@sno.mundell.ukfsn.org> NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1080685275 15822 80.91.224.253 (30 Mar 2004 22:21:15 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 30 Mar 2004 22:21:15 +0000 (UTC) Cc: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Wed Mar 31 00:21:08 2004 Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1B8RbX-0007Hl-00 for ; Wed, 31 Mar 2004 00:21:07 +0200 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.35 #1 (Debian)) id 1B8RbX-0000Nl-00 for ; Wed, 31 Mar 2004 00:21:07 +0200 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.30) id 1B8RaO-0006lL-Q4 for emacs-devel@quimby.gnus.org; Tue, 30 Mar 2004 17:19:56 -0500 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.30) id 1B8RZv-0006kc-TO for emacs-devel@gnu.org; Tue, 30 Mar 2004 17:19:27 -0500 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.30) id 1B8RZP-0006Zo-Fs for emacs-devel@gnu.org; Tue, 30 Mar 2004 17:19:26 -0500 Original-Received: from [217.158.120.143] (helo=mail.ukfsn.org) by monty-python.gnu.org with esmtp (Exim 4.30) id 1B8RYb-0006PH-Sl; Tue, 30 Mar 2004 17:18:06 -0500 Original-Received: from localhost (lucy.ukfsn.org [127.0.0.1]) by mail.ukfsn.org (Postfix) with ESMTP id BC558E6DE3; Tue, 30 Mar 2004 23:16:53 +0100 (BST) Original-Received: from mail.ukfsn.org ([127.0.0.1]) by localhost (lucy.ukfsn.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 18225-05; Tue, 30 Mar 2004 23:16:53 +0100 (BST) Original-Received: from sno.mundell.ukfsn.org (dsl213-218-238-16.as15444.net [213.218.238.16]) by mail.ukfsn.org (Postfix) with ESMTP id 6C1AFE6DD7; Tue, 30 Mar 2004 23:16:53 +0100 (BST) Original-Received: from sno.mundell.ukfsn.org ([10.0.0.3]) by sno.mundell.ukfsn.org with esmtp (Exim 3.36 #1 (Debian)) id 1B8RYa-0000en-00; Tue, 30 Mar 2004 23:18:04 +0100 Original-To: rms@gnu.org Original-Lines: 56 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.4 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:21105 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:21105 Richard Stallman writes: > The loop _is_ purely computational. > > I was fooled by the indentation, which makes it appear > that the call to current-time-string is inside the loop. > See? > > (defun silly-loop (n) > "Return time before and after N iterations of a loop." > (let ((t1 (current-time-string))) > (while (> (setq n (1- n)) > 0)) > (list t1 (current-time-string)))) > > Anyway, such a small speedup is not worth the trouble. > Compilation of CCL may be worth while. Or optimization > of the CCL interpreter may be possible. This is for the record, at least. The speedup is a little better with Fgtr inlined into the native, a few excess memory instructions saved, and, where possible, objects passed between byte operations using registers instead of the stack. Byte compiled: ("Tue Mar 30 21:54:05 2004" "Tue Mar 30 21:54:21 2004") 16 s ("Tue Mar 30 21:54:26 2004" "Tue Mar 30 21:54:42 2004") 16 s ("Tue Mar 30 21:54:45 2004" "Tue Mar 30 21:55:01 2004") 16 s Compiled from byte code to native: ("Tue Mar 30 21:55:43 2004" "Tue Mar 30 21:55:49 2004") 6 s ("Tue Mar 30 21:55:51 2004" "Tue Mar 30 21:55:58 2004") 7 s ("Tue Mar 30 21:56:01 2004" "Tue Mar 30 21:56:07 2004") 6 s There is the possibility of further improvement, especially for this example, by moving Lisp object referencing and setting out of loops. This will surely be tricky, though, if only because the functions called by the byte code operations could change these objects. There are also two extra function calls inside the variable setting operation (Bvarset), which is used inside the loop in the example. They're a work around to modify struct bit fields, which can probably be done quicker in place. The original figures: > (silly-loop 100000000) > => ("Sat Feb 28 10:04:39 2004" "Sat Feb 28 10:05:30 2004") ; 51 secs > > (byte-compile 'silly-loop) > (silly-loop 100000000) > => ("Sat Feb 28 10:06:37 2004" "Sat Feb 28 10:06:53 2004") ; 16 secs > > (native-compile 'silly-loop) > (silly-loop 100000000) > => ("Sat Feb 28 10:17:13 2004" "Sat Feb 28 10:17:22 2004") ; 9 secs