Claret is our fast and portable parallel WMDS tool that combines algorithmic concepts adapted and extended from the stochastic force-based MDS (SF-MDS) and Glimmer. To further improve Claret's performance for real-time data analysis, we propose a preprocessing step that computes approximate weighted Euclidean distances by combining a novel data mapping called stretching and Johnson Lindestrauss' lemma in O(log d) time in place of the original O(d) time. This preprocessing step reduces the complexity of WMDS from O(f(n)d) to O(f(n) log d), which for large d is a significant computational gain.
- OpenCL for CPU (Installation Instruction)
- OpenCL for GPU (Installation Instruction for NVIDIA GPUs)
- For running with Python (Install PyOpenCL)
- For C++ MDS
g++ -L /usr/local/cuda-9.0/lib64/ ../source/host/cpp/MDS.cpp -lOpenCL -o mds
- For C++ WMDS
g++ -L /usr/local/cuda-9.0/lib64/ ../source/host/cpp/WMDS.cpp -lOpenCL -o wmds
- For Python MDS/WMDS
No separate building is required
We have included a python distributable package named claret in the dist directory of the project. We will add a C++ distributable in a future commit. To use wmds from claret in your program:
- Put dist/claret folder in the same directory as your program
- Import wmds from claret
from claret import wmds
- Call reduce method from wmds. Pass 2D data array, weigths and 2 as the projected dimension
wmds.reduce(data, weights, 2)