tinglab / DACE

DACE: A Scalable DP-means Algorithm for Clustering Extremely Large Sequence Data
GNU General Public License v3.0
10 stars 3 forks source link

dace.cpp uncompilable #1

Open kad-ecoli opened 3 years ago

kad-ecoli commented 3 years ago

I try to compile dace with openmpi 2.1.6, but get the following error:

DACE/src/dace.cpp:404:48: error: cannot bind rvalue reference of type 'long int&&' to lvalue of type 'long int'
  404 |      new_item->push_back(make_pair<long, int> (i, j - BIG_KMER));
      |                                                ^
DACE/src/dace.cpp:408:50: error: cannot bind rvalue reference of type 'long int&&' to lvalue of type 'long int'
  408 |       bin[kmer]->push_back(make_pair<long, int> (i, j - BIG_KMER));

I tried to change line 404 and 408 to

      new_item->push_back(make_pair<long, int> ((long)(i), j - BIG_KMER));

and

       bin[kmer]->push_back(make_pair<long, int> ((long)(i), j - BIG_KMER));

This indeed ensures build can be completed. However, when I test my executable on the example data, I cannot run through:

$ mpiexec -np 2 ../bin/dace -i sim1.fa -o sim1_out -p 0.9
--------------------------------------------------------------------------
WARNING: No preset parameters were found for the device that Open MPI
detected:

  Local host:            login02
  Device name:           mlx5_0
  Device vendor ID:      0x02c9
  Device vendor part ID: 4123

Default device parameters will be used, which may result in lower
performance.  You can edit any of the files specified by the
btl_openib_device_param_files MCA parameter to set values for your
device.

NOTE: You can turn off this warning by setting the MCA parameter
      btl_openib_warn_no_device_params_found to 0.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
WARNING: There was an error initializing an OpenFabrics device.

  Local host:   login02
  Local device: mlx5_0
--------------------------------------------------------------------------
[20:20:15][INFO][Master] Running parameter: ../bin/dace -i sim1.fa -o sim1_out -p 0.9 
[20:20:15][INFO][Master] reading input [sim1.fa]
[20:20:15][INFO][Master] start clustering
[20:20:15][INFO][Master] LSH iteration, loop id= 1
[20:20:15][INFO][Master] performing data partition
[20:20:15][INFO][Master] performing DP-means for clustering ...
[20:20:15][INFO][Master] ansblockid (master process) finished
[20:20:15][INFO][Master] sync clustering result of each block
[20:20:15][INFO][Master] LSH iteration finish, cluster num= [19], singleton= [0],  nonsingleton= [19]
[20:20:15][INFO][Master] LSH iteration, loop id= 2
[20:20:15][INFO][Master] performing data partition
[20:20:15][INFO][Master] performing DP-means for clustering ...
[20:20:15][INFO][Master] ansblockid (master process) finished
[20:20:15][INFO][Master] sync clustering result of each block
[20:20:15][INFO][Master] LSH iteration finish, cluster num= [18], singleton= [0],  nonsingleton= [18]
[20:20:15][INFO][Master] LSH iteration, loop id= 3
[20:20:15][INFO][Master] performing data partition
[20:20:15][INFO][Master] performing DP-means for clustering ...
[20:20:15][INFO][Master] ansblockid (master process) finished
[20:20:15][INFO][Master] sync clustering result of each block
[20:20:15][INFO][Master] LSH iteration finish, cluster num= [14], singleton= [0],  nonsingleton= [14]
[20:20:15][INFO][Master] LSH iteration, loop id= 4
[20:20:15][INFO][Master] performing data partition
[20:20:15][INFO][Master] performing DP-means for clustering ...
[20:20:15][INFO][Master] ansblockid (master process) finished
[20:20:15][INFO][Master] sync clustering result of each block
[20:20:15][INFO][Master] LSH iteration finish, cluster num= [14], singleton= [0],  nonsingleton= [14]
[20:20:15][INFO][Master] previous cluster num= 14, merge percentage= 0.0000, LSH approach convergence
[20:20:15][INFO][Master] start Big-Kmer Mapping clustering, seqlen= 14
[login02:43580:0:43605] Caught signal 11 (Segmentation fault: address not mapped to object at address 0xffffffffffffff98)
[login02:43580] *** Process received signal ***
[login02:43580] Signal: Segmentation fault (11)
[login02:43580] Signal code: Address not mapped (1)
[login02:43580] Failing at address: 0xffffffffffffff98
[login02:43580] [ 0] /lib64/libpthread.so.0(+0x12dc0)[0x155554c14dc0]
[login02:43580] [ 1] ../bin/dace(_Z10do_binningPv+0x20ad)[0x41f22d]
[login02:43580] [ 2] /lib64/libpthread.so.0(+0x82de)[0x155554c0a2de]
[login02:43580] [ 3] /lib64/libc.so.6(clone+0x43)[0x155553fcd133]
[login02:43580] *** End of error message ***
[login02:43569] 1 more process has sent help message help-mpi-btl-openib.txt / no device params found
[login02:43569] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages
[login02:43569] 1 more process has sent help message help-mpi-btl-openib.txt / error in device init
ZhangZhenmiao commented 3 years ago

I got the same error. In the process() function of dace.cpp, I found that the memory allocated by seqbuf = new long [(long)(TOT_SIZE * 1.5)]; is too small and causes overflow. Changing it to seqbuf = new long [(long)(TOT_SIZE * 2)]; works for me.