How to create a sequence of numbers on the GPU

3 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

Edric Ellis
Edric Ellis il 21 Gen 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 Commento
David Parks
David Parks il 21 Gen 2016
Modificato: David Parks il 21 Gen 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.

Accedi per commentare.

Più risposte (1)

David Parks
David Parks il 21 Gen 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.

Tag

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by