schnitzer-lab / extract-wip

Do not use this repository for scientific work! It is changing constantly. Use our public version, which is both stable and currently maintained. Link: Check Readme.
MIT License
0 stars 5 forks source link

Increase the performance of and parallelize remove_reduntant.m #1

Closed fatihdinc closed 1 year ago

fatihdinc commented 3 years ago

General info:

The starting code of EXTRACT is the wrapper called "extractor.m" which calls the necessary internal functions. Apart from housekeeping, the most important code this wrapper calls is "run_extract.m" which runs pre-processing, cell-finding, and cell-refinement on the partition of the movie currently selected. "remove_redundant.m" is called inside "run_extract.m" during cell-refinement, removes cells that are deemed unsatisfactory by the internal quality metrics calculated by EXTRACT.

Getting the test data:

Please run the code in tutorial 2 (it is a few GB movie, so having 8-16GB RAM should be more than enough to run it in a single partition), stopping the code right before remove_redundant.m inside run_extract.m. Save the workspace, this is the test data.

What is needed:

This code is not parallelized and there are most likely very inefficient computations happening inside. First of all, the inefficiencies of the code should be cured (without any parallelization). Then, whenever applicable, GPU and/or parallel processing should be implemented.

Specific information for parallelization:

EXTRACT has two separate flags for GPU and parallel CPU computations: config.use_gpu and config.parallel_cpu. This code only takes use_gpu as an input, which should change and include config.parallel_cpu. There needs to be 4 separate cases:

  1. No GPU or parallel CPU asked: Everything runs in series in CPU.
  2. GPU on, no parallel CPU: Everything runs on GPU
  3. Parallel CPU on, no GPU: Everything runs parallel on CPU (be careful about the RAM memory!)
  4. Parallel CPU AND GPU: Part of it runs on GPU, other part on CPU. (be careful about the RAM memory AND dynamic job division between CPU and GPU)
fatihdinc commented 1 year ago

EXTRACT has been made 3x faster compared to the wip repository with changes to not only remove_redundant.m, but other parts of the code as well.