How to create a sequence of numbers on the GPU

3 views (last 30 days)
I want to do the follow in a new GPU Array, efficiently:
myarray = 1:100000
gpuArray(1:100000) works of course, but if I'm not wrong it's creating the large array in main memory then moving the whole thing to the GPU. I would expect that I can create the sequence of numbers on the GPU directly more efficiently, as I can do with many random numbers.

Accepted Answer

Edric Ellis
Edric Ellis on 21 Jan 2016
The direct equivalent is to use gpuArray.colon, like so:
myarray = gpuArray.colon(1,100000);
More here in the doc about building gpuArrays.
  1 Comment
David Parks
David Parks on 21 Jan 2016
Edited: David Parks on 21 Jan 2016
Aha! Didn't see that one, thanks! Looks like it performs nearly the same as linspace, maybe 4ish percent faster.
>> tic; for i = 1:100000; gpuArray.linspace(1,100000,100000); end; toc;
Elapsed time is 9.975085 seconds.
>> tic; for i = 1:100000; gpuArray.colon(1,100000); end; toc;
Elapsed time is 9.486463 seconds.
Doesn't look like I can go back and edit the accepted answer after the fact, drat.

Sign in to comment.

More Answers (1)

David Parks
David Parks on 21 Jan 2016
Found it.
gpuArray.linspace(1,1000,1000);
>> tic; for i = 1:10000; gpuArray(1:100000); end; toc;
Elapsed time is 2.737965 seconds.
>> tic; for i = 1:10000; gpuArray.linspace(1,100000,100000); end; toc;
Elapsed time is 0.916697 seconds.

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!