OPenMP
-
Ich habe eine Zeile in meinem Code, die in etwa so aussieht:
#pragma omp parallel for simd for (i = 0; i < ode_size; i++) { stagevec[0][i] = foo(i, t + c[0] * h, y); }Dabei handelt es sich bei foo um einen funktionszeiger, der bei Start des Programmes initialisiert wird. Die Zielfunktion hat einfach den Rückgabewert double und nimmt 1 Integer, 1 Double und einen DOuble-Zeiger als Argumente.
Die Berechnungen der von foo referenzierten Funktion sind stets unabhängig voneinander und sollten von daher vektorisierbar sein.
Ein Vec-report bei icc Version 14.01 sagt allerdings:
remark: vectorization support: call to function (unknown) cannot be vectorized
remark: loop was not vectorized: statement cannot be vectorized
warning #13379: loop was not vectorized with "simd"Gibt es eine Möglichkeit (nur mit OpenMP, ohne Compiler-spezifischen Sachen wie Intrinsics oder anderen Direktiven) diese Vektorisierung zu erzwingen?
-
Ist foo konstant?
-
Hmm, für eine Schleifeniteration auf jeden Fall