Skip to content

Commit

Permalink
handle non-x86 builds again
Browse files Browse the repository at this point in the history
  • Loading branch information
mr-c committed Feb 6, 2020
1 parent 1af10fa commit 2248fef
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 4 deletions.
104 changes: 104 additions & 0 deletions CMakeLists.txt
Expand Up @@ -5,6 +5,7 @@ option(BUILD_STATIC "BUILD_STATIC" OFF)
option(EXTRA "EXTRA" OFF)
option(STATIC_LIBGCC "STATIC_LIBGCC" OFF)
option(STATIC_LIBSTDC++ "STATIC_LIBSTDC++" OFF)
option(X86 "X86" ON)

IF(STATIC_LIBSTDC++)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++")
Expand Down Expand Up @@ -63,13 +64,16 @@ set(DISPATCH_OBJECTS

add_library(arch_generic OBJECT ${DISPATCH_OBJECTS})
target_compile_options(arch_generic PUBLIC -DDISPATCH_ARCH=ARCH_GENERIC)
if(X86)
add_library(arch_sse4_1 OBJECT ${DISPATCH_OBJECTS})
if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
target_compile_options(arch_sse4_1 PUBLIC -DDISPATCH_ARCH=ARCH_SSE4_1 -D__SSSE3__ -D__SSE4_1__ -D__POPCNT__)
else()
target_compile_options(arch_sse4_1 PUBLIC -DDISPATCH_ARCH=ARCH_SSE4_1 -mssse3 -mpopcnt -msse4.1)
endif()
endif(X86)

if(X86)
add_executable(diamond $<TARGET_OBJECTS:arch_generic>
$<TARGET_OBJECTS:arch_sse4_1>
src/run/main.cpp
Expand Down Expand Up @@ -159,6 +163,106 @@ add_executable(diamond $<TARGET_OBJECTS:arch_generic>
src/test/data.cpp
src/basic/matrix_tables.cpp
)
else()
add_executable(diamond $<TARGET_OBJECTS:arch_generic>
src/run/main.cpp
src/basic/config.cpp
src/basic/score_matrix.cpp
src/blast/blast_filter.cpp
src/blast/blast_seg.cpp
src/blast/sm_blosum45.c
src/blast/sm_blosum50.c
src/blast/sm_blosum62.c
src/blast/sm_blosum80.c
src/blast/sm_blosum90.c
src/blast/sm_pam30.c
src/blast/sm_pam70.c
src/blast/sm_pam250.c
src/data/queries.cpp
src/data/reference.cpp
src/data/seed_histogram.cpp
src/output/daa_record.cpp
src/util/command_line_parser.cpp
src/util/seq_file_format.cpp
src/util/util.cpp
src/basic/basic.cpp
src/basic/hssp.cpp
src/dp/ungapped_align.cpp
src/run/tools.cpp
src/dp/greedy_align.cpp
src/output/output_format.cpp
src/output/join_blocks.cpp
src/data/frequent_seeds.cpp
src/align/legacy/query_mapper.cpp
src/output/blast_tab_format.cpp
src/dp/padded_banded_sw.cpp
src/dp/needleman_wunsch.cpp
src/output/blast_pairwise_format.cpp
src/dp/comp_based_stats.cpp
src/run/double_indexed.cpp
src/output/sam_format.cpp
src/align/align.cpp
src/search/setup.cpp
src/dp/diag_scores.cpp
src/data/taxonomy.cpp
src/basic/masking.cpp
src/dp/banded_sw.cpp
src/data/seed_set.cpp
src/util/simd.cpp
src/output/taxon_format.cpp
src/output/view.cpp
src/output/output_sink.cpp
src/output/target_culling.cpp
src/align/legacy/greedy_pipeline.cpp
src/align/legacy/swipe_pipeline.cpp
src/align/legacy/banded_swipe_pipeline.cpp
src/data/ref_dictionary.cpp
src/util/io/compressed_stream.cpp
src/util/io/deserializer.cpp
src/util/io/file_sink.cpp
src/util/io/file_source.cpp
src/util/io/input_file.cpp
src/util/io/input_stream_buffer.cpp
src/util/io/output_file.cpp
src/util/io/output_stream_buffer.cpp
src/util/io/serializer.cpp
src/util/io/temp_file.cpp
src/util/io/text_input_file.cpp
src/data/taxon_list.cpp
src/data/taxonomy_nodes.cpp
src/util/algo/MurmurHash3.cpp
src/search/stage0.cpp
src/data/seed_array.cpp
src/output/paf_format.cpp
src/util/system/system.cpp
src/run/cluster.cpp
src/util/algo/greedy_vortex_cover.cpp
src/util/sequence/sequence.cpp
src/tools/tsv_record.cpp
src/tools/tools.cpp
src/util/system/getRSS.cpp
src/util/math/sparse_matrix.cpp
src/lib/tantan/LambdaCalculator.cc
src/data/taxonomy_filter.cpp
src/util/algo/upgma.cpp
src/util/algo/upgma_mc.cpp
src/util/algo/edge_vec.cpp
src/util/string/string.cpp
src/align/extend.cpp
src/align/target.cpp
src/test/simulate.cpp
src/test/test.cpp
src/align/ranking.cpp
src/align/ungapped.cpp
src/align/gapped.cpp
src/align/culling.cpp
src/cluster/medoid.cpp
src/align/output.cpp
src/tools/roc.cpp
src/test/data.cpp
src/basic/matrix_tables.cpp
)
endif()

if(EXTRA)
target_sources(diamond
Expand Down
4 changes: 2 additions & 2 deletions src/dp/swipe/swipe_wrapper.cpp
Expand Up @@ -138,8 +138,8 @@ list<Hsp> swipe(const sequence &query, vector<DpTarget>::iterator target_begin,
out.splice(out.end(), swipe_threads<int32_t>(query, overflow16.begin(), overflow16.end(), frame, composition_bias ? composition_bias->int8.data() : nullptr, flags, score_cutoff, overflow32));
return out;
#else
return swipe_threads<int32_t>(query, target_begin, target_end, frame, composition_bias ? composition_bias->int8.data() : nullptr, flags, overflow32);
return swipe_threads<int32_t>(query, target_begin, target_end, frame, composition_bias ? composition_bias->int8.data() : nullptr, flags, score_cutoff, overflow32);
#endif
}

}}}
}}}
6 changes: 5 additions & 1 deletion src/tools/benchmark.cpp
Expand Up @@ -141,6 +141,7 @@ void benchmark_ungapped_sse(const sequence &s1, const sequence &s2)
}
#endif

