Программирование на Intel Cilk Plus - ответы

Количество вопросов - 232

Являются ли цикловые зависимости препятствием к распараллеливанию цикла?

Должны ли быть определены аргументы порождённой функции в родительском коде до момента порождения потомка?

Intel® Cilk™ Plus поддерживается компиляторами Portland Group.

Каким будет действие функции __cilkrts_get_nworkers, вызов которой размещён после оператора cilk_spawn?

В каком случае уменьшение "зернистости" распараллеливания цикла приводит к улучшению производительности Cilk-программы?

Что такое reducer_list_prepend?

Какой редуктор соответствует операции логического И?

Intel® Cilk™ Plus поддерживается компиляторами Intel версий 10.0 и 11.0.

Что означает запись b[1:3:4]?

Сколько изображений переменной, описанной как гиперобъект, будет использоваться в программе, исполняющейся в 5 потоках?

Для чего предназначена функция __cilkrts_get_total_workers()?

Какое условие должно выполняться при использовании сечения массива в качестве аргумента функции?

В какой момент объединяются изображения переменных?

Допускается ли использование выражений с индексной нотацией в элементных функциях?

Как происходит распределение итераций цикла на каждом уровне рекурсии при использовании cilk_sync?

"Гонок за данными" можно избежать, используя:

Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[12:12]*b[1:12]?

Как ведёт себя редуктор, если не происходит захвата работы?

Является ли правильным следующий оператор: a[1:s] = a[0:s] + 1;?

Может ли переменная быть описана как редуктор относительно операции объединения списков?

Имеется следующий код:
cilk::reducer_opadd<int> sum(3);void f(){cilk_spawn g(); sum += 2; cilk_sync;}void g(){sum++;}             

Каким будет результат вычисления suS, если в процессе выполнения произошёл захват работы?

Каким будет результат, если задать отрицательное значение "зернистость" распараллеливания цикла?

Третий элемент в расширенной векторной нотации <1>:<2>[:<3>] это:

Принадлежит ли элемент a[15] сечению массива a[11:4:3]?

Для чего предназначена прагма grainsize?

Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 0; i != i; i += 0);?

Корректен ли оператор c[2:10:2] = a[1:10] - b[14:10:11]?

Может ли гонка за данными не влиять на результат работы программы?

Какой код генерируется при компиляции кода с вызовом элементных функций?

Допускается ли использование оператора break в цикле cilk_for?

Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?

Является ли cilk_init допустимым ключевым словом Intel® Cilk™ Plus?

Является ли cilk_for допустимым ключевым словом Intel® Cilk™ Plus?

Прагма SIMD используется в Intel® Cilk™ Plus для:

Поддерживает ли Intel® Cilk™ Plus компилятор ifort?

Что такое "точка синхронизации"?

Какой из вариантов распараллеливания допускается в Intel® Cilk™ Plus?

Для того, чтобы обозначить точку порождения в Cilk-программе, необходимо:

Для того, чтобы обозначить точку синхронизации в Cilk-программе, необходимо:

Что выполняет балансировку Cilk-программы?

Как в Linux (bash) задать количество исполнителей?

Есть два фрагмента кода: 1) cilk_spawn f(); cilk_spawn g(); cilk_sync; 2) cilk_spawn f(); g(); cilk_sync; Какой из них является предпочтительным с точки зрения стиля и эффективности?

Intel® Cilk™ Plus одновременно поддерживает векторный параллелизм и параллелизм типа fork-join.

В чём различие между Cilk™ Plus и Cilk™?

Имеется следующий фрагмент кода:
cilk_init();cilk_spawn f()…cilk_sync        

В чём состоит ошибка программиста?

Допустимо ли следующее выражение в Cilk-программе: var = cilk_spawn (object.*pointer)(args);?

Распространяется ли действие cilk_sync на все порождённые функции?

Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i, j = 42; j < 1; i++, j++)?

Допускается ли использование оператора return в цикле cilk_for?

Что определяет величина grainsize в параллельных циклах cilk_for?

Как можно задать "зернистость" распараллеливания цикла, равную единице?

Как следует изменить "зернистость" распараллеливания цикла, если его итерации равномерно малы по объёму вычислительной работы?

Гонки за данными возникают при:

Может ли влиять на наличие "гонок за данными" уровень оптимизации?

Что такое cilk::reducer?

Что такое reducer_list_append?

Что такое reducer_min_index?

Что такое reducer_opadd?

