diff options
| -rw-r--r-- | .travis.yml | 6 | ||||
| -rw-r--r-- | README.md | 17 | ||||
| -rw-r--r-- | README.txt | 18 | ||||
| -rw-r--r-- | matlab/tools/astra_test_CUDA.m | 59 | ||||
| -rw-r--r-- | matlab/tools/astra_test_noCUDA.m | 32 | ||||
| -rw-r--r-- | python/astra/__init__.py | 4 | ||||
| -rw-r--r-- | python/astra/tests.py | 97 | ||||
| -rw-r--r-- | samples/python/s020_3d_multiGPU.py | 4 | 
8 files changed, 231 insertions, 6 deletions
| diff --git a/.travis.yml b/.travis.yml index 1cd7420..aca9940 100644 --- a/.travis.yml +++ b/.travis.yml @@ -60,6 +60,8 @@ before_install:  install:    - conda install python=$TRAVIS_PYTHON_VERSION six numpy scipy cython    - conda info -a + +script:    - cd build/linux    - ./autogen.sh    - if [ x$CLANG == xyes ]; then export CXX=clang++; export CC=clang; fi @@ -67,6 +69,4 @@ install:    - make -j 4    - make test    - make install - -script: -  - python -c "import astra" +  - python -c "import astra; astra.test_noCUDA()" @@ -123,7 +123,24 @@ Run build_setup.bat to automatically copy the boost headers and libraries.  For matlab: Run build_matlab.bat. The .dll and .mexw64 files will be in bin\x64\Release_Cuda.  For python 2.7/3.5: Run build_python27.bat or build_python35.bat. Astra will be directly installed into site-packages. +## Testing your installation +To perform a (very) basic test of your ASTRA installation in Python, you can +run the following Python commands. You can choose to skip the test of the GPU +functionality for systems without a NVIDIA GPU. + +``` +import astra +astra.test_noCUDA() # To skip GPU tests +astra.test_CUDA()   # To also perform GPU tests +``` + +To test your ASTRA installation in Matlab, the equivalent commands are: + +``` +astra_test_noCUDA   % To skip GPU tests +astra_test_CUDA     % To also perform GPU tests +```  ## References @@ -151,6 +151,24 @@ For matlab: Run build_matlab.bat. The .dll and .mexw64 files will be in bin\x64\  For python 2.7/3.5: Run build_python27.bat or build_python35.bat. Astra will be directly installed into site-packages. +Testing your installation: +--------------------------- + +To perform a (very) basic test of your ASTRA installation in Python, you can +run the following Python commands. You can choose to skip the test of the GPU +functionality for systems without a NVIDIA GPU. + +import astra +astra.test_noCUDA() # To skip GPU tests +astra.test_CUDA()   # To also perform GPU tests + + +To test your ASTRA installation in Matlab, the equivalent commands are: + +astra_test_noCUDA   % To skip GPU tests +astra_test_CUDA     % To also perform GPU tests + +  References:  ------------ diff --git a/matlab/tools/astra_test_CUDA.m b/matlab/tools/astra_test_CUDA.m new file mode 100644 index 0000000..4171f20 --- /dev/null +++ b/matlab/tools/astra_test_CUDA.m @@ -0,0 +1,59 @@ +%-------------------------------------------------------------------------- +% Clears and frees memory of all objects (data, projectors, algorithms)  +% currently in the astra-library. +%-------------------------------------------------------------------------- +%-------------------------------------------------------------------------- +% This file is part of the ASTRA Toolbox +%  +% Copyright: 2010-2017, iMinds-Vision Lab, University of Antwerp +%            2014-2017, CWI, Amsterdam +% License: Open Source under GPLv3 +% Contact: astra@uantwerpen.be +% Website: http://www.astra-toolbox.com/ +%-------------------------------------------------------------------------- + +%% +fprintf('Getting GPU info...') +astra_get_gpu_info() + +%% +astra_test_noCUDA() + +%% +fprintf('Testing basic CUDA 2D functionality...') + +vg = astra_create_vol_geom(2, 32); +pg = astra_create_proj_geom('parallel', 1, 32, [0]); +proj_id = astra_create_projector('cuda', pg, vg); + +vol = rand(2, 32); +[sino_id, sino] = astra_create_sino(vol, proj_id); +astra_mex_data2d('delete', sino_id); +astra_mex_projector('delete', proj_id); + +err = max(abs(sino - sum(vol))); + +if err < 1e-6 +  disp('Ok') +else +  disp('Error') +end + +%% +fprintf('Testing basic CUDA 3D functionality...') + +vg = astra_create_vol_geom(2, 32, 32); +pg = astra_create_proj_geom('parallel3d', 1, 1, 32, 32, [0]); + +vol = rand(32, 2, 32); +[sino_id, sino] = astra_create_sino3d_cuda(vol, pg, vg); +astra_mex_data3d('delete', sino_id); + +err = max(max(abs(sino - sum(vol,2)))); + +if err < 1e-6 +  disp('Ok') +else +  disp('Error') +end + diff --git a/matlab/tools/astra_test_noCUDA.m b/matlab/tools/astra_test_noCUDA.m new file mode 100644 index 0000000..6437661 --- /dev/null +++ b/matlab/tools/astra_test_noCUDA.m @@ -0,0 +1,32 @@ +%-------------------------------------------------------------------------- +% Clears and frees memory of all objects (data, projectors, algorithms)  +% currently in the astra-library. +%-------------------------------------------------------------------------- +%-------------------------------------------------------------------------- +% This file is part of the ASTRA Toolbox +%  +% Copyright: 2010-2017, iMinds-Vision Lab, University of Antwerp +%            2014-2017, CWI, Amsterdam +% License: Open Source under GPLv3 +% Contact: astra@uantwerpen.be +% Website: http://www.astra-toolbox.com/ +%-------------------------------------------------------------------------- + +fprintf('Testing basic CPU 2D functionality...') + +vg = astra_create_vol_geom(2, 32); +pg = astra_create_proj_geom('parallel', 1, 32, [0]); +proj_id = astra_create_projector('line', pg, vg); + +vol = rand(2, 32); +[sino_id, sino] = astra_create_sino(vol, proj_id); +astra_mex_data2d('delete', sino_id); +astra_mex_projector('delete', proj_id); + +err = max(abs(sino - sum(vol))); + +if err < 1e-6 +  disp('Ok') +else +  disp('Error') +end diff --git a/python/astra/__init__.py b/python/astra/__init__.py index b73fff5..8238a88 100644 --- a/python/astra/__init__.py +++ b/python/astra/__init__.py @@ -27,6 +27,7 @@ from . import matlab as m  from .creators import astra_dict,create_vol_geom, create_proj_geom, create_backprojection, create_sino, create_reconstruction, create_projector,create_sino3d_gpu, create_backprojection3d_gpu  from .functions import data_op, add_noise_to_sino, clear, move_vol_geom  from .extrautils import clipCircle +from .astra import set_gpu_index, get_gpu_info  from . import data2d  from . import astra  from . import data3d @@ -38,6 +39,7 @@ from . import plugin  from . import plugins  from . import log  from .optomo import OpTomo +from .tests import test_noCUDA, test_CUDA  __version__ = '1.8' @@ -45,4 +47,4 @@ import os  if 'ASTRA_GPU_INDEX' in os.environ:      L = [ int(x) for x in os.environ['ASTRA_GPU_INDEX'].split(',') ] -    astra.set_gpu_index(L) +    set_gpu_index(L) diff --git a/python/astra/tests.py b/python/astra/tests.py new file mode 100644 index 0000000..32afd36 --- /dev/null +++ b/python/astra/tests.py @@ -0,0 +1,97 @@ +# ----------------------------------------------------------------------- +# Copyright: 2010-2017, iMinds-Vision Lab, University of Antwerp +#            2013-2017, CWI, Amsterdam +# +# Contact: astra@uantwerpen.be +# Website: http://www.astra-toolbox.com/ +# +# This file is part of the ASTRA Toolbox. +# +# +# The ASTRA Toolbox is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# The ASTRA Toolbox is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. +# +# ----------------------------------------------------------------------- + +from __future__ import print_function, absolute_import + +def _basic_par2d_fp(type): +  import astra +  import numpy as np +  vg = astra.create_vol_geom(2, 32) +  pg = astra.create_proj_geom('parallel', 1, 32, [0]) +  proj_id = astra.create_projector(type, pg, vg) +  vol = np.random.rand(2, 32) +  (sino_id, sino) = astra.create_sino(vol, proj_id) +  astra.data2d.delete(sino_id) +  astra.projector.delete(proj_id) +  err = np.max(np.abs(sino[0,:] - np.sum(vol,axis=0))) +  return err < 1e-6 + +def _basic_par3d_fp(): +  import astra +  import numpy as np +  vg = astra.create_vol_geom(2, 32, 32) +  pg = astra.create_proj_geom('parallel3d', 1, 1, 32, 32, [0]) +  vol = np.random.rand(32, 2, 32) +  (sino_id, sino) = astra.create_sino3d_gpu(vol, pg, vg) +  astra.data3d.delete(sino_id) +  err = np.max(np.abs(sino[:,0,:] - np.sum(vol,axis=1))) +  return err < 1e-6 + + +def _basic_par2d(): +  print("Testing basic CPU 2D functionality... ", end="") +  if _basic_par2d_fp('line'): +    print("Ok") +    return True +  else: +    print("Error") +    return False + +def _basic_par2d_cuda(): +  print("Testing basic CUDA 2D functionality... ", end="") +  if _basic_par2d_fp('cuda'): +    print("Ok") +    return True +  else: +    print("Error") +    return False + +def _basic_par3d_cuda(): +  print("Testing basic CUDA 3D functionality... ", end="") +  if _basic_par3d_fp(): +    print("Ok") +    return True +  else: +    print("Error") +    return False + +def test_noCUDA(): +  """Perform a very basic functionality test, without CUDA""" +   +  ok = _basic_par2d() +  if not ok: +    raise RuntimeError("Test failed") + +def test_CUDA(): +  """Perform a very basic functionality test, including CUDA""" +   +  import astra +  print("Getting GPU info... ", end="") +  print(astra.get_gpu_info()) +  ok1 = _basic_par2d() +  ok2 = _basic_par2d_cuda() +  ok3 = _basic_par3d_cuda() +  if not (ok1 and ok2 and ok3): +    raise RuntimeError("Test failed") diff --git a/samples/python/s020_3d_multiGPU.py b/samples/python/s020_3d_multiGPU.py index 11a1e11..e872870 100644 --- a/samples/python/s020_3d_multiGPU.py +++ b/samples/python/s020_3d_multiGPU.py @@ -28,11 +28,11 @@ import numpy as np  # Set up multi-GPU usage.  # This only works for 3D GPU forward projection and back projection. -astra.astra.set_gpu_index([0,1]) +astra.set_gpu_index([0,1])  # Optionally, you can also restrict the amount of GPU memory ASTRA will use.  # The line commented below sets this to 1GB. -#astra.astra.set_gpu_index([0,1], memory=1024*1024*1024) +#astra.set_gpu_index([0,1], memory=1024*1024*1024)  vol_geom = astra.create_vol_geom(1024, 1024, 1024) | 
