Главная /
Программирование на Intel Cilk Plus
Программирование на Intel Cilk Plus - ответы на тесты Интуит
Курс представляет собой краткое введение в основы программирования на Intel® CilkTM Plus.
Список вопросов:
- # Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
- # Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
- # Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
- # Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
- # Является ли cilk_init допустимым ключевым словом Intel® Cilk™ Plus?
- # Является ли cilk_start допустимым ключевым словом Intel® Cilk™ Plus?
- # Является ли cilk_send допустимым ключевым словом Intel® Cilk™ Plus?
- # Является ли cilk_for допустимым ключевым словом Intel® Cilk™ Plus?
- # Является ли cilk_sync допустимым ключевым словом Intel® Cilk™ Plus?
- # Является ли cilk_spawn допустимым ключевым словом Intel® Cilk™ Plus?
- # Прагма SIMD используется в Intel® Cilk™ Plus для:
- # Поддерживает ли Intel® Cilk™ Plus компилятор GCC?
- # Поддерживает ли Intel® Cilk™ Plus компилятор ifort?
- # Поддерживает ли Intel® Cilk™ Plus компилятор icc?
- # Назначение переменной окружения CILK_NWORKERS:
- # Что такое "точка порождения"?
- # Что такое "точка синхронизации"?
- # Какое ключевое слово в Intel® Cilk™ Plus используется для распараллеливания цикла
- # Выполняется ли в конце параллельного цикла барьерная синхронизация?
- # Являются ли цикловые зависимости препятствием к распараллеливанию цикла?
- # Являются ли переходы из тела цикла препятствием к распараллеливанию цикла?
- # Являются ли переходы в тело цикла препятствием к распараллеливанию цикла?
- # Для чего предназначена прагма grainsize?
- # Какой из вариантов распараллеливания допускается в Intel® Cilk™ Plus?
- # В каком случае при диспетчеризации задач Cilk происходит захват работы?
- # Как выполняется Cilk-программа, если нет свободных рабочих потоков?
- # Для того, чтобы обозначить точку порождения в Cilk-программе, необходимо:
- # Для того, чтобы обозначить точку синхронизации в Cilk-программе, необходимо:
- # В программе имеется оператор cilk_spawn g(). Как будет выполняться функция g()?
- # В программе имеются операторы cilk_spawn g() и cilk_sync. Как будет выполняться фрагмент программы между этими операторами?
- # Какая функция в Cilk-программе называется "порождающей"?
- # Что выполняет балансировку Cilk-программы?
- # Может ли произойти возврат из функции, вызванной в одном потоке, в другом потоке?
- # Допускаются ли вложенные (рекурсивные) ветвления в Intel® Cilk™ Plus?
- # Как в Linux (bash) задать количество исполнителей?
- # Как в командной строке Windows задать количество исполнителей?
- # Есть два фрагмента кода: 1) cilk_spawn f(); cilk_spawn g(); cilk_sync; 2) cilk_spawn f(); g(); cilk_sync; Какой из них является предпочтительным с точки зрения стиля и эффективности?
- # Intel® Cilk™ Plus является библиотекой, имеющей интерфейсы к языкам программирования Fortran. C/C++, Java?
- # Intel® Cilk™ Plus поддерживается компиляторами Portland Group.
- # Intel® Cilk™ Plus входит в состав среды разработки Delphi.
- # Intel® Cilk™ Plus поддерживается компиляторами Intel версий 10.0 и 11.0.
- # Intel® Cilk™ Plus поддерживает только параллелизм типа fork-join.
- # Intel® Cilk™ Plus поддерживает только векторный параллелизм.
- # Intel® Cilk™ Plus одновременно поддерживает векторный параллелизм и параллелизм типа fork-join.
- # Что произойдёт при обработке программы с прагмой #pragma simd компилятором, не поддерживающим Intel® Cilk™ Plus?
- # В чём различие между Cilk™ Plus и Cilk™?
- # Должны ли быть определены аргументы порождённой функции в родительском коде до момента порождения потомка?
- # В Cilk-программе имеется следующий код: cilk_sync; … cilk_spawn g();. В чём заключается ошибка?
- # Имеется следующий фрагмент кода: cilk_init(); cilk_spawn f() … cilk_sync В чём состоит ошибка программиста?
- # Чему по умолчанию равно количество исполнителей в Cilk-программе?
- # Допустимо ли следующее выражение в Cilk-программе: g(cilk_spawn f());?
- # Допустимо ли следующее выражение в Cilk-программе: var = cilk_spawn (object.*pointer)(args);?
- # Допустимо ли следующее выражение в Cilk-программе: cilk_spawn [&]{ g(f()); }();?
- # Допустимо ли следующее выражение в Cilk-программе: cilk_spawn g(f());?
- # В чём различие конструкций cilk_spawn [&]{ g(f()); }(); и cilk_spawn g(f());?
- # Распространяется ли действие cilk_sync на все порождённые функции?
- # Как происходит распределение итераций цикла на каждом уровне рекурсии при использовании cilk_sync?
- # Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i, j = 42; j < 1; i++, j++)?
- # Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 1; i < 16; ++i) i = f();?
- # Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 1; i < x; ++i) x = f();?
- # Допустима ли следующая форма распараллеливания цикла: int i; cilk_for (i = 0; i < 100; i++);?
- # Допускается ли использование оператора break в цикле cilk_for?
- # Допускается ли использование оператора return в цикле cilk_for?
- # Допускается ли использование оператора goto в цикле cilk_for?
- # Допустима ли следующая форма распараллеливания цикла: cilk_for (unsigned int i = 0; i != i; i += 0);?
- # Что определяет величина grainsize в параллельных циклах cilk_for?
- # Как влияет на величину накладных расходов большое значение grainsize?
- # Как влияет на величину накладных расходов маленькое значение grainsize?
- # Как можно задать "зернистость" распараллеливания цикла, равную единице?
- # Как задаётся "зернистость" распараллеливания цикла по умолчанию?
- # Каким будет результат, если задать "зернистость" распараллеливания цикла равной нулю?
- # Каким будет результат, если задать отрицательное значение "зернистость" распараллеливания цикла?
- # Что будет происходить, если "зернистость" распараллеливания цикла в Cilk-программе задана следующим образом: #pragma cilk grainsize = n/(4*__cilkrts_get_nworkers())?
- # В каком случае уменьшение "зернистости" распараллеливания цикла приводит к улучшению производительности Cilk-программы?
- # Как следует изменить "зернистость" распараллеливания цикла, если его итерации равномерно малы по объёму вычислительной работы?
- # Что такое редуктор?
- # "Параллельные" глобальные переменные, позволяющие избежать гонок за данными в Intel® Cilk™ Plus это:
- # Гонки за данными возникают при:
- # В чём заключается отрицательный эффект "гонок за данными"?
- # "Гонок за данными" можно избежать, используя:
- # Может ли влиять на наличие "гонок за данными" размер машинного слова?
- # Может ли влиять на наличие "гонок за данными" уровень оптимизации?
- # Относительно какого типа операций задаются редукторы?
- # Что такое "изображение" переменной?
- # В какой момент объединяются изображения переменных?
- # Для чего предназначена утилита cilkscreen?
- # Что такое cilk::reducer?
- # Что такое reducer_list_append?
- # Что такое reducer_list_prepend?
- # Что такое reducer_max?
- # Что такое reducer_max_index?
- # Что такое reducer_min?
- # Что такое reducer_min_index?
- # Что такое reducer_opadd?
- # Что такое reducer_ostream?
- # Что такое reducer_basic_string?
- # Сохраняют ли гиперобъекты последовательную семантику программы?
- # Имеется следующий код: cilk::reducer_opadd<int> sum(3); void f() {cilk_spawn g(); sum += 2; cilk_sync;} void g() {sum++;} Каким будет результат вычисления suS, если в процессе выполнения не произошло захвата работы?
- # Имеется следующий код: cilk::reducer_opadd<int> sum(3); void f() {cilk_spawn g(); sum += 2; cilk_sync;} void g() {sum++;} Каким будет результат вычисления suS, если в процессе выполнения произошёл захват работы?
- # Редукторы можно использовать только в циклах.
- # При использовании редукторов каждый поток имеет доступ к единственному общему экземпляру переменной.
- # Имеется код cilk::reducer_opadd<float> sum = 0; ... cilk_for( size_t i=1; i<n; ++i ) sum += f(i); ... = sum.get_value(); Что произойдёт с переменной sum после порождения новых потоков?
- # Переменная называется локальной, если:
- # Переменная называется глобальной, если
- # Возникает ли гонка за данными, если два потока выполняют чтение из общей переменной?
- # Необходимо ли при использовании редукторов применять мьютексы?
- # Может ли переменная быть описана как редуктор относительно операции объединения списков?
- # Может ли переменная быть описана как редуктор относительно операции возведения в степень?
- # Допустимо ли в программе на C++ использование оператора cilk::reducer_min_index<size_t, T> r;?
- # Какой заголовочный файл необходимо использовать в программе на C++, если в ней используется оператор cilk::reducer_min_index<size_t, T> r;?
- # Сколько изображений переменной, описанной как гиперобъект, будет использоваться в программе, исполняющейся в 5 потоках?
- # Какой заголовочный файл необходимо использовать в программе на C++, если в ней используется оператор cilk::reducer_opadd<double> result(0);?
- # Имеется код cilk::reducer_opadd<double> result(0); cilk_for(int i=0; i<data.GetSize(); i++) result += operation(data[i]); return xxx; Что следует подставить вместо xxx?
- # Имеется код 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 Вы будете использовать для того, чтобы избежать гонок за данными?
- # Какую функцию можно использовать для вычисления суммы всех элементов массива?
- # Является ли cilk::reducer гиперобъектом?
- # Является ли cilk::private гиперобъектом?
- # В Cilk-программе необходимо выполнить конкатенацию списков. Какой гиперобъект следует для этого использовать?
- # Необходимо ли при использовании редукторов применять блокировки?
- # Можно ли избавиться от гонки за данными изменением алгоритма вычислений?
- # Может ли гонка за данными не влиять на результат работы программы?
- # Допускается ли в Intel® Cilk™ Plus определение пользовательских гиперобъектов?
- # Какое действие выполняет get_value() в редукторе?
- # Из каких логических частей состоит пользовательский редуктор?
- # Как ведёт себя редуктор, если не происходит захвата работы?
- # Как влияет на производительность большое количество редукторов?
- # Какой редуктор соответствует операции логического ИЛИ?
- # Какой редуктор соответствует операции логического И?
- # Какой редуктор соответствует операции логического исключающего ИЛИ?
- # Какой редуктор соответствует операции конкатенации строк?
- # Какой редуктор используется при работе с параллельными потоками?
- # Почему использование расширенной индексной нотации в Intel® Cilk™ Plus при работе с массивами позволяет увеличить производительность программы?
- # Второй элемент в расширенной векторной нотации <1>:<2>[:<3>] это:
- # Первый элемент в расширенной векторной нотации <1>:<2>[:<3>] это:
- # Третий элемент в расширенной векторной нотации <1>:<2>[:<3>] это:
- # Что обозначает символ :, используемый самостоятельно (без указания длины и шага) в расширенной индексной нотации?
- # Что означает запись b[13:57]?
- # Что означает запись b[:]?
- # Что означает запись b[:][5]?
- # Что означает запись b[1:3:4]?
- # Что означает запись b[1:3][0:2]?
- # Правильным ли является оператор присваивания c[1:5] = d[1:5]?
- # Правильным ли является оператор присваивания c[1:5] = d[2:15]?
- # Правильным ли является оператор присваивания c[1:5] = d[5:5]?
- # Правильным ли является оператор присваивания c[:] = d[:]?
- # Правильным ли является оператор присваивания c[:] = d[:][:]?
- # Какое действие выполняется в следующем выражении a[:]*b[:]?
- # Какое действие выполняется в следующем выражении a[3:2][3:2] + b[5:2][5:2]?
- # Является ли правильным следующее выражение a[0:4][1:2] + b[1:2]?
- # Является ли правильным следующее выражение a[:][:] + b[0][1]?
- # Каким будет результат вычисления следующего выражения a[:][:] + b[0][1]?
- # Является ли правильным следующий оператор: a[:] = c;?
- # Является ли правильным следующий оператор: a[1:s] = a[0:s] + 1;?
- # Является ли правильным следующий оператор: a[b[0:s]] = c[:];?
- # Является ли правильным следующий оператор: c[0:s] = a[b[:]];?
- # Какое действие выполняет функция __sec_shift?
- # Какое действие выполняет функция __sec_rotate?
- # Какие инструкции порождает компилятор при компиляции кода с использованием векторной нотации?
- # Какая структура данных чаще всего встречается в вычислительных приложениях?
- # Что означает запись a[17:3:2]?
- # Принадлежит ли элемент a[15] сечению массива a[11:4:3]?
- # Принадлежит ли элемент b[35] сечению массива b[9:16]?
- # Корректен ли оператор c[2:10:2] = a[1:10] - b[14:10:11]?
- # Корректен ли оператор c[2:10:2] = a[1:10] - b[14:11:10]?
- # Совпадает ли синтаксис расширенной индексной нотации Intel® Cilk™ Plus и индексной нотации Fortran 90?
- # Могут ли перечисленные операции применяться к сечениям массивов: +, -, *, /?
- # Могут ли перечисленные операции применяться к сечениям массивов: %, <,==,!=,>?
- # Могут ли перечисленные операции применяться к сечениям массивов: |,&,,&&?
- # Могут ли перечисленные операции применяться к сечениям массивов: ++,--, +=, -=?
- # Могут ли перечисленные операции применяться к сечениям массивов: *=, /=?
- # Как выполняются операции с разными элементами в выражении a[:] * b[:]?
- # Правильно ли запрограммировано умножение двух матриц в выражении a[:][:]*b[:][:]?
- # Какие операции машинного уровня генерирует компилятор для выражений вида a[b[0:s]] = c[:] и c[0:s] = a[b[:]]?
- # В Cilk-программе необходимо использовать циклический сдвиг элементов массива. Какую функцию можно использовать для выполнения такого сдвига?
- # Можно ли использовать сечение массива в качестве аргумента функции?
- # Какое условие должно выполняться при использовании сечения массива в качестве аргумента функции?
- # Какое действие выполняет следующий оператор: vx[i:m][j:n] += a*(U[i:m][j+1:n]-U[i:m][j:n]);?
- # Имеется следующий фрагмент программы: if(a[0:n] < b[0:n]) c[0:n] = 0; else c[0:n] = 1;
- # Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[:]*b[:]?
- # Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[12:12]*b[1:12]?
- # Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении a[12:12]*b[12:15]?
- # Правильно ли задано сечение массива: [12:10]?
- # Элементные функции - это функции, которые:
- # Директива SIMD - это:
- # Что такое "элементная функция"?
- # Что можно использовать в левой части оператора присваивания x = sin(b[:]);?
- # Каким будет результат вычисления следующего выражения a[:] = pow(b[:], c);?
- # Каким будет результат вычисления следующего выражения a[:] = pow(c, b[:]);?
- # Какой код генерируется при компиляции кода с вызовом элементных функций?
- # Допускается ли использование операторов выбора в элементных функциях?
- # Допускается ли использование ассемблерных вставок в элементных функциях?
- # Допускается ли использование прагм OpenMP в элементных функциях?
- # Допускается ли использование многопоточности OpenMP в элементных функциях?
- # Допускается ли использование многопоточности Cilk в элементных функциях?
- # Допускается ли использование циклов for в элементных функциях?
- # Допускается ли использование выражений с индексной нотацией в элементных функциях?
- # Допускается ли использование 64 битовых переменных с плавающей точкой в элементных
- # Допускается ли использование 32 битовых переменных с плавающей точкой в элементных функциях?
- # Допускается ли использование указателей в элементных функциях?
- # Допускается ли использование 32 битовых переменных типа signed int в элементных функциях?
- # ЯДопускается ли использование указателей на функции в элементных функциях?
- # Что является результатом операции редукции?
- # Что является аргументом операции редукции?
- # Какое действие выполняет функция __sec_reduce_add(a[:])?
- # Какое действие выполняет функция __sec_reduce(f, a[:])?
- # Какие операции являются операциями редукции?
- # Какие операции являются операциями редукции?
- # Должен ли программист явным образом задавать способ диспетчеризации параллельной Cilk-программы?
- # В каком режиме выполняется программа на Cilk, если нет свободных рабочих потоков?
- # Может ли элементная функция возвращать сечение массива?
- # Имеется следующий код: b[0] = 0; b[1] = 3.14159; с[3:1] = sin(b[:]); Каким будет результат вычисления c?
- # Выберите 3 способа векторизации кода в Cilk-программах.
- # Для чего используется оператор linear в прагме #pragma simd linear(x,y) reduction(+:sum)?
- # Для чего используется оператор reduction в прагме #pragma simd linear(x,y) reduction(+:sum)?
- # Можно ли использовать прагму #pragma simd в цикле с условным оператором (if)?
- # Может ли пользователь явно управлять балансировкой загрузки в Cilk-программе?
- # Какие средства Intel® Cilk™ Plus Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?
- # Какие средства Intel® Cilk™ Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?
- # Имеются ли в Intel® Cilk™ Plus собственные таймеры?
- # Имеются ли в Intel® Cilk™ Plus средства обмена сообщениями между процессами?
- # В Cilk-программе для одномерного массива значений необходимо сформировать одномерный массив синусов. Как это сделать?
- # Для чего предназначена функция __cilkrts_get_worker_number()?
- # Для чего предназначена функция __cilkrts_get_nworkers()?
- # Для чего предназначена функция __cilkrts_set_param()?
- # Для чего предназначена функция __cilkrts_get_total_workers()?
- # В каком случае в Cilk-программе используется заголовочный файл cilk_api.h?
- # Какой заголовочный файл следует использовать в случае использования в программе функций прикладного программного интерфейса Cilk?
- # Какое значение возвращает вызов __cilkrts_get_nworkers при выполнении Cilk-программы в последовательном режиме?
- # Идентификаторы исполнителей непрерывно заполняют определённый диапазон значений. Верно ли это утверждение?
- # Можно ли изменить число исполнителей после вызова функции __cilkrts_get_nworkers?
- # Каким будет действие функции __cilkrts_get_nworkers, вызов которой размещён после оператора cilk_spawn?