Имеется следующий код:
cilk::reducer_opadd<int> sum(3);void f(){cilk_spawn g(); sum += 2; cilk_sync;}void g(){sum++;}                

Каким будет результат вычисления suS, если в процессе выполнения не произошло захвата работы?

Редукторы можно использовать только в циклах.

Переменная называется локальной, если:

Может ли переменная быть описана как редуктор относительно операции возведения в степень?

Допустимо ли в программе на C++ использование оператора cilk::reducer_min_index<size_t, T> r;?

Имеется код
cilk::reducer_opadd<float> sum;void f( int m ) {    sum += m;}float g() {    cilk_spawn f(1);    f(2);    cilk_sync;    return xxx;}        

Что следует подставить вместо xxx?

Является ли cilk::reducer гиперобъектом?

Является ли cilk::private гиперобъектом?

Допускается ли в Intel® Cilk™ Plus определение пользовательских гиперобъектов?

Какой редуктор соответствует операции логического исключающего ИЛИ?

Почему использование расширенной индексной нотации в Intel® Cilk™ Plus при работе с массивами позволяет увеличить производительность программы?

Что означает запись b[:]?

Правильным ли является оператор присваивания c[1:5] = d[2:15]?

Правильным ли является оператор присваивания c[:] = d[:][:]?

Какое действие выполняется в следующем выражении a[:]*b[:]?

Каким будет результат вычисления следующего выражения a[:][:] + b[0][1]?

Является ли правильным следующий оператор: c[0:s] = a[b[:]];?

Какое действие выполняет функция __sec_rotate?

Какая структура данных чаще всего встречается в вычислительных приложениях?

Корректен ли оператор c[2:10:2] = a[1:10] - b[14:11:10]?

Могут ли перечисленные операции применяться к сечениям массивов: %, <,==,!=,>?

Могут ли перечисленные операции применяться к сечениям массивов: |,&,,&&?

Как выполняются операции с разными элементами в выражении a[:] * b[:]?

Имеется следующий фрагмент программы:
if(a[0:n] < b[0:n])     c[0:n] = 0;else    c[0:n] = 1;        

Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[12:12]*b[12:15]?

Элементные функции - это функции, которые:

Каким будет результат вычисления следующего выражения a[:] = pow(c, b[:]);?

Допускается ли использование прагм OpenMP в элементных функциях?

Допускается ли использование 64 битовых переменных с плавающей точкой в элементных

Допускается ли использование указателей в элементных функциях?

Что является результатом операции редукции?

Какое действие выполняет функция __sec_reduce(f, a[:])?

В каком режиме выполняется программа на Cilk, если нет свободных рабочих потоков?

Выберите 3 способа векторизации кода в Cilk-программах.

Для чего используется оператор linear в прагме #pragma simd linear(x,y) reduction(+:sum)?

Может ли пользователь явно управлять балансировкой загрузки в Cilk-программе?

Имеются ли в Intel® Cilk™ Plus собственные таймеры?

Для чего предназначена функция __cilkrts_set_param()?

Какой заголовочный файл следует использовать в случае использования в программе функций прикладного программного интерфейса Cilk?

Какое значение возвращает вызов __cilkrts_get_nworkers при выполнении Cilk-программы в последовательном режиме?

Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?

Что означает запись b[1:3][0:2]?

ЯДопускается ли использование указателей на функции в элементных функциях?

Что обозначает символ :, используемый самостоятельно (без указания длины и шага) в расширенной индексной нотации?

Допускается ли использование 32 битовых переменных с плавающей точкой в элементных функциях?

Допустима ли следующая форма распараллеливания цикла: int i; cilk_for (i = 0; i < 100; i++);?

Может ли элементная функция возвращать сечение массива?

Из каких логических частей состоит пользовательский редуктор?

Можно ли использовать сечение массива в качестве аргумента функции?

Выполняется ли в конце параллельного цикла барьерная синхронизация?

Имеется следующий код:
b[0] = 0; b[1] = 3.14159; с[3:1] = sin(b[:]);        

Каким будет результат вычисления c?

В программе для многоядерной архитектуры имеется потенциальная опасность гонок за данными. Какие средства Intel® Cilk™ Plus Вы будете использовать для того, чтобы избежать гонок за данными?

Что произойдёт при обработке программы с прагмой #pragma simd компилятором, не поддерживающим Intel® Cilk™ Plus?

Сохраняют ли гиперобъекты последовательную семантику программы?

Что такое reducer_ostream?