#ifdef __SSE__
void benchmark_transpose() {
static const size_t n = 100000000llu;
static char in[256], out[256];
Expand All @@ -152,6 +153,7 @@ void benchmark_transpose() {
}
cout << "Matrix transpose 16x16 bytes:\t" << (double)duration_cast<std::chrono::nanoseconds>(high_resolution_clock::now() - t1).count() / (n * 256) * 1000 << " ps/Letter" << endl;
}
#endif

#ifdef __SSE2__
void swipe_cell_update() {
Expand Down Expand Up @@ -236,7 +238,9 @@ void benchmark() {
#ifdef __SSSE3__
benchmark_ungapped_sse(s1, s2);
#endif
#ifdef __SSE__
benchmark_transpose();
#endif
#ifdef __SSE2__
banded_swipe(s1, s2);
swipe_cell_update();
Expand All @@ -247,4 +251,4 @@ void benchmark() {
#endif
}

}}
}}
11 changes: 10 additions & 1 deletion src/util/simd.h
Expand Up @@ -42,6 +42,7 @@ enum class Arch { None, Generic, SSE4_1 };
enum Flags { SSSE3 = 1, POPCNT = 2, SSE4_1 = 4 };
Arch arch();

#ifdef __SSE__
#define DECL_DISPATCH(ret, name, param) namespace ARCH_GENERIC { ret name param; }\
namespace ARCH_SSE4_1 { ret name param; }\
inline std::function<decltype(ARCH_GENERIC::name)> dispatch_target_##name() {\
Expand All @@ -50,9 +51,17 @@ case SIMD::Arch::SSE4_1: return ARCH_SSE4_1::name;\
default: return ARCH_GENERIC::name;\
}}\
const std::function<decltype(ARCH_GENERIC::name)> name = dispatch_target_##name();
#else
#define DECL_DISPATCH(ret, name, param) namespace ARCH_GENERIC { ret name param; }\
namespace ARCH_SSE4_1 { ret name param; }\
inline std::function<decltype(ARCH_GENERIC::name)> dispatch_target_##name() {\
return ARCH_GENERIC::name;\
}\
const std::function<decltype(ARCH_GENERIC::name)> name = dispatch_target_##name();
#endif

std::string features();

};

#endif
#endif
3 changes: 3 additions & 0 deletions src/util/simd/transpose.h
Expand Up @@ -21,6 +21,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.

#include "../simd.h"

#ifdef __SSE__

inline void merge(__m128i &first, __m128i &second, __m128i &temp)
{
temp = first;
Expand Down Expand Up @@ -118,4 +120,5 @@ inline void transpose(char* in, char* out, int hIn) {
merge_fast_write(xmm0, xmm1, 0, 1, xmm9, (__m128i*)out);
}

#endif /* __SSE__ */
#endif /* TRANSPOSE_H_ */

0 comments on commit 2248fef

Please sign in to comment.