From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Andy Wingo Newsgroups: gmane.lisp.guile.devel Subject: Re: wip-ports-refactor Date: Tue, 10 May 2016 17:02:41 +0200 Message-ID: <871t5aq7la.fsf@pobox.com> References: <87twjempnf.fsf@pobox.com> <87zisw9tju.fsf@gnu.org> <8760vgmxfy.fsf@pobox.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1462892599 18152 80.91.229.3 (10 May 2016 15:03:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 10 May 2016 15:03:19 +0000 (UTC) Cc: guile-devel To: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Tue May 10 17:03:10 2016 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1b09Bg-00068T-Q5 for guile-devel@m.gmane.org; Tue, 10 May 2016 17:03:05 +0200 Original-Received: from localhost ([::1]:46754 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b09Bf-0000L5-UC for guile-devel@m.gmane.org; Tue, 10 May 2016 11:03:03 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35397) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b09BY-0000FS-Bw for guile-devel@gnu.org; Tue, 10 May 2016 11:03:00 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b09BS-000484-6i for guile-devel@gnu.org; Tue, 10 May 2016 11:02:56 -0400 Original-Received: from pb-sasl1.pobox.com ([64.147.108.66]:56134 helo=sasl.smtp.pobox.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b09BS-00047X-0T; Tue, 10 May 2016 11:02:50 -0400 Original-Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id 6BD8417FDE; Tue, 10 May 2016 11:02:49 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type; s=sasl; bh=mJKSQMAfaRuB4sIexCYcmtdbfYY=; b=DIq/fH j3iGkwgbhCXHq493JN0VtDgZqd1Os5vB8RSRh8qalfJpNcQNKkUzorNlNwFkTurX LKBNER5EcGMSG1s3+VrrdiOmKibT9EanqOvodA1rivZg+AQWDokX20PdRQHonqXN G/op1OPM7x91TZB51iXJxB4ArQZpMbtXTc+Zw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=sasl; b=imAFgAma6LbwEIi/ga20z3gPJle0juR5 jwUXaEI+MKNkMLmZAg60WJAylHFqYWVzjV2YeDW/NCUXWxQrGc95U11D0RkAxWeY UPGKtZn66ExDcePaU14raP3I0s4+Hv129RPldFCMh/e2fygtssOd2V0ePJnmDbTS Reo1CMV3QxQ= Original-Received: from pb-sasl1. (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id 62E3517FDD; Tue, 10 May 2016 11:02:49 -0400 (EDT) Original-Received: from clucks (unknown [88.160.190.192]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by pb-sasl1.pobox.com (Postfix) with ESMTPSA id 68DE317FDC; Tue, 10 May 2016 11:02:48 -0400 (EDT) In-Reply-To: <8760vgmxfy.fsf@pobox.com> (Andy Wingo's message of "Sun, 17 Apr 2016 10:49:53 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) X-Pobox-Relay-ID: 4288F21A-16C0-11E6-8436-0D7A5CA9D4A7-02397024!pb-sasl1.pobox.com X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 64.147.108.66 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Original-Sender: "guile-devel" Xref: news.gmane.org gmane.lisp.guile.devel:18300 Archived-At: Greets, On Sun 17 Apr 2016 10:49, Andy Wingo writes: > | baseline | foo | port-line | peek-char > ------------------+----------+--------+-----------+---------- > guile 2.0 | 0.269s | 0.845s | 1.067s | 1.280s > guile master | 0.058s | 0.224s | 0.225s | 0.433s > wip-port-refactor | 0.058s | 0.220s | 0.226s | 0.375s So, I have completed the move to port buffers that are exposed to Scheme. I also ported the machinery needed to read characters and bytes to Scheme, while keeping the C code around. The results are a bit frustrating. Here I'm going to use a file that contains only latin1 characters: (with-output-to-file "/tmp/testies.txt" (lambda () (do-times #e1e6 (write-char #\a)))) This is in a UTF-8 locale. OK. So we have 10M "a" characters. I now want to test these things: 1. peek-char, 1e7 times. 2. read-char, 1e7 times. 3. lookahead-u8, 1e7 times. (Call it peek-byte.) 4. get-u8, 1e7 times. (Call it read-byte.) | peek-char | read-char | peek-byte | read-byte ---------------------+-----------+-----------+-----------+---------- 2.0 | 0.811s | 0.711s | 0.619s | 0.623s master | 0.410s | 0.331s | 0.428s | 0.411s port-refactor C | 0.333s | 0.358s | 0.265s | 0.245s port-refactor Scheme | 1.041s | 1.820s | 0.682s | 0.727s Again, measurements on my i7-5600U, best of three, --no-debug. Conclusions: 1. In Guile master and 2.0, reading is faster than peeking, because it does a read then a putback. In wip-port-refactor, the reverse is true: peeking fills the buffer, and reading advances the buffer pointers. 2. Scheme appears to be about 3-4 times slower than C in port-refactor. It's slower than 2.0, unfortunately. I am certain that we will get the difference back when we get native compilation but I don't know when that would be. 3. There are some compiler improvements that could help Scheme performance too. For example the bit that updates the port positions is not optimal. We could expose it from C of course. Note that this Scheme implementation passes ports.test, so there shouldn't be any hidden surprises. I am not sure what to do, to be honest. I think I would switch to Scheme if it let me throw away the C code, but I don't see the path forward on that right now due to bootstrap reasons. I think if I could golf `read-char' down to 1.100s or so it would become more palatable. Andy