Я разрабатываю виджет QT, который использует наборы инструкций SIMD. Я скомпилировал 3 версии: SSE3, AVX и AVX2 (simdpp позволяет переключаться между ними одним #define).Отправка инструкций SIMD + SIMDPP + qmake
Теперь я хочу, чтобы мой виджет автоматически переключался между этими реализациями в соответствии с наилучшим поддерживаемым набором команд. Руководство, которое обеспечивается simdpp использует некоторые Makefile магии:
CXXFLAGS=""
test: main.o test_sse2.o test_sse3.o test_sse4_1.o test_null.o
g++ $^ -o test
main.o: main.cc
g++ main.cc $(CXXFLAGS) -c -o main.o
test_null.o: test.cc
g++ test.cc -c $(CXXFLAGS) -DSIMDPP_EMIT_DISPATCHER \
-DSIMDPP_DISPATCH_ARCH1=SIMDPP_ARCH_X86_SSE2 \
-DSIMDPP_DISPATCH_ARCH2=SIMDPP_ARCH_X86_SSE3 \
-DSIMDPP_DISPATCH_ARCH3=SIMDPP_ARCH_X86_SSE4_1 -o test_null.o
test_sse2.o: test.cc
g++ test.cc -c $(CXXFLAGS) -DSIMDPP_ARCH_X86_SSE2 -msse2 -o test_sse2.o
test_sse3.o: test.cc
g++ test.cc -c $(CXXFLAGS) -DSIMDPP_ARCH_X86_SSE3 -msse3 -o test_sse3.o
test_sse4_1.o: test.cc
g++ test.cc -c $(CXXFLAGS) -DSIMDPP_ARCH_X86_SSE4_1 -msse4.1 -o test_sse4_1.o
Вот ссылка на руководство: http://p12tic.github.io/libsimdpp/v2.0~rc2/libsimdpp/arch/dispatch.html
Я понятия не имею, как реализовать такое поведение с QMAKE. Есть идеи?
Прежде всего, нужно создать общую библиотеку с отправленным кодом и связать ее с проектом. Здесь я снова застрял. Приложение является кросс-платформенным, что означает, что он должен компилироваться как с GCC, так и с MSVC (точнее, vc120), что заставляет использовать nmake в Windows, и я старался, действительно, но это было похоже на худший опыт в моей жизни программиста ,
Заранее спасибо, программисты мира!
Вы не можете создать один и тот же файл несколько раз с QMAKE. Вам нужно будет найти способ обойти это (разделить код ifdef'd на несколько файлов и т. Д.) – peppe