У меня есть числовое интенсивное приложение и после поиска GFLOPS в Интернете я решил сделать свой собственный маленький тест. Я делал одно умножение матрицы нитей тысячи раз, чтобы получить вторую секунду выполнения. Это внутренней loop.fullСколько циклов для умножения float в C#
for (int i = 0; i < SIZEA; i++)
for (int j = 0; j < SIZEB; j++)
vector_out[i] = vector_out[i] + vector[j] * matrix[i, j];
Это было лет с тех пор я имел дело с FLOPS, поэтому я ожидал, чтобы получить что-то около 3 до 6 циклов в FLOP. Но я получаю 30 (100 MFLOPS), конечно, если я распараллеливаю это, я получу больше, но я этого не ожидал. Это может быть проблемой с dot NET. или это действительно производительность процессора?
Вот fiddle с полным эталонным кодом.
EDIT: Visual Studio даже в режиме деблокирования занимает больше времени для запуска, а сам исполняемый файл работает 12 циклов на FLOP (250 MFLOPS). Все еще есть какой-либо эффект ВМ?
Учитывая, что C# компилируется в IL, который в конечном итоге будет преобразован в x86, x64 или различные архитектуры ARM (для названия, но 3), на этот вопрос не будет никакого единого ответа. Если производительность имеет решающее значение, C# не является подходящим инструментом для (этой части) задания. –
@ Комментарий Damien_The_Unbeliever правильный (и должен быть ответ IMO). Это будет зависеть от целевой архитектуры. –
@Damien и mura, вот в чем вопрос, сколько стоит архитектура и сколько это может быть точка net. В таком простом коде может случиться, что мы работаем с той же скоростью, что и железо. –