Je développe un widget QT qui utilise des jeux d'instructions SIMD. J'ai compilé 3 versions: SSE3, AVX, et AVX2 (simdpp permet de basculer entre elles par un seul #define).Envoi d'instructions SIMD + SIMDPP + qmake
Maintenant, ce que je veux, c'est que mon widget permute automatiquement entre ces implémentations, selon le meilleur jeu d'instructions supporté. Guide qui est fourni avec simdpp utilise la magie 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
Voici un lien vers le guide: http://p12tic.github.io/libsimdpp/v2.0~rc2/libsimdpp/arch/dispatch.html
Je ne sais pas comment mettre en œuvre un tel comportement avec qmake. Des idées?
D'abord, je pense à la création d'une bibliothèque partagée avec du code distribué et au lien avec le projet. Ici, je suis coincé à nouveau. App est multi-plateforme, ce qui signifie qu'elle doit compiler avec GCC et MSVC (vc120, pour être exact), ce qui oblige à utiliser nmake dans Windows, et j'ai essayé, vraiment, mais c'était comme la pire expérience de toute ma vie de programmeur .
Merci d'avance, les programmeurs du monde!
Vous ne pouvez pas construire le même fichier plus d'une fois avec qmake. Vous aurez besoin de trouver un moyen de contourner cela (diviser le code ifdef'd entre plusieurs fichiers, etc.) – peppe