Package: cualgo
CuAlgoCuAlgo is a Python library benefiting from GPU-accelerated computing, featuring a collection of fundamental algorithms implemented with CUDA. Currently, it includes the Floyd-Warshall algorithm for graph analysis, showcasing the potential of GPU acceleration.Key FeaturesGraph Algorithms:Floyd-Warshall algorithmWhy CuAlgo?Significant Speedup: Experience substantial performance gains with CuAlgo's GPU-accelerated algorithms compared to their CPU approaches.User-Friendly Python Interface: CuAlgo provides convenient interface for Python users. It is compatible withNumPy, allowing for easy data interchange with existing scientific computing workflows. Ensuring that python developers can leverage GPU acceleration without delving into CUDA programming details.Cross-Platform Compatibility: Developed with CMake, CuAlgo supports cross-platform development, enabling seamless compilation on various operating systems.Performance EvaluationExplore different implementations of the Floyd-Warshall algorithm using datasets of sizes N=40, N=1000, and N=2000. This section presents a comprehensive analysis of the efficiency improvements achieved through GPU acceleration.MethodologyCPU Version: The algorithm is executed on the CPU without GPU acceleration.CPU (12 threads) Version: Runs on the CPU with 12 threads using OpenMP.GPU (Unoptimized) Version: Initial GPU implementation with similar parallelism as the next GPU (Optimized) Version.GPU (Optimized) Version: GPU implementation with optimizations, including loop/block unrolling, dynamic parallelism, and coalesced memory access, fully leveraging GPU resources efficiently.The charts illustrate the speedup achieved by CuAlgo's GPU-accelerated algorithms over CPU-based implementations. Notably, the optimized GPU version outperforms both the unoptimized GPU and CPU versions when N grows large, emphasizing the impact of optimization on algorithm efficiency.Hardware and Software Information:CPUAMD Ryzen 9 5900X 12-Core ProcessorGPUNVIDIA GeForce RTX 3060 Ti - 8GBRAM32GB DDR4 3600 MhzCUDA Toolkit Version12.2GPU Driver Version537.13Prerequisites(For linux, need GCC compiler with C++ support (gcc works better with CUDA's compiler), and GNU make)LatestNVIDIA GPU driverPython 3.7+ with pip availableLatest CUDA toolkit installed with nvcc compiler.(download here)NOTE: [Recommended]You can skip 2 and 3. by usingconda, seeInstallationbelowInstallationLinux / Windows [Recommended]:condainstallcuda-cnvidia
python-mpipinstall--upgradepip
pipinstallcualgoWindows (without conda):Install NVIDIA latest GPU driver by yourselfpython -m pip install --upgrade pip && pip install cualgoSample CodeSupport data type ofNumpy.fromcualgoimportgraphascgimportnumpyasnpgraph=np.array([[0,7,np.inf,8],[np.inf,0,5,np.inf],[np.inf,np.inf,0,2],[np.inf,np.inf,np.inf,0]],dtype=np.float64)print(cg.floydwarshall(graph))# [[0.0, 7.0, 12.0, 8.0], [inf, 0.0, 5.0, 7.0], [inf, inf, 0.0, 2.0], [inf, inf, inf, 0.0]]Or just simply pass 2Dlistin pythonfromcualgoimportgraphascgINF=9999graph=[[0,7,INF,8],[INF,0,5,INF],[INF,INF,0,2],[INF,INF,INF,0]]print(cg.floydwarshall(graph))# [[0, 7, 12, 8], [9999, 0, 5, 7], [9999, 9999, 0, 2], [9999, 9999, 9999, 0]]