|
12 | 12 | b = Ao * ones(FC, k) # Dimension m |
13 | 13 | c = Au * ones(FC, n) # Dimension k |
14 | 14 | B = A * Matrix{FC}(I, m, p) # Dimension m × p |
15 | | - mem = 200 |
| 15 | + mem = 100 |
16 | 16 |
|
17 | 17 | T = real(FC) |
18 | 18 | shifts = T[1; 2; 3; 4; 5] |
|
472 | 472 | (x, stats) = lslq(Ao, b) # warmup |
473 | 473 | actual_lslq_bytes = @allocated lslq(Ao, b) |
474 | 474 | if VERSION < v"1.11.5" || !Sys.isapple() |
475 | | - @test expected_lslq_bytes ≤ actual_lslq_bytes ≤ 1.025 * expected_lslq_bytes |
| 475 | + @test expected_lslq_bytes ≤ actual_lslq_bytes ≤ 1.02 * expected_lslq_bytes |
476 | 476 | end |
477 | 477 |
|
478 | 478 | workspace = LslqWorkspace(Ao, b) |
|
723 | 723 | # - mem (2p*p)-matrices: H |
724 | 724 | # - lwork-vector: buffer |
725 | 725 | function storage_block_gmres_bytes(mem, n, p) |
726 | | - res = (2*n*p + p*p + 2p*p + mem*p + mem*n*p + mem*p*p + mem*(mem+1)*p*p/2 + mem*2p*p) |
| 726 | + res = (2*n*p + p*p + 2p*p + mem*p + mem*n*p + mem*p*p + (mem*(mem+1)÷2)*p*p + mem*2p*p) |
727 | 727 | return nbits_FC * res |
728 | 728 | end |
729 | 729 |
|
730 | | - expected_block_gmres_bytes = storage_block_gmres_bytes(mem, n, p) |
731 | | - block_gmres(A, B; memory=mem, itmax=mem) # warmup |
732 | | - actual_block_gmres_bytes = @allocated block_gmres(A, B; memory=mem, itmax=mem) |
733 | | - if VERSION < v"1.11.5" || !Sys.isapple() |
734 | | - @test expected_block_gmres_bytes ≤ actual_block_gmres_bytes ≤ 1.08 * expected_block_gmres_bytes |
735 | | - end |
736 | | - |
737 | 730 | workspace = BlockGmresWorkspace(A, B; memory=mem) |
738 | 731 | block_gmres!(workspace, A, B) # warmup |
739 | 732 | inplace_block_gmres_bytes = @allocated block_gmres!(workspace, A, B) |
740 | 733 | @test inplace_block_gmres_bytes == 0 |
| 734 | + |
| 735 | + expected_block_gmres_bytes = storage_block_gmres_bytes(mem, n, p) + sizeof(workspace.buffer) |
| 736 | + block_gmres(A, B; memory=mem, itmax=mem) # warmup |
| 737 | + actual_block_gmres_bytes = @allocated block_gmres(A, B; memory=mem, itmax=mem) |
| 738 | + if VERSION < v"1.11.5" || !Sys.isapple() |
| 739 | + @test expected_block_gmres_bytes ≤ actual_block_gmres_bytes ≤ 1.05 * expected_block_gmres_bytes |
| 740 | + end |
741 | 741 | end |
742 | 742 |
|
743 | 743 | @testset "BLOCK-MINRES" begin |
|
752 | 752 | # - mem (2p*p)-matrices: H |
753 | 753 | # - lwork-vector: buffer |
754 | 754 | function storage_block_minres_bytes(mem, n, p) |
755 | | - res = (2*n*p + p*p + 2p*p + mem*p + mem*n*p + mem*p*p + mem*(mem+1)*p*p/2 + mem*2p*p) |
| 755 | + res = (2*n*p + p*p + 2p*p + mem*p + mem*n*p + mem*p*p + (mem*(mem+1)÷2)*p*p + mem*2p*p) |
756 | 756 | return nbits_FC * res |
757 | 757 | end |
758 | 758 |
|
759 | | - expected_block_minres_bytes = storage_block_minres_bytes(mem, n, p) |
| 759 | + workspace = BlockMinresWorkspace(A, B) |
| 760 | + block_minres!(workspace, A, B) # warmup |
| 761 | + inplace_block_minres_bytes = @allocated block_minres!(workspace, A, B) |
| 762 | + @test inplace_block_minres_bytes == 0 |
| 763 | + |
| 764 | + expected_block_minres_bytes = storage_block_minres_bytes(mem, n, p) + sizeof(workspace.buffer) |
760 | 765 | block_minres(A, B) # warmup |
761 | 766 | # actual_block_minres_bytes = @allocated block_minres(A, B) |
762 | 767 | # if VERSION < v"1.11.5" || !Sys.isapple() |
763 | | - # @test expected_block_minres_bytes ≤ actual_block_minres_bytes ≤ 1.08 * expected_block_minres_bytes |
| 768 | + # @test expected_block_minres_bytes ≤ actual_block_minres_bytes ≤ 1.05 * expected_block_minres_bytes |
764 | 769 | # end |
765 | | - |
766 | | - Workspace = BlockMinresWorkspace(A, B) |
767 | | - block_minres!(Workspace, A, B) # warmup |
768 | | - inplace_block_minres_bytes = @allocated block_minres!(Workspace, A, B) |
769 | | - @test inplace_block_minres_bytes == 0 |
770 | 770 | end |
771 | 771 | end |
772 | 772 | end |
|
0 commit comments