CUDA6/Jetson
[
Front page
] [
New
|
List of pages
|
Search
|
Recent changes
]
Start:
[[labs.beatcraft.com]] ~
[[CUDA]] ~
#contents
* CUDA/Jetson TK1 (Tegra K1 SoC) [#maea0b2b]
>
This article is an introduction to Tegra K1 SOC board (he...
#ref(jetson01.jpg,,40%); ~
* Hardware Specification of Jetson [#f65fb13f]
>
The hardware specification of Jetson is listed below.
- Kepler GPU with 192 CUDA cores
- 4-Plus-1 quad-core ARM Cortex A15 CPU
- 2GB DDR3L
- 16GB 4.51 eMMC memory
* Installing Process [#t986f2c4]
>
Although LT4 (Linux for Tegra) is initially installed in ...
https://developer.nvidia.com/sites/default/files/akamai/m...
>>
''Caution1'': To apply this installation process, the dir...
~
''Caution2'': To install default L4T, please use the comm...
>
cd home/ubuntu/NVIDIA-INSTALLER
sudo ./installer.sh
>
Then, reboot the system. However, installer.sh should onl...
>
The host OS is Ubuntu 12.04 LTS (64bit) . This article as...
** About CUDA 6.0 Toolkit for L4T Rel-19.2 [#qeffd7b3]
>
To obtain CUDA6.0 Toolkit for L4T Rel-19.2, you need to r...
~
https://developer.nvidia.com/user~
** Installing L4T [#pddd5e91]
>
Remove the AC adapter from Jetson, connect to the host PC...
Create a working directory on the host OS, and download T...
~
https://developer.nvidia.com/linux-tegra-rel-19~
~
$ mkdir ~/Jetson
$ cd Jetson/
$ wget https://developer.nvidia.com/sites/default/files/...
$ wget https://developer.nvidia.com/sites/default/files/...
~
Applying the root privilege, expand Tegra124_Linux_armhf....
$ sudo tar xpf Tegra124_Linux_R19.2.0_armhf.tbz2
$ cd Linux_for_Tegra/rootfs/
>
Move to the rootfs directory. Then, download and expand t...
$ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_...
** Configuring USB3.0 port [#zd0e596a]
>
As reinstalling L4T, the USB 3.0 port of Jetson is turned...
For the details, please click the URL shown below.~
https://developer.nvidia.com/sites/default/files/akamai/m...
~
This is how the file is edited.~
$ vi jetson-tk1.conf
# USB 2.0 operation on USB2 port(J1C2 connector)/for use...
# USB 3.0 operation on USB2 port(J1C2 connector) use ODM...
ODMDATA=0x6209C000; <- Comment in this code
#ODMDATA=0x6009C000; <- Comment out this code
~
Completing the modification of jetson-tk1.conf, execute a...
apply_binaries.sh is a script, which places binaries to r...
~
$ cd ..
$ sudo ./apply_binaries.sh
Using rootfs directory of: /home/beat/Jetson/Linux_for_T...
... <snip>...
Extracting the firmwares and kernel modules to /home/bea...
Installing the board *.dtb files into /home/beat/Jetson/...
Success!
~
While push down the button of FORCE RECOVERY on Jetson an...
~
$ lsusb | grep -i nvidia
Bus 001 Device 002: ID 0955:7140 NVidia Corp.
~
Applying the root privilege, execute the command shown be...
~
If not automatically execute reset when the transfer is c...
~
When reset is completed, the recovery of L4T is completed.~
~
$ sudo ./flash.sh -S 8GiB jetson-tk1 mmcblk0p1
copying dtbfile(/home/beat/Jetson/Linux_for_Tegra/kernel...
Making system.img...
populating rootfs from /home/beat/Jetson/Linux_...
Sync'ing... done.
System.img built successfully.
copying bctfile(/home/beat/Jetson/Linux_for_Tegra/bootlo...
copying cfgfile(/home/beat/Jetson/Linux_for_Tegra/bootlo...
creating gpt(ppt.img)...
*** GPT Parameters ***
device size -------------- 15766388736
bootpart size ------------ 8388608
userpart size ------------ 15758000128
Erase Block Size --------- 2097152
sector size -------------- 4096
Partition Config file ---- flash.cfg
Visible partition flag --- GP1
Primary GPT output ------- PPT->ppt.img
Secondary GPT output ----- GPT->gpt.img
Target device name ------- none
...<snip>...
Create, format and download took 4315 Secs
Time taken for flashing 4317 Secs
*** The target ardbeg has been flashed successfully. ***
Reset the board to boot from internal eMMC.
* Checking and Setting up L4T on Jetson [#t5ff13b8]
>
Checking and setting up L4T, which is re-installed on Jet...
User Name: Ubuntu
Password : Ubuntu
*** Checking Kernel Version of L4T on Jetson [#ha9de76e]
>
Kernel version of L4T on Jetson is listed as it is follow...
$ uname -a
Linux tegra-ubuntu 3.10.24-g6a2d13a #1 SMP PREEMPT Fri A...
*** Checking USB 3.0 port of Jetson [#qfc66fe8]
>
To check enabling USB 3.0, apply lsusb command.~
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 ro...
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 ro...
*** Back up libgix.so [#k43c46e1]
>
Create a back-up of libgix,so. When the update of xserver...
https://developer.nvidia.com/sites/default/files/akamai/m...
$ cd /usr/lib/modules/extensions/
$ sudo cp libglx.so __libglx.so_orig
*** Adding extra repository [#ye7418b3]
>
To obtain the code for development, easily, an extra repo...
http://elinux.org/JetsonTK1~
$ sudo apt-add-repository universe
$ sudo apt-get update
$ sudo apt-get upgrade
>>
''Caution'': Sometimes, the currently executing process i...
** Installing CUDA6.0 ToolKit [#g329f74f]
>>
''Caution'': Assuming that you have already downloaded cu...
>
Before reinstalling CUDA6.0 Toolkit, reset the clock by t...
$ sudo ntpdate ntp.nict.jp
$ date
~
Install cuda-repo-14t-r19.2_6.0-42_armhf.deb, and update...
$ sudo dpkg -i cuda-repo-l4t-r19.2_6.0-42_armhf.deb
$ sudo apt-get update
$ sudo apt-get install cuda-toolkit-6-0
~
Default user, Ubuntu, is added to the video group.~
$ sudo usermod -a -G video ubuntu
~
Then, set the environment variable as adding the two line...
export PATH=/usr/local/cuda-6.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-6.0/lib:$LD_LIBRA...
** Installing and Executing CUDA Samples [#dce42013]
>
Applying the commands below, install and build CUDA Sampl...
~
After its build process is completed, move to the directo...
~
http://docs.nvidia.com/cuda/cuda-getting-started-guide-fo...
~
$ cuda-install-samples-6.0.sh ~/
$ cd NVIDIA_CUDA-6.0_Samples/
$ make
$ cd bin/armv7l/linux/release/gnueabihf/
$ ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static l...
Detected 1 CUDA Capable device(s)
Device 0: "GK20A"
CUDA Driver Version / Runtime Version 6.0 / 6.0
CUDA Capability Major/Minor version number: 3.2
Total amount of global memory: 1746 MB...
( 1) Multiprocessors, (192) CUDA Cores/MP: 192 CUD...
GPU Clock rate: 852 MHz...
Memory Clock rate: 924 Mhz
Memory Bus Width: 64-bit
L2 Cache Size: 131072...
M aximum Texture Dimension Size (x,y,z) 1D=(65...
Maximum Layered 1D Texture Size, (num) layers 1D=(163...
Maximum Layered 2D Texture Size, (num) layers 2D=(163...
Total amount of constant memory: 65536 b...
Total amount of shared memory per block: 49152 b...
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1...
Max dimension size of a grid size (x,y,z): (2147483...
Maximum memory pitch: 2147483...
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes wit...
Run time limit on kernels: No
Integrated GPU sharing Host Memory: Yes
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 0 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSet...
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version =...
Result = PASS
* Compare and Comparison between Tesla K20c and Jetson TK...
>
Update CUDA of the machine, which is introduced at the ar...
~
- Results of deviceQuery~
The major differences are defined in bold.~
~
| |Device 0: "Tesla K20c" | Device 0: "GK20A"|h
| CUDA Driver Version / Runtime Version | 6.0 / 6.0 | 6.0...
| CUDA Capability Major/Minor version number | ''3.5'' | ...
| Total amount of global memory | ''4800 MBytes (50327060...
| Multiprocessors, (192) CUDA Cores/MP | ''2496 CUDA Core...
| GPU Clock rate | ''706 MHz (0.71 GHz)'' | ''852 MHz (0....
| Memory Clock rate | ''2600 Mhz'' | ''924 Mhz'' |
| Memory Bus Width | ''320-bit'' | ''64-bit'' |
| L2 Cache Size | 1310720 bytes | 131072 bytes |
| Maximum Texture Dimension Size (x,y,z) | 1D=(65536), 2D...
| Maximum Layered 1D Texture Size, (num) layers | 1D=(163...
| Maximum Layered 2D Texture Size, (num) layers | 2D=(163...
| Total amount of constant memory | 65536 bytes | 65536 b...
| Total amount of shared memory per block | 49152 bytes |...
| Total number of registers available per block | ''65536...
| Warp size | 32 | 32 |
| Maximum number of threads per multiprocessor | 2048 | 2...
| Maximum number of threads per block | 1024 | 1024 |
| Max dimension size of a thread block (x,y,z) | (1024, 1...
| Max dimension size of a grid size (x,y,z) | (2147483647...
| Maximum memory pitch | 2147483647 bytes | 2147483647 by...
| Texture alignment | 512 bytes | 512 bytes |
| Concurrent copy and kernel execution | ''Yes with 2 cop...
| Run time limit on kernels | No | No |
| Integrated GPU sharing Host Memory | ''No'' | ''Yes'' |
| Support host page-locked memory mapping | Yes | Yes |
| Alignment requirement for Surfaces | Yes | Yes |
| Device has ECC support | ''Enabled'' | ''Disabled'' |
| Device supports Unified Addressing (UVA) | Yes | Yes |
| Device PCI Bus ID / PCI location ID | 1 / 0 | 0 / 0 |
>>
''Caution'': Tesla K20c does have 13 units of MP.
>
- matrixMul (Matrix Multiplication)~
The results are the averages of outcomes of 10 experiment...
~
| | GPU Device 0: "Tesla K20c" with compute capability 3....
| MatrixA(320,320), MatrixB(640,320) | Performance= 243.4...
Size = 131,072,000 Ops~
WorkgroupSize = 1024 threads / block~
>
- bandwidthTest~
The results are the averages of outcomes of 10 experiment...
~
| | Device 0: Tesla K20c | Device 0: GK20A |h
| Quick Mode | | |
| Host to Device Bandwidth, 1 Device(s) PINNED Memory Tra...
| Transfer Size (Bytes) | Bandwidth(MB/s) | Bandwidth(MB/...
| 33554432 | 6588.2 | 998.2 |
| Device to Host Bandwidth, 1 Device(s) PINNED Memory Tra...
| Transfer Size (Bytes) | Bandwidth(MB/s) | Bandwidth(MB/...
| 33554432 | 6550.1 | 5466 注2 |
| Device to Device Bandwidth, 1 Device(s) PINNED Memory T...
| Transfer Size (Bytes) | Bandwidth(MB/s) | Bandwidth(MB/...
| 33554432 | 147382.7 | 68360.8 注3 |
>>
''Caution'': Outcomes may differ depending on mode.~
''Caution'': There are large discrepancies in outcomes of...
* Revision History [#sa3633b9]
>
- 2014/12/22 This article is initially published
End:
[[labs.beatcraft.com]] ~
[[CUDA]] ~
#contents
* CUDA/Jetson TK1 (Tegra K1 SoC) [#maea0b2b]
>
This article is an introduction to Tegra K1 SOC board (he...
#ref(jetson01.jpg,,40%); ~
* Hardware Specification of Jetson [#f65fb13f]
>
The hardware specification of Jetson is listed below.
- Kepler GPU with 192 CUDA cores
- 4-Plus-1 quad-core ARM Cortex A15 CPU
- 2GB DDR3L
- 16GB 4.51 eMMC memory
* Installing Process [#t986f2c4]
>
Although LT4 (Linux for Tegra) is initially installed in ...
https://developer.nvidia.com/sites/default/files/akamai/m...
>>
''Caution1'': To apply this installation process, the dir...
~
''Caution2'': To install default L4T, please use the comm...
>
cd home/ubuntu/NVIDIA-INSTALLER
sudo ./installer.sh
>
Then, reboot the system. However, installer.sh should onl...
>
The host OS is Ubuntu 12.04 LTS (64bit) . This article as...
** About CUDA 6.0 Toolkit for L4T Rel-19.2 [#qeffd7b3]
>
To obtain CUDA6.0 Toolkit for L4T Rel-19.2, you need to r...
~
https://developer.nvidia.com/user~
** Installing L4T [#pddd5e91]
>
Remove the AC adapter from Jetson, connect to the host PC...
Create a working directory on the host OS, and download T...
~
https://developer.nvidia.com/linux-tegra-rel-19~
~
$ mkdir ~/Jetson
$ cd Jetson/
$ wget https://developer.nvidia.com/sites/default/files/...
$ wget https://developer.nvidia.com/sites/default/files/...
~
Applying the root privilege, expand Tegra124_Linux_armhf....
$ sudo tar xpf Tegra124_Linux_R19.2.0_armhf.tbz2
$ cd Linux_for_Tegra/rootfs/
>
Move to the rootfs directory. Then, download and expand t...
$ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_...
** Configuring USB3.0 port [#zd0e596a]
>
As reinstalling L4T, the USB 3.0 port of Jetson is turned...
For the details, please click the URL shown below.~
https://developer.nvidia.com/sites/default/files/akamai/m...
~
This is how the file is edited.~
$ vi jetson-tk1.conf
# USB 2.0 operation on USB2 port(J1C2 connector)/for use...
# USB 3.0 operation on USB2 port(J1C2 connector) use ODM...
ODMDATA=0x6209C000; <- Comment in this code
#ODMDATA=0x6009C000; <- Comment out this code
~
Completing the modification of jetson-tk1.conf, execute a...
apply_binaries.sh is a script, which places binaries to r...
~
$ cd ..
$ sudo ./apply_binaries.sh
Using rootfs directory of: /home/beat/Jetson/Linux_for_T...
... <snip>...
Extracting the firmwares and kernel modules to /home/bea...
Installing the board *.dtb files into /home/beat/Jetson/...
Success!
~
While push down the button of FORCE RECOVERY on Jetson an...
~
$ lsusb | grep -i nvidia
Bus 001 Device 002: ID 0955:7140 NVidia Corp.
~
Applying the root privilege, execute the command shown be...
~
If not automatically execute reset when the transfer is c...
~
When reset is completed, the recovery of L4T is completed.~
~
$ sudo ./flash.sh -S 8GiB jetson-tk1 mmcblk0p1
copying dtbfile(/home/beat/Jetson/Linux_for_Tegra/kernel...
Making system.img...
populating rootfs from /home/beat/Jetson/Linux_...
Sync'ing... done.
System.img built successfully.
copying bctfile(/home/beat/Jetson/Linux_for_Tegra/bootlo...
copying cfgfile(/home/beat/Jetson/Linux_for_Tegra/bootlo...
creating gpt(ppt.img)...
*** GPT Parameters ***
device size -------------- 15766388736
bootpart size ------------ 8388608
userpart size ------------ 15758000128
Erase Block Size --------- 2097152
sector size -------------- 4096
Partition Config file ---- flash.cfg
Visible partition flag --- GP1
Primary GPT output ------- PPT->ppt.img
Secondary GPT output ----- GPT->gpt.img
Target device name ------- none
...<snip>...
Create, format and download took 4315 Secs
Time taken for flashing 4317 Secs
*** The target ardbeg has been flashed successfully. ***
Reset the board to boot from internal eMMC.
* Checking and Setting up L4T on Jetson [#t5ff13b8]
>
Checking and setting up L4T, which is re-installed on Jet...
User Name: Ubuntu
Password : Ubuntu
*** Checking Kernel Version of L4T on Jetson [#ha9de76e]
>
Kernel version of L4T on Jetson is listed as it is follow...
$ uname -a
Linux tegra-ubuntu 3.10.24-g6a2d13a #1 SMP PREEMPT Fri A...
*** Checking USB 3.0 port of Jetson [#qfc66fe8]
>
To check enabling USB 3.0, apply lsusb command.~
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 ro...
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 ro...
*** Back up libgix.so [#k43c46e1]
>
Create a back-up of libgix,so. When the update of xserver...
https://developer.nvidia.com/sites/default/files/akamai/m...
$ cd /usr/lib/modules/extensions/
$ sudo cp libglx.so __libglx.so_orig
*** Adding extra repository [#ye7418b3]
>
To obtain the code for development, easily, an extra repo...
http://elinux.org/JetsonTK1~
$ sudo apt-add-repository universe
$ sudo apt-get update
$ sudo apt-get upgrade
>>
''Caution'': Sometimes, the currently executing process i...
** Installing CUDA6.0 ToolKit [#g329f74f]
>>
''Caution'': Assuming that you have already downloaded cu...
>
Before reinstalling CUDA6.0 Toolkit, reset the clock by t...
$ sudo ntpdate ntp.nict.jp
$ date
~
Install cuda-repo-14t-r19.2_6.0-42_armhf.deb, and update...
$ sudo dpkg -i cuda-repo-l4t-r19.2_6.0-42_armhf.deb
$ sudo apt-get update
$ sudo apt-get install cuda-toolkit-6-0
~
Default user, Ubuntu, is added to the video group.~
$ sudo usermod -a -G video ubuntu
~
Then, set the environment variable as adding the two line...
export PATH=/usr/local/cuda-6.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-6.0/lib:$LD_LIBRA...
** Installing and Executing CUDA Samples [#dce42013]
>
Applying the commands below, install and build CUDA Sampl...
~
After its build process is completed, move to the directo...
~
http://docs.nvidia.com/cuda/cuda-getting-started-guide-fo...
~
$ cuda-install-samples-6.0.sh ~/
$ cd NVIDIA_CUDA-6.0_Samples/
$ make
$ cd bin/armv7l/linux/release/gnueabihf/
$ ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static l...
Detected 1 CUDA Capable device(s)
Device 0: "GK20A"
CUDA Driver Version / Runtime Version 6.0 / 6.0
CUDA Capability Major/Minor version number: 3.2
Total amount of global memory: 1746 MB...
( 1) Multiprocessors, (192) CUDA Cores/MP: 192 CUD...
GPU Clock rate: 852 MHz...
Memory Clock rate: 924 Mhz
Memory Bus Width: 64-bit
L2 Cache Size: 131072...
M aximum Texture Dimension Size (x,y,z) 1D=(65...
Maximum Layered 1D Texture Size, (num) layers 1D=(163...
Maximum Layered 2D Texture Size, (num) layers 2D=(163...
Total amount of constant memory: 65536 b...
Total amount of shared memory per block: 49152 b...
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1...
Max dimension size of a grid size (x,y,z): (2147483...
Maximum memory pitch: 2147483...
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes wit...
Run time limit on kernels: No
Integrated GPU sharing Host Memory: Yes
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 0 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSet...
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version =...
Result = PASS
* Compare and Comparison between Tesla K20c and Jetson TK...
>
Update CUDA of the machine, which is introduced at the ar...
~
- Results of deviceQuery~
The major differences are defined in bold.~
~
| |Device 0: "Tesla K20c" | Device 0: "GK20A"|h
| CUDA Driver Version / Runtime Version | 6.0 / 6.0 | 6.0...
| CUDA Capability Major/Minor version number | ''3.5'' | ...
| Total amount of global memory | ''4800 MBytes (50327060...
| Multiprocessors, (192) CUDA Cores/MP | ''2496 CUDA Core...
| GPU Clock rate | ''706 MHz (0.71 GHz)'' | ''852 MHz (0....
| Memory Clock rate | ''2600 Mhz'' | ''924 Mhz'' |
| Memory Bus Width | ''320-bit'' | ''64-bit'' |
| L2 Cache Size | 1310720 bytes | 131072 bytes |
| Maximum Texture Dimension Size (x,y,z) | 1D=(65536), 2D...
| Maximum Layered 1D Texture Size, (num) layers | 1D=(163...
| Maximum Layered 2D Texture Size, (num) layers | 2D=(163...
| Total amount of constant memory | 65536 bytes | 65536 b...
| Total amount of shared memory per block | 49152 bytes |...
| Total number of registers available per block | ''65536...
| Warp size | 32 | 32 |
| Maximum number of threads per multiprocessor | 2048 | 2...
| Maximum number of threads per block | 1024 | 1024 |
| Max dimension size of a thread block (x,y,z) | (1024, 1...
| Max dimension size of a grid size (x,y,z) | (2147483647...
| Maximum memory pitch | 2147483647 bytes | 2147483647 by...
| Texture alignment | 512 bytes | 512 bytes |
| Concurrent copy and kernel execution | ''Yes with 2 cop...
| Run time limit on kernels | No | No |
| Integrated GPU sharing Host Memory | ''No'' | ''Yes'' |
| Support host page-locked memory mapping | Yes | Yes |
| Alignment requirement for Surfaces | Yes | Yes |
| Device has ECC support | ''Enabled'' | ''Disabled'' |
| Device supports Unified Addressing (UVA) | Yes | Yes |
| Device PCI Bus ID / PCI location ID | 1 / 0 | 0 / 0 |
>>
''Caution'': Tesla K20c does have 13 units of MP.
>
- matrixMul (Matrix Multiplication)~
The results are the averages of outcomes of 10 experiment...
~
| | GPU Device 0: "Tesla K20c" with compute capability 3....
| MatrixA(320,320), MatrixB(640,320) | Performance= 243.4...
Size = 131,072,000 Ops~
WorkgroupSize = 1024 threads / block~
>
- bandwidthTest~
The results are the averages of outcomes of 10 experiment...
~
| | Device 0: Tesla K20c | Device 0: GK20A |h
| Quick Mode | | |
| Host to Device Bandwidth, 1 Device(s) PINNED Memory Tra...
| Transfer Size (Bytes) | Bandwidth(MB/s) | Bandwidth(MB/...
| 33554432 | 6588.2 | 998.2 |
| Device to Host Bandwidth, 1 Device(s) PINNED Memory Tra...
| Transfer Size (Bytes) | Bandwidth(MB/s) | Bandwidth(MB/...
| 33554432 | 6550.1 | 5466 注2 |
| Device to Device Bandwidth, 1 Device(s) PINNED Memory T...
| Transfer Size (Bytes) | Bandwidth(MB/s) | Bandwidth(MB/...
| 33554432 | 147382.7 | 68360.8 注3 |
>>
''Caution'': Outcomes may differ depending on mode.~
''Caution'': There are large discrepancies in outcomes of...
* Revision History [#sa3633b9]
>
- 2014/12/22 This article is initially published
Page: