Image-based extrapolation, subpixel-level compensation and GPU-accelerated approximate integrals calculation to measure global distortions in map projections
Creators: name: Yan, Jin
name: Gao, Jing
name: Xu, TianSheng
name: Zhang, Jing
name: Liu, Jingwei
name: Li, Ni
name: Gong, Guanghong
Publisher: name: figshare
Year: 2024
Subjects: classificationCode: 401301
subject: Cartography and digital mapping
classificationCode: 490399
subject: Numerical and computational mathematics not elsewhere classified

description: This study proposes a modern GPU-accelerated integration method based on image encoding, extrapolation, and subpixel-level compensation to calculate global distortions in map projections.It is recommended to use computers with memory greater than 16 GB; otherwise, there may be errors. It can be optimized for streaming processing to support memory less than 16 GB, but this is not the focus of our study.int_global_distort.jl: Demonstration code for Kavraisky VII projection using nGPUtrds = 256 and nGPUblks = 20 with partitioning for GPU processing (see bench_global_distort_gpu_partitioning.jl).bench_global_distort_cpu.jl: The most time-consuming part of the algorithm (i.e., calculating the distortion term) is implemented on CPU for reference. Coordinate extraction and area term calculation is still ruining on GPU. bench_global_distort_cpu_no_gpu.jl: Implementation using pure CPU, ignoring area term calculation. The results of coordinate extraction are pre-calculated and stored in JLD files, which are loaded for our algorithm of distortion calculation on CPU.bench_global_distort_gpu.jl: Implementation of calculating the distortion term on GPUs with greater than 6 GB of memory for acceleration. Parameters are nGPUtrds = 128 and nGPUblks = [32, 64, 96, 108, 128, 160, 192].<br>bench_global_distort_gpu_partitioning.jl: Implementation involves partitioning for GPUs with less than 6 GB of memory. Parameters are nGPUtrds = 256 and nGPUblks = [4, 8, 12, 16, 20, 24, 28, 32].Kavraisky VII (kav7) projection is an example for the demonstration of the proposed method. The output of the demonstration code is as below.&gt; julia .\int_global_distort.jlkav7coordinate extraction ...auto-detect: (blocks = 40, threads = 768)auto-detect: (blocks = 40, threads = 768) 17.154844 seconds (21.30 k allocations: 9.328 GiB, 5.76% gc time, 0.04% compilation time)extrapolation for non-cylindrical projections ...calculation of area term 1/2 ...auto-detect: (blocks = 20, threads = 512) 1.944538 seconds (601.99 k allocations: 36.460 MiB, 3.00% gc time, 7.69% compilation time)calculation of area term 2/2 ...auto-detect: (blocks = 20, threads = 512) 1.404392 seconds (35 allocations: 1.797 KiB)1.007611 seconds (178.51 k allocations: 11.105 MiB, 13.54% compilation time)calculation of distortion term 1/2 ...manually set: (blocks: 20, threads: 256) 11.520220 seconds (640.17 k allocations: 39.615 MiB, 2.16% compilation time)2.634020 seconds (5.04 M allocations: 5.682 GiB, 7.14% gc time, 3.50% compilation time)calculation of distortion term 2/2 ...manually set: (blocks: 20, threads: 256) 11.447558 seconds (64 allocations: 3.562 KiB)3.141093 seconds (4.96 M allocations: 5.678 GiB, 8.12% gc time)post-processing of compensation ...global area distortion for kav7 is: 0.16145414480942344global maximum angular distortion for kav7 is: 0.22713971424958576global distortion for kav7 is: 0.27867524229024315