View Full Version : 2 dimensions' array
05-21-2010, 12:07 AM
I'm still new to opencl and not used to the programming yet.
I'm just wondering that is it possible to use a 2 dimensions' array in Opencl...??
i tried to search in google but found nothing.
Like we do in C " int array;"
help me out please.
05-21-2010, 12:16 AM
You can create 2-dimensional private or local arrays inside a kernel.
However, you cannot create 2-dimensional global arrays unless you want to use images. Buffers created with clCreateBuffer are always linear, but you can use macros to access them like 2-dimensional arrays, e.g.:
#define A(x,y) a[x*width + y]
Is it stated in the standard that a kernel argument cannot be a 2-dimensional array ?
A kernel with a "float arg" argument works with Nvidia implementation but not with AMD one.
I only find in the 1.1 standard that a buffer should be linear (A 2-dimensional array is a bunch of linear memory AFAIK), and that VLA array aren't supported.
10-19-2011, 02:55 PM
Is it stated in the standard that a kernel argument cannot be a 2-dimensional array?
Section 5.7.2. says that
"If the argument is declared to be a pointer of a built-in scalar or vector type, or a user defined structure type in the global or constant address space, the memory object specified as argument value must be a buffer object (or NULL)"
...but it doesn't say anything about arrays. I'll ask the Working Group for a clarification.
Do you mean you'll ask for a clarification for a further release or will we get it for 1.1 ?
Seems that 1.2 clarified the situation in 3.5 :
Memory objects are categorized into two types: buffer objects, and image objects. A buffer
object stores a one-dimensional collection of elements whereas an image object is used to store a
two- or three- dimensional texture, frame-buffer or image.
Powered by vBulletin® Version 4.2.2 Copyright © 2014 vBulletin Solutions, Inc. All rights reserved.