Мне нужен самый быстрый способ умножить и разделить большие массивы данных.
Я читал это (написал Бен Фойгт здесь):
.NET не использует MMX или SSE или AVX, начиная с текущей версии
(...)
современные компиляторы С++ не только позволяют использовать SIMD, но и могут автоматически прорисовывать обычный код в инструкции SIMD
.
Думаю, мне нужно:
-
Поддержка SSE с векторными операциями (для одновременного умножения 4 поплавков)
-
поддержка многопоточности (решение/библиотека, которая каким-то образом не столкнется с потоком С#)
Есть ли библиотека /dll, которую я могу использовать?
Изменить: любые альтернативы для Octave? Я занимаюсь только двумя операциями: разделите, умножьте. Если я правильно понял, что такое Octave и как он работает, мне нужно будет разобрать вывод... Он не может быть быстрым...
В соответствии с "что вы пробовали" и "почему вы не хотите использовать простой for
":
Мне нужно это для обучения нейронной сети. Сеть (сейчас) имеет более 50 входов, многие нейроны (каждый 50+ весов). Данные обучения содержат более 100 000 строк, по 50 полей. Каждому входу нейрона требуется несколько (не менее 5) операций умножения.
Я понятия не имею, сколько учебных тем мне нужно, но я попытался сравнить только операции умножения, и я получил результат: около 16 секунд в эпоху на моем процессоре Intel Core Duo T2500 2.0 ГГц.
Конечно, я могу купить более быстрый компьютер, но новый компьютер стоит больше нескольких часов работы, поэтому я надеюсь, что он выглядит логичным...