From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by yquem.inria.fr (Postfix) with ESMTP id 930E8BBAF for ; Wed, 16 Dec 2009 00:25:57 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjoBAE+qJ0vUnwdkkGdsb2JhbACCGpksAQEBAQkJDAcTBLwNgiyBfwQ X-IronPort-AV: E=Sophos;i="4.47,402,1257116400"; d="scan'208";a="42086011" Received: from relay.pcl-ipout02.plus.net ([212.159.7.100]) by mail1-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 16 Dec 2009 00:25:57 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtUEAE+qJ0vUnw4U/2dsb2JhbACCGtV5giyBfwQ Received: from pih-relay08.plus.net ([212.159.14.20]) by relay.pcl-ipout02.plus.net with ESMTP; 15 Dec 2009 23:25:56 +0000 Received: from [87.115.28.196] (helo=leper.local) by pih-relay08.plus.net with esmtp (Exim) id 1NKgmC-0005HC-KE for caml-list@yquem.inria.fr; Tue, 15 Dec 2009 23:25:56 +0000 From: Jon Harrop Organization: Flying Frog Consultancy Ltd. To: caml-list@yquem.inria.fr Subject: Re: [Caml-list] How to write a CUDA kernel in ocaml? Date: Wed, 16 Dec 2009 00:39:50 +0000 User-Agent: KMail/1.9.9 References: <320e992a0912150737t483a5946x9cad351fc344691f@mail.gmail.com> <4B27B981.80700@starynkevitch.net> <017101ca7ddc$fb936b20$f2ba4160$@allsopp@metastack.com> In-Reply-To: <017101ca7ddc$fb936b20$f2ba4160$@allsopp@metastack.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200912160039.51086.jon@ffconsultancy.com> X-Plusnet-Relay: 8f9b9deff0d7ae3a7bcb73892a38a117 X-Spam: no; 0.00; ocaml:01 basile:01 eray:01 ozkural:01 ocaml:01 recursive:01 recursion:01 recursive:01 recursion:01 translating:01 2009:98 frog:98 wrote:01 wrote:01 compilers:01 On Tuesday 15 December 2009 23:18:57 David Allsopp wrote: > Basile Starynkevitch wrote: > > Eray Ozkural wrote: > > > > Compiling Ocaml to efficient C is not easy and probably impossible (or > > extremely difficult) in the general case. In > > particular, tail recursive calls are essential in Ocaml, and are not > > available in C in most compilers. > > What's this based on (out of interest)? Most C compilers don't necessarily > identify tail recursion in *C* code but if you're emitting C as an OCaml > backend then there's no reason not to convert tail recursive *OCaml* > functions to C code based on goto or similar looping constructs (yes, you'd > almost-always-virtually-never use goto in a hand-crafted C program without > apologising profusely at Dijkstra's grave but if you're using C as an > intermediate language then that's a different matter). If I recall > correctly from an old post on this list, this is how Felix handles tail > recursion when translating Felix to C++ And trampolines to eliminate tail calls that cannot be eliminated using goto. However, trampolines are ~10x slower than TCO in the code gen. -- Dr Jon Harrop, Flying Frog Consultancy Ltd. http://www.ffconsultancy.com/?e