Имеется код
cilk::reducer_opadd<double> result(0);        cilk_for(int i=0; i<data.GetSize(); i++)            result += operation(data[i]);        return xxx;        

Что следует подставить вместо xxx?

Принадлежит ли элемент b[35] сечению массива b[9:16]?

Какая функция в Cilk-программе называется "порождающей"?

Какой редуктор используется при работе с параллельными потоками?

Что такое reducer_max_index?

Является ли cilk_send допустимым ключевым словом Intel® Cilk™ Plus?

Что такое "точка порождения"?

Являются ли переходы из тела цикла препятствием к распараллеливанию цикла?

Чему по умолчанию равно количество исполнителей в Cilk-программе?

Допускается ли использование оператора goto в цикле cilk_for?

Как задаётся "зернистость" распараллеливания цикла по умолчанию?

"Параллельные" глобальные переменные, позволяющие избежать гонок за данными в Intel® Cilk™ Plus это:

Может ли влиять на наличие "гонок за данными" размер машинного слова?

Относительно какого типа операций задаются редукторы?

При использовании редукторов каждый поток имеет доступ к единственному общему экземпляру переменной.

Возникает ли гонка за данными, если два потока выполняют чтение из общей переменной?

Какую функцию можно использовать для вычисления суммы всех элементов массива?

В Cilk-программе необходимо выполнить конкатенацию списков. Какой гиперобъект следует для этого использовать?

Какой редуктор соответствует операции конкатенации строк?

Что означает запись b[13:57]?

Что означает запись b[:][5]?

Правильным ли является оператор присваивания c[1:5] = d[1:5]?

Правильным ли является оператор присваивания c[1:5] = d[5:5]?

Какое действие выполняется в следующем выражении a[3:2][3:2] + b[5:2][5:2]?

Какое действие выполняет функция __sec_shift?

Что означает запись a[17:3:2]?

Могут ли перечисленные операции применяться к сечениям массивов: *=, /=?

Правильно ли запрограммировано умножение двух матриц в выражении a[:][:]*b[:][:]?

Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[:]*b[:]?

Правильно ли задано сечение массива: [12:10]?

Что такое "элементная функция"?

Каким будет результат вычисления следующего выражения a[:] = pow(b[:], c);?

Допускается ли использование операторов выбора в элементных функциях?

Допускается ли использование многопоточности OpenMP в элементных функциях?

Какое действие выполняет функция __sec_reduce_add(a[:])?

Должен ли программист явным образом задавать способ диспетчеризации параллельной Cilk-программы?

Для чего используется оператор reduction в прагме #pragma simd linear(x,y) reduction(+:sum)?

Какие средства Intel® Cilk™ Plus Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?

Для чего предназначена функция __cilkrts_get_worker_number()?

Можно ли изменить число исполнителей после вызова функции __cilkrts_get_nworkers?

Директива SIMD - это:

Какое действие выполняет следующий оператор: vx[i:m][j:n] += a*(U[i:m][j+1:n]-U[i:m][j:n]);?

Являются ли переходы в тело цикла препятствием к распараллеливанию цикла?

Могут ли перечисленные операции применяться к сечениям массивов: ++,--, +=, -=?

Может ли произойти возврат из функции, вызванной в одном потоке, в другом потоке?

Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?

Переменная называется глобальной, если

Что такое reducer_min?

Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?

Правильным ли является оператор присваивания c[:] = d[:]?

Как влияет на производительность большое количество редукторов?

Необходимо ли при использовании редукторов применять блокировки?

В Cilk-программе необходимо использовать циклический сдвиг элементов массива. Какую функцию можно использовать для выполнения такого сдвига?

Какие операции являются операциями редукции?

В Cilk-программе для одномерного массива значений необходимо сформировать одномерный массив синусов. Как это сделать?

Является ли cilk_spawn допустимым ключевым словом Intel® Cilk™ Plus?

Назначение переменной окружения CILK_NWORKERS:

Как выполняется Cilk-программа, если нет свободных рабочих потоков?

В программе имеются операторы cilk_spawn g() и cilk_sync. Как будет выполняться фрагмент программы между этими операторами?

Как в командной строке Windows задать количество исполнителей?

Intel® Cilk™ Plus входит в состав среды разработки Delphi.

В Cilk-программе имеется следующий код: cilk_sync; … cilk_spawn g();. В чём заключается ошибка?

Допустимо ли следующее выражение в Cilk-программе: cilk_spawn [&]{ g(f()); }();?

Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 1; i < 16; ++i) i = f();?

В чём заключается отрицательный эффект "гонок за данными"?

Что такое reducer_max?

Какой редуктор соответствует операции логического ИЛИ?

Является ли правильным следующее выражение a[0:4][1:2] + b[1:2]?

Является ли правильным следующий оператор: a[:] = c;?

Могут ли перечисленные операции применяться к сечениям массивов: +, -, *, /?

Какие операции машинного уровня генерирует компилятор для выражений вида a[b[0:s]] = c[:] и c[0:s] = a[b[:]]?

Что можно использовать в левой части оператора присваивания x = sin(b[:]);?

Допускается ли использование многопоточности Cilk в элементных функциях?

Допускается ли использование циклов for в элементных функциях?

Какие средства Intel® Cilk™ Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?

Можно ли использовать прагму #pragma simd в цикле с условным оператором (if)?

Какой заголовочный файл необходимо использовать в программе на C++, если в ней используется оператор cilk::reducer_min_index<size_t, T> r;?

Допустимо ли следующее выражение в Cilk-программе: cilk_spawn g(f());?

Что такое редуктор?

Как влияет на величину накладных расходов маленькое значение grainsize?

Является ли cilk_start допустимым ключевым словом Intel® Cilk™ Plus?

Intel® Cilk™ Plus поддерживает только параллелизм типа fork-join.

В чём различие конструкций cilk_spawn [&]{ g(f()); }(); и cilk_spawn g(f());?

В программе имеется оператор cilk_spawn g(). Как будет выполняться функция g()?

Какое действие выполняет get_value() в редукторе?

Необходимо ли при использовании редукторов применять мьютексы?

Для чего предназначена утилита cilkscreen?

Является ли правильным следующий оператор: a[b[0:s]] = c[:];?

Какое ключевое слово в Intel® Cilk™ Plus используется для распараллеливания цикла

Как влияет на величину накладных расходов большое значение grainsize?

Что такое "изображение" переменной?

Имеется код
cilk::reducer_opadd<float> sum = 0;...cilk_for( size_t i=1; i<n; ++i )     sum += f(i);... = sum.get_value();           

Что произойдёт с переменной sum после порождения новых потоков?

Допускается ли использование ассемблерных вставок в элементных функциях?

Что является аргументом операции редукции?

Идентификаторы исполнителей непрерывно заполняют определённый диапазон значений. Верно ли это утверждение?

Что будет происходить, если "зернистость" распараллеливания цикла в Cilk-программе задана следующим образом: #pragma cilk grainsize = n/(4*__cilkrts_get_nworkers())?

В каком случае в Cilk-программе используется заголовочный файл cilk_api.h?

Каким будет результат, если задать "зернистость" распараллеливания цикла равной нулю?

В каком случае при диспетчеризации задач Cilk происходит захват работы?

Intel® Cilk™ Plus поддерживает только векторный параллелизм.

Допустимо ли следующее выражение в Cilk-программе: g(cilk_spawn f());?

Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 1; i < x; ++i) x = f();?

Что такое reducer_basic_string?

Какой заголовочный файл необходимо использовать в программе на C++, если в ней используется оператор cilk::reducer_opadd<double> result(0);?

Можно ли избавиться от гонки за данными изменением алгоритма вычислений?

Второй элемент в расширенной векторной нотации <1>:<2>[:<3>] это:

Является ли правильным следующее выражение a[:][:] + b[0][1]?

Какие операции являются операциями редукции?

Допускаются ли вложенные (рекурсивные) ветвления в Intel® Cilk™ Plus?

Совпадает ли синтаксис расширенной индексной нотации Intel® Cilk™ Plus и индексной нотации Fortran 90?

Допускается ли использование 32 битовых переменных типа signed int в элементных функциях?

Имеются ли в Intel® Cilk™ Plus средства обмена сообщениями между процессами?

Intel® Cilk™ Plus является библиотекой, имеющей интерфейсы к языкам программирования Fortran. C/C++, Java?

Является ли cilk_sync допустимым ключевым словом Intel® Cilk™ Plus?

Первый элемент в расширенной векторной нотации <1>:<2>[:<3>] это:

Какие инструкции порождает компилятор при компиляции кода с использованием векторной нотации?

Поддерживает ли Intel® Cilk™ Plus компилятор icc?

Для чего предназначена функция __cilkrts_get_nworkers()?

Поддерживает ли Intel® Cilk™ Plus компилятор GCC?