This is a test version of Biostars. For the public version, visit https://www.biostars.org.
GATB - Multithreaded iteration of paired banks ?

Hi there,

Is there a way to iterate two banks at the same time in a multithreaded fashion? I tried changing the code snippet: Multithreaded iteration of a bank(Code is from example multithreading6.cpp ) to accept a PairedIterator<Sequence> instead of the standard bank iterator.

Here is what I tried;

ThreadObject<string> correctionOutput_1, correctionOutput_2;

PairedIterator<Sequence> itPair(paired_bank1->iterator(), paired_bank2->iterator());

   ISynchronizer* synchro = System::thread().newSynchronizer();

    dispatcher->iterate(itPair, [&](pair<Sequence, Sequence> &seqPair) {
        LocalSynchronizer sync (synchro);
        string &localCorrection_1 = correctionOutput_1();
        string &localCorrection_2 = correctionOutput_2();
        Sequence &s1 = seqPair.first;
        Sequence &s2 = seqPair.second;
        cout << s1.toString()  << "\t" << s2.toString() << endl;

        // do stuff
    });
    delete synchro;

Nothing is being printed - I am most likely missing something obvious here... Any help is appreciated, thanks!

gatb multithreading

1 answer

There was a tricky long-standing bug in GATB where PairedIterator did not work in conjunction with Dispatcher.

I just fixed it, if you update to the master branch of gatb-core, it should work. You can also try the new tools/multithreading8.cpp example that illustrates PairedIterator with Dispatcher.

Log in to answer this question.