From murdoch.duncan at gmail.com  Mon Jul 18 18:19:13 2011
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Mon, 18 Jul 2011 12:19:13 -0400
Subject: [Rd] Manipulating single-precision (float) arrays in .Call
	functions
In-Reply-To: <1311004330702-3675684.post@n4.nabble.com>
References: <1311004330702-3675684.post@n4.nabble.com>
Message-ID: <4E245D01.1010407@gmail.com>

On 18/07/2011 11:52 AM, Alireza Mahani wrote:
> I am writing a wrapper function in C++ that calls a GPU kernel. My array type
> for the GPU kernel is float, so I would like my wrapper function to receive
> float arrays from R. I understand that I can use 'as.single' in R to copy a
> double-precision vector from R in single-precision format while using the
> '.C' interface, but is there any way to do something similar for '.Call'?
> Given that the latter passes pointers from R to C/C++, I'm guessing this may
> be impossible, but I wanted to double-check. If you can suggest a solution,
> a small code sample would be much appreciated.
>
> The reason I prefer '.Call' to '.C' is because the former passes pointers
> and therefore creates less data transfer overhead as opposed to the latter
> which copies data. Is this argument controversial?

R has no native type holding singles.  It exports a double to a single 
vector in .C if you ask it to, but that's not available in .Call.  
You'll need to do the copying yourself.

Duncan Murdoch



[Rd] Manipulating single-precision (float) arrays in .Call functions
Duncan Murdoch