База ответов ИНТУИТ

Введение в принципы функционирования и применения современных мультиядерных архитектур (на примере Intel Xeon Phi)

<<- Назад к вопросам

Какие ключи компилятора необходимо указать для корректной компиляции следующей функции
void GetOptionPrices(  float * restrict pT, float * restrict pK,   float * restrict pS0, float * restrict pC){  int i;  float d1, d2, erf1, erf2;  for (i = 0; i < N; i++)  {    d1 = (logf(pS0[i] / pK[i]) + (r + sig * sig * 0.5f) *         pT[i]) / (sig * sqrtf(pT[i]));    d2 = (logf(pS0[i] / pK[i]) + (r - sig * sig * 0.5f) *          pT[i]) / (sig * sqrtf(pT[i]));    erf1 = 0.5f + 0.5f * erff(d1 / sqrtf(2.0f));    erf2 = 0.5f + 0.5f * erff(d2 / sqrtf(2.0f));    pC[i] = pS0[i] * erf1 - pK[i] * expf((-1.0f) * r *             pT[i]) * erf2;  }}

(Отметьте один правильный вариант ответа.)

Варианты ответа
никаких, достаточно ключевого слова restrict
-debug
-O2
-restrict (Верный ответ)
Похожие вопросы
Следующую функцию
void GetOptionPricesV4(float *pT, float *pK, float *pS0, float *pC){  int i;  float d1, d2, erf1, erf2;#pragma simd  for (i = 0; i < N; i++)  {    d1 = (logf(pS0[i] / pK[i]) + (r + sig * sig * 0.5f) *         pT[i]) / (sig * sqrtf(pT[i]));    d2 = (logf(pS0[i] / pK[i]) + (r - sig * sig * 0.5f) *         pT[i]) / (sig * sqrtf(pT[i]));    erf1 = 0.5f + 0.5f * erff(d1 / sqrtf(2.0f));    erf2 = 0.5f + 0.5f * erff(d2 / sqrtf(2.0f));    pC[i] = pS0[i] * erf1 - pK[i] * expf((-1.0f) * r *             pT[i]) * erf2;  }}
требуется собрать с поддержкой векторного набора команд AVX. Какие ключи компилятора необходимо использовать
Следующую функцию
void GetOptionPricesV7(float *pT, float *pK, float *pS0, float *pC){  int i;  float d1, d2, erf1, erf2, invf;  float sig2 = sig * sig;#pragma omp parallel for private(invf, d1, d2, erf1, erf2)  for (i = 0; i < N; i++)  {    invf = invsqrtf(sig2 * pT[i]);    d1 = (logf(pS0[i] / pK[i]) + (r + sig2 * 0.5f) *          pT[i]) * invf;    d2 = (logf(pS0[i] / pK[i]) + (r - sig2 * 0.5f) *          pT[i]) * invf;    erf1 = 0.5f + 0.5f * erff(d1 * invsqrt2);    erf2 = 0.5f + 0.5f * erff(d2 * invsqrt2);    pC[i] = pS0[i] * erf1 - pK[i] * expf((-1.0f) * r *            pT[i]) * erf2;  }}
требуется собрать с поддержкой векторного набора команд AVX (ключ –mavx). Нужно ли модифицировать код?
__attribute__((target(mic))) void func(float* a,     float* b, int count, float c, float d){    #pragma omp parallel for     for (int i = 0; i < count; ++i)    {        a[i] = b[i]*c + d;    }}int main(){    const int count = 100;    float a[count], b[count], c, d;    …    #pragma offload target(mic) [Параметры]        func(a, b, count, c, d);    …}
Какие параметры нужно добавить в соответствующее место в приведенном выше коде (вместо "[Параметры]"), чтобы обеспечить корректное и эффективное выполнение кода:
Какой ключ компилятора icc следует использовать для компиляции программы, исполняемой в режиме offload:
Какой ключ компилятора icc следует использовать для компиляции программы, если она должна запускаться только на сопроцессоре:
Какие из перечисленных директив компилятора предназначены для векторизации кода?
Опция компилятора Intel -guide позволяет получить:
Опция компилятора Intel -opt-report позволяет получить:
Опция компилятора Intel -vec-report позволяет получить:
Опция компилятора Intel -guide-vec позволяет получить: