Программирование на Intel Cilk Plus - ответы
Количество вопросов - 232
Должны ли быть определены аргументы порождённой функции в родительском коде до момента порождения потомка?
Каким будет действие функции __cilkrts_get_nworkers, вызов которой размещён после оператора cilk_spawn?
В каком случае уменьшение "зернистости" распараллеливания цикла приводит к улучшению производительности Cilk-программы?
Сколько изображений переменной, описанной как гиперобъект, будет использоваться в программе, исполняющейся в 5 потоках?
Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[12:12]*b[1:12]?
Имеется следующий код: cilk::reducer_opadd<int> sum(3);void f(){cilk_spawn g(); sum += 2; cilk_sync;}void g(){sum++;}
Каким будет результат вычисления suS, если в процессе выполнения произошёл захват работы?
Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 0; i != i; i += 0);?
Есть два фрагмента кода: 1) cilk_spawn f(); cilk_spawn g(); cilk_sync; 2) cilk_spawn f(); g(); cilk_sync; Какой из них является предпочтительным с точки зрения стиля и эффективности?
Имеется следующий фрагмент кода: cilk_init();cilk_spawn f()…cilk_sync
В чём состоит ошибка программиста?
Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i, j = 42; j < 1; i++, j++)?
Как следует изменить "зернистость" распараллеливания цикла, если его итерации равномерно малы по объёму вычислительной работы?
Имеется следующий код: cilk::reducer_opadd<int> sum(3);void f(){cilk_spawn g(); sum += 2; cilk_sync;}void g(){sum++;}
Каким будет результат вычисления suS, если в процессе выполнения не произошло захвата работы?
Имеется код cilk::reducer_opadd<float> sum;void f( int m ) { sum += m;}float g() { cilk_spawn f(1); f(2); cilk_sync; return xxx;}
Что следует подставить вместо xxx?
Почему использование расширенной индексной нотации в Intel® Cilk™ Plus при работе с массивами позволяет увеличить производительность программы?
Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[12:12]*b[12:15]?
Какой заголовочный файл следует использовать в случае использования в программе функций прикладного программного интерфейса Cilk?
Какое значение возвращает вызов __cilkrts_get_nworkers при выполнении Cilk-программы в последовательном режиме?
Что обозначает символ :, используемый самостоятельно (без указания длины и шага) в расширенной индексной нотации?
Имеется следующий код: b[0] = 0; b[1] = 3.14159; с[3:1] = sin(b[:]);
Каким будет результат вычисления c?
В программе для многоядерной архитектуры имеется потенциальная опасность гонок за данными. Какие средства Intel® Cilk™ Plus Вы будете использовать для того, чтобы избежать гонок за данными?
Что произойдёт при обработке программы с прагмой #pragma simd компилятором, не поддерживающим Intel® Cilk™ Plus?
Имеется код cilk::reducer_opadd<double> result(0); cilk_for(int i=0; i<data.GetSize(); i++) result += operation(data[i]); return xxx;
Что следует подставить вместо xxx?
"Параллельные" глобальные переменные, позволяющие избежать гонок за данными в Intel® Cilk™ Plus это:
При использовании редукторов каждый поток имеет доступ к единственному общему экземпляру переменной.
В Cilk-программе необходимо выполнить конкатенацию списков. Какой гиперобъект следует для этого использовать?
Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[:]*b[:]?
Какие средства Intel® Cilk™ Plus Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?
В Cilk-программе необходимо использовать циклический сдвиг элементов массива. Какую функцию можно использовать для выполнения такого сдвига?
В Cilk-программе для одномерного массива значений необходимо сформировать одномерный массив синусов. Как это сделать?
В программе имеются операторы cilk_spawn g() и cilk_sync. Как будет выполняться фрагмент программы между этими операторами?
Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 1; i < 16; ++i) i = f();?
Какие операции машинного уровня генерирует компилятор для выражений вида a[b[0:s]] = c[:] и c[0:s] = a[b[:]]?
Какие средства Intel® Cilk™ Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?
Какой заголовочный файл необходимо использовать в программе на C++, если в ней используется оператор cilk::reducer_min_index<size_t, T> r;?
Имеется код cilk::reducer_opadd<float> sum = 0;...cilk_for( size_t i=1; i<n; ++i ) sum += f(i);... = sum.get_value();
Что произойдёт с переменной sum после порождения новых потоков?