Производительность .NET на процессоре AMD

#.net #parallel-processing #amd-processor

#.net #параллельная обработка #amd-процессор

Вопрос:

Мы пишем приложение для обработки данных в .NET 4 и недавно пытались развернуть наше приложение на процессоре AMD 6174 (12-ядерный). Исторически мы использовали Intel, и все было в порядке. Приложение очень параллельное, и мы получаем многопоточный прирост производительности на Intel. Однако на AMD действительно нет линейного прироста производительности, как можно было бы ожидать. Я подозреваю проблему, поскольку загрузка процессора не максимальна. Это пахнет как конфликт, но я не знаю, где искать, поскольку это очень специфичная для платформы проблема. Идеи, с чего начать?

Комментарии:

1. Нам понадобится намного больше деталей, чтобы хотя бы начать догадываться о причине этого.

2. Итак, вы оптимизировали свой код раньше для 4 или 8-ядерного процессора. Теперь у вас есть 12, и вы обнаруживаете, что не используете их все? Это нормально.

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

4. Я должен также отметить, что добавление нескольких потоков приводит к переполнению других потоков. НАПРИМЕР, если с одним потоком приложение выполняется на 100%, то с двумя потоками первый поток выполняется на 70%.

5. Мэтт, ты понял это?

Ответ №1:

Я предполагаю, что он поддерживает OpenCL ™, поэтому вы можете найти AMD APP Profiler интересным.

Комментарии:

1. Технология не является эксклюзивной для графических процессоров, но использует их преимущества, если они доступны. Речь идет о параллелизме. Здесь гораздо лучше объясняется: AMD APP SDK

Ответ №2:

Производительность системы зависит от многих компонентов (процессор, размер кэша L1, L2, L3, скорость системной шины, скорость памяти). В вашем случае память может быть бутылочным горлышком.

Ответ №3:

«Однако на AMD действительно нет линейного прироста производительности, как можно было бы ожидать». На основе чего? Я бы предположил, что у вас есть ряд тестов, которые вы могли бы выполнить, чтобы измерить время завершения задачи для вычислительной задачи, верно? И поскольку вы развернуты на блоке Intel, вы должны иметь возможность установить ограничение потока в соответствии с одинаковым количеством процессоров (AMD -> intel), и если ваши цифры примерно одинаковы, по крайней мере, вы можете начать формулировать план тестирования для добавления / тестирования добавления большего количества ядер.