Skip to content

Instantly share code, notes, and snippets.

View martin-steinegger's full-sized avatar

Martin Steinegger martin-steinegger

View GitHub Profile
/////////////////////////////////////////////////////////////////////////////////////
// Compare HMMs with one another and look for sub-optimal alignments that share no pair with previous ones
// The function is called with q and t
// If q and t are equal (self==1), only the upper right part of the matrix is calculated: j>=i+3
/////////////////////////////////////////////////////////////////////////////////////
void Hit::Viterbi(HMM* q, HMM* t, float** Sstruc)
{
// Linear topology of query (and template) HMM:
// 1. The HMM HMM has L+2 columns. Columns 1 to L contain
#!/bin/bash -e
export CC=gcc
export CXX=g++
cat <<'CPUDOC' | $CC -std=gnu99 -o "testcpu" -xc -
#include <stdio.h>
#define D(x) __builtin_cpu_supports((x))?(x)
int main(){puts(D("avx2"):D("sse4.1"):"fail");}
CPUDOC
{% set version = "2-23394" %}
{% set sha256 = "4734846e6fcc78a80058f1c699b2deb7f2a6b5c0cf1c1f1dd75a20403b81f387" %}
package:
name: mmseqs2
version: {{ version }}
source:
fn: mmseqs2-{{ version }}.tar.gz
url: https://github.com/soedinglab/mmseqs2/archive/{{ version }}.tar.gz
Index: src/alignment/MsaFilter.cpp
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/alignment/MsaFilter.cpp (revision 2339462c06eab0bee64e4fc0ebebf7707f6e53fd)
+++ src/alignment/MsaFilter.cpp (date 1520402320000)
@@ -245,6 +245,13 @@
<< ": " << __func__ << ":" << "\n";
Debug(Debug::WARNING)
@martin-steinegger
martin-steinegger / gist:8172514
Last active January 1, 2016 16:39
_M256_SLLI_SI256 CROSS LANE
template <unsigned int N> __m256i _mm256_shift_left2(__m256i a) {
__m256i mask = _mm256_srli_si256(
_mm256_permute2x128_si256(a, a, _MM_SHUFFLE(0,0,3,0)) , 16-N);
return _mm256_or_si256(_mm256_slli_si256(a,N),mask);
}
@martin-steinegger
martin-steinegger / gist:6601809
Created September 17, 2013 22:55
extract float from __m128 register with sse2
inline float get_first( const __m128 vec){return _mm_cvtss_f32(_mm_shuffle_ps(vec,vec, _MM_SHUFFLE2(0,0)));}
inline float get_second(const __m128 vec){return _mm_cvtss_f32(_mm_shuffle_ps(vec,vec, _MM_SHUFFLE2(0,1)));}
inline float get_third( const __m128 vec){return _mm_cvtss_f32(_mm_shuffle_ps(vec,vec, _MM_SHUFFLE2(1,0)));}
inline float get_fourth(const __m128 vec){return _mm_cvtss_f32(_mm_shuffle_ps(vec,vec, _MM_SHUFFLE2(1,1)));}