2015-05-22 2 views
0

Я новичок в высокопроизводительных вычислениях (HPC), но у меня будет проект HPC, поэтому мне нужна помощь в решении некоторых фундаментальных проблем.Выбор для системы общей памяти, библиотеки MPI, оригинальной RDMA или ULP над RDMA?

Сценарий приложения прост: несколько серверов, подключенных к сети InfiniBand (IB), один сервер для Master и другие для ведомых устройств. только ведущие данные для чтения/записи в памяти (размер данных варьируется от 1 КБ до нескольких сотен МБ) в ведомых устройствах, в то время как ведомые устройства просто пассивно хранят данные в своих памяти (и сбрасывают данные в памяти на диски в нужное время). Все вычисления выполняются в Мастере, перед записью или после чтения данных в/из подчиненных. Требованием системы является низкая латентность (небольшие области данных, такие как 1KB-16KB) и высокая пропускная способность (большие области данных, несколько сотен МБ).

Итак, мои вопросы

1. Какой конкретный способ больше подходит для нас? MPI, примитивную библиотеку IB/RDMA или ULP по RDMA.

Насколько я знаю, существующий Message Passing Interface (MPI) библиотека, примитивно библиотека IB/RDMA, такие как libverbs и librdmacm и User Level Protocal (ULPs) по RDMA может быть целесообразные варианты, но я не очень уверен, их применимых областей.

2. Должен ли я выполнять некоторые настройки для ОС или сети IB для повышения производительности?

Существует документ [1] от Microsoft сообщает, что

Мы улучшили производительность вплоть до восьми раз с тщательной настройкой и изменений операционной системы и сетевого адаптер привод

Со своей стороны, я постараюсь избежать такой настройки производительности, насколько смогу. Однако, если настройка неизбежна, я постараюсь изо всех сил. Сеть IB нашей среды - Mellanox InfiniBand QDR 40Gb/s, и я могу свободно выбирать ОС Linux для серверов.

Если у вас есть идеи, комментарии и ответы приветствуются! Спасибо заранее!

[1] FaRM: Fast Remote Memory

+0

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

+0

@HristoIliev Спасибо за ваш комментарий. Я хотел бы уточнить свои вопросы: во-первых, что является простым методом для удовлетворения требований моего приложения? Во-вторых, как я могу избежать работы по настройке, выбирая зрелую библиотеку, которая просто соответствует моим требованиям (так же, как быстрый удаленный «memcpy»). – foool

ответ

0

Если вы используете MPI, вы будете иметь преимущество в межсоединениях независимого решения. Не похоже, что это будет то, что вы собираетесь держать в течение 20 лет, но программное обеспечение длится дольше, чем вы когда-либо думали.

Использование MPI также дает вам возможность отлаживать ваш (overusbcribed, возможно) ноутбук или рабочую станцию, прежде чем выкатывать его на машины с бесконечным диапазоном.

Что касается вашего второго вопроса о настройке сети, я уверен, что нет конца настройки, которую вы можете сделать, но пока у вас не будет реальных рабочих нагрузок и жестких номеров, вы тратите свое время. Сначала начните работать, а затем волнуйтесь о оптимизации сети. Возможно, вам нужно настроить множество крошечных пакетов. Возможно, вам нужно беспокоиться о нескольких крупных передачах. Настройка будет довольно различной в зависимости от случая.

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