hace unas semanas descubrí gracias a mi colega Pablo Vinuesa que BLAST+ del NCBI iba ya por la versión 2.6.0. Cuando miré el resumen de cambios me llamó la atención que ya desde la versión 2.4 soporta un algoritmo multihebra para la fase reconstrucción hacia atrás del alineamiento, que en la literatura de programación dinámica se llama traceback. Dado que nosotros usamos con mucha frecuencia BLAST quise probar en qué se traducían estas novedades en tiempo de cálculo, dado que ya habíamos observado que BLASTP no paralelizaba bien, razón por la cual desarrollamos split_blast.pl, que recientemente comparamos contra DIAMOND.
El experimento consistió en buscar alineamientos locales de 48.588 secuencias de la variedad de cebada Haruna Nijo entre los 7.927 factores de transcripción de nuestra colección http://floresta.eead.csic.es/footprintdb:
$ ncbi-blast-2.2.30+/bin/makeblastdb -in footprintdb.18042017.tf.fasta -dbtype prot $ time ~/soft/ncbi-blast-2.2.30+/bin/blastp -query HarunaNijo_proteins.fa \ -db footprintdb.18042017.tf.fasta -outfmt 6 -max_target_seqs 10 \ -num_threads 8 > HarunaNijo_proteins.2.2.30.blast real 53m47.482s user 122m2.375s sys 0m9.749s $ perl split_blast.pl 8 1000 ncbi-blast-2.2.30+/bin/blastp \
-query HarunaNijo_proteins.fa -db footprintdb.18042017.tf.fasta -outfmt 6 \ -max_target_seqs 10 -output HarunaNijo_proteins.split.blast # runtime: 836 wallclock secs ( 0.71 usr 0.20 sys + 6391.38 cusr 5.54 csys = 6397.83 CPU) # this is ~14m $ ncbi-blast-2.6.0+/bin/makeblastdb -in footprintdb.18042017.tf.fasta -dbtype prot $ time ncbi-blast-2.6.0+/bin/blastp -query HarunaNijo_proteins.fa \ -db footprintdb.18042017.tf.fasta -outfmt 6 -max_target_seqs 10 \ -num_threads 8 > HarunaNijo_proteins.2.6.0.blast
real 20m35.969s user 194m1.715s sys 2m41.827sComo podéis ver, al menos para BLASTP esta versión de BLAST+ supone una ganancia clara en procesadores multicore (8 en esta prueba), a costa de un aumento de tamaño del binario, que pasa de 31MB a 38MB, pero sigue siendo más lento que split_blast.pl,
hasta pronto,
Bruno