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

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

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

__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);    …}
Какие параметры нужно добавить в соответствующее место в приведенном выше коде (вместо "[Параметры]"), чтобы обеспечить корректное и эффективное выполнение кода:

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

Варианты ответа
inout(a, b)
nocopy(a, b)
in(a) out(b)(Верный ответ)
in(a) inout(b)
Похожие вопросы
Следующую функцию
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). Нужно ли модифицировать код?
Следующую функцию
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 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;  }}
Пусть разработан код представленный ниже:
int r = 0;int main(){  #pragma offload target(mic:0)  {    setR();   }  printf("%d", r);}...setR(){  r = 1;}
Что будет выведено на экран?
Пусть разработан код представленный ниже:
  #pragma offload target(mic:0)   {  F1(p1, p2);  }  F2();
В каком порядке будут исполняться функции F1 и F2?
Пусть разработан код представленный ниже:
  F1();  #pragma offload target(mic:0) wait(s1)  {  F2(p1, p2);  }
В каком порядке будут исполняться функции F1 и F2?
Пусть разработан код представленный ниже:
  #pragma offload target(mic:0)  signal(s1)  {  F1(p1, p2);  }  F2();
В каком порядке будут исполняться функции F1 и F2?
Пусть разработан код представленный ниже:
  #pragma offload target(mic:0) wait (s1)  {  F1(p1, p2);  }  F2();
В каком порядке будут исполняться функции F1 и F2?
Пусть разработан код представленный ниже:
  F1();  #pragma offload target(mic:0)  signal(s1)  {  F2(p1, p2);  }
В каком порядке будут исполняться функции F1 и F2?
Директива #pragma offload target(mic) обеспечивает: