Commit 43a56838 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Fixed arrays tutorial.

parent d7d8c808
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -104,7 +104,7 @@ In general in TNL, each method defined as `__cuda_callable__` can be called from


#### Accessing the array element with `setElement` and `getElement` <a name="accessing_the_array_elements_with_set_get_element"></a>
#### Accessing the array element with `setElement` and `getElement` <a name="accessing_the_array_elements_with_set_get_element"></a>


On the other hand, the methods `setElement` and `getElement` can be called **from the host only** no matter where the array is allocated. None of the methods can be used in CUDA kernels. `getElement` returns copy of an element rather than a reference. Therefore it is slightly slower. If the array is on GPU, the array element is copied from the device on the host (or vice versa) which is significantly slower. In the parts of code where the performance matters, these methods shall not be called. Their use is, however, much easier and they allow to write one simple code for both CPU and GPU. Both methods are good candidates for:
On the other hand, the methods `setElement` and `getElement` can be called from the host **no matter where the array is allocated**. In addition they can be called from kernels on device where the array is allocated. `getElement` returns copy of an element rather than a reference. Therefore it is slightly slower. If the array is on GPU and the methods are called from the host, the array element is copied from the device on the host (or vice versa) which is significantly slower. In the parts of code where the performance matters, these methods shall not be called from the host when the array is allocated on the device. In this way, their use is, however, easier compared to `operator[]` and they allow to write one simple code for both CPU and GPU. Both methods are good candidates for:


* reading/writing of only few elements in the array
* reading/writing of only few elements in the array
* arrays initiation which is done only once and it is not time critical part of a code
* arrays initiation which is done only once and it is not time critical part of a code