% Run the GraphBLAS demo2

% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
% SPDX-License-Identifier: Apache-2.0

% reset to the default number of threads
clear all
maxNumCompThreads ('automatic') ;
GrB.clear ;

gbdemo2
 GBDEMO2 Extreme performance differences: GraphBLAS vs MATLAB.
 
  Usage:
 
        gbdemo2             % uses a default bnz = 6000
        gbdemo2 (20000)     % uses bnz = 20000
 
  Many of the GraphBLAS operations used in gbdemo are perhaps 3x to
  50x faster than the corresponding MATLAB operations, depending on how
  many cores your computer has.  Here's an example where GraphBLAS is
  asymptotically far faster than MATLAB R2019a: a simple assignment
  for a large matrix C:
 
        C(I,J) = A
 
  The matrix C is constructed via C = kron (B,B) where nnz (B) is
  roughly the bnz provided on input (with a default of bnz = 6000),
  so that C will have about bnz^2 entries, or 36 million by default.
  I and J are chosen randomly, and A is 5000-by-5000.
 
  When the problem becomes large, MATLAB will take a very long time.
  If you have enough memory, and want to see higher speedups in
  GraphBLAS, increase bnz (and be prepared to wait even longer).
  With the default bnz = 6000, this test takes about 4GB of RAM.
 
  On my Dell XPS 4-core laptop (Intel(R) Core(TM) i7-8565U, 16GB
  RAM), using MATLAB R2019a, when C becomes 9 million by 9 million,
  the computation C(I,J)=A for MATLAB matrices C, I, J, and A takes
  several minutes, whereas GraphBLAS takes less than a second, or
  about 500x faster than MATLAB.  On a desktop with an Intel(R)
  Xeon(R) CPU E5-2698 v4 @ 2.20GHz with 20 hardware cores, the
  speedup over MATLAB is even more dramatic (up to 2,660x has been
  observed).
 
  See also GrB.assign, subsasgn.


# of threads used in GraphBLAS: 4


C(I,J)=A where C is 1 million -by- 1 million
with 35.7126 million entries:

    A is 5000-by-5000 with 49954 entries
    setup time:     0.292615 sec
    GraphBLAS time: 0.400704 sec
    Starting MATLAB ... please wait ... 
    MATLAB time:    0.423449 sec
    Speedup of GraphBLAS over MATLAB: 1.05676
    check time:     0.402826 sec
    all tests passed

C(I,J)=A where C is 4 million -by- 4 million
with 35.8202 million entries:

    A is 5000-by-5000 with 49954 entries
    setup time:     0.354804 sec
    GraphBLAS time: 0.400309 sec
    Starting MATLAB ... please wait ... 
    MATLAB time:    0.342458 sec
    Speedup of GraphBLAS over MATLAB: 0.855484
    check time:     0.312558 sec
    all tests passed

C(I,J)=A where C is 9 million -by- 9 million
with 35.928 million entries:

    A is 5000-by-5000 with 49954 entries
    setup time:     0.379629 sec
    GraphBLAS time: 0.459797 sec
    Starting MATLAB ... please wait ... 
    MATLAB time:    190.938 sec
    Speedup of GraphBLAS over MATLAB: 415.266
    check time:     0.36055 sec
    all tests passed

C(I,J)=A where C is 16 million -by- 16 million
with 35.916 million entries:

    A is 5000-by-5000 with 49954 entries
    setup time:     0.443602 sec
    GraphBLAS time: 0.546551 sec
    Starting MATLAB ... please wait ... 
    MATLAB time:    208.425 sec
    Speedup of GraphBLAS over MATLAB: 381.346
    check time:     0.376075 sec
    all tests passed

C(I,J)=A where C is 25 million -by- 25 million
with 35.964 million entries:

    A is 5000-by-5000 with 49954 entries
    setup time:     0.483604 sec
    GraphBLAS time: 0.472668 sec
    Starting MATLAB ... please wait ... 
    MATLAB time:    249.645 sec
    Speedup of GraphBLAS over MATLAB: 528.162
    check time:     0.444949 sec
    all tests passed

C(I,J)=A where C is 36 million -by- 36 million
with 35.976 million entries:

    A is 5000-by-5000 with 49954 entries
    setup time:     0.554859 sec
    GraphBLAS time: 0.868482 sec
    Starting MATLAB ... please wait ... 
    MATLAB time:    275.087 sec
    Speedup of GraphBLAS over MATLAB: 316.744
    check time:     0.528343 sec
    all tests passed