2016-05-07 9 views
0

Kann ich einen Funktionszeiger für _mm_load_ps, _mm_store_ps und dergleichen definieren?Intel intrinsics - Funktionszeiger laden/speichern

Ich denke an so etwas wie

float* x0; //param 
... 
__m128 (*load_x0)(float const *mem); 
if((unsigned long)x0 & 15) load_x0 = &_mm_loadu_ps; 
else load_x0 = &_mm_load_ps; 

aber das führt zu

undefined reference to _mm_load_ps

undefined reference to _mm_loadu_ps

Antwort

2

Intrinsic-Funktionen direkt in den Anweisungen kompiliert werden für sie stehen. Es werden keine Funktionsaufrufe ausgegeben, und in keiner Bibliothek ist eine Implementierung dieser Funktionen vorhanden. Aus diesem Grund können Sie einen intrinsischen als Funktionszeiger nicht verwenden.

Betrachten Wrapper wie diese machen:

__m128 my_mm_load_ps(float const *mem) 
{ 
    return _mm_load_ps(mem); 
} 

__m128 my_mm_loadu_ps(float const *mem) 
{ 
    return _mm_loadu_ps(mem); 
} 

Sie können verwenden, um den Wrapper als Funktionszeiger:

__m128 (*load_x0)(float const *mem); 
if((unsigned long)x0 & 15) load_x0 = &my_mm_loadu_ps; 
else load_x0 = &my_mm_load_ps; 
+0

Interessant. Ich nutze also die ausgerichtete Last, wenn es möglich ist, muss aber einen Overhead für einen zusätzlichen Funktionsaufruf bezahlen. Glaubst du, dass sich das auszahlen wird? – User1291

+2

@ User1291 Nein, wird es nicht. Es gibt keinen Unterschied zwischen ausgerichteten und nicht ausgerichteten Instruktionen (wenn sie auf ausgerichteten Daten verwendet werden) auf allen außer einigen sehr alten Mikroarchitekturen. – fuz

+1

@ User1291 Verwenden Sie einfach nicht ausgerichtete Lasten für alles und es wird alles gut. Benchmark im Zweifelsfall. – fuz

-1

werden auch Sie die er ader-Dateien für diese Funktionen?

„xmmintrin.h“ ist der entsprechende Header für diesen Vektor Lasten

+0

Natürlich. (Nun, mit pmmintrin.h, eigentlich.) Ich lösche die Zuordnungen zu '' load_x0'' und stur benutze '' _mm_loadu_ps'' überall, es gibt keinen solchen Fehler. – User1291

+2

Wenn diese Compiler-Intrinsics sind, dann haben sie keine Adresse, und Sie können keine Referenz darauf finden. –

+0

Und ich glaube nicht, dass es eine Möglichkeit gibt, diese Einschränkung zu umgehen, nein? Das ist ... unbefriedigend. Trotzdem danke. Du willst es ausarbeiten, damit ich es als Antwort akzeptieren kann? – User1291