2015-12-24 3 views
1

Я запускаю пользовательский процессор на наборе строк, который, похоже, не работает параллельно. Основной текстовый файл размером ~ 1 ГБ сначала считывается в таблицу, которая разделяется с помощью циклического цикла. «Извлечение» выполняется на 200 вершин, но затем (в разделе «Агрегат») обработка [, которая выполняет различные сложные вычисления] происходит только на 2 вершинах, хотя параметр параллелизма намного выше. Есть ли специальный намек, который нужно использовать, чтобы диктовать компилятору использовать больше вершин? Есть ли функция или свойство, которые необходимо переопределить, чтобы установить параллельность на этом этапе?Управление распараллеливанием

ответ

1

Извините за поздний ответ. Но это время отпуска :).

Хорошо видеть, что фаза экстракции полностью расширена.

Без просмотра сценария или сгенерированного плана немного сложно сказать, почему в некоторых местах вы видите только две вершины. Существует несколько причин, почему это может быть так:

  1. У вас недостаточно данных для увеличения масштаба.
  2. вашей агрегированности требуется больше данных, и, следовательно, план имеет меньший параллелизм.
  3. Ваша операция по своей сути менее параллельна.
  4. Оценка мощности данных оптимизатора выключена и выбирает недостаточно параллелизма. У нас есть определенная способность намекать, но я скорее вижу работу.

Обратите внимание, что пользовательские процессоры часто блокируют оптимизатор от нажатия оптимизаций в скрипте (например, с помощью опции READ ONLY) и могут отбрасывать оценки мощности.

Если вы пришлете мне сценарий, график работы и ссылку на задание на mrys в Microsoft, я и команда рассмотрят его на следующей неделе после окончания праздников.

+0

Я заметил, что оставил этот вопрос без ответа, поэтому позвольте мне закрыть цикл, чтобы обновить сообщество по разрешению. Поскольку у компилятора нет видимости того, что делает пользовательский процессор, его труднее распараллелить, и это должно быть вашим последним средством. Я приложил к тому, что пользовательский процессор делал с встроенными инструкциями u-sql C#, насколько я могу, и увидел заметную разницу. Спасибо, Майкл! – chi

+0

Замечательно! И если вы можете избежать выполнения пользовательских процессоров, переместив код в UDF, вы обычно получаете лучшую производительность и масштабируемость. –

Смежные вопросы