У меня есть приложение C (VStudio 2010, win7 64bit), работающее на машине с двумя чипами xeon, что означает 12 физических и 24 логических ядра и 192 гигабайта оперативной памяти. РЕДАКТИРОВАТЬ: ОС - win7 (т.е. Windows 7, 64-разрядная версия).
Приложение имеет 24 потока (каждый поток имеет собственное логическое ядро), выполняющих вычисления и заполняющих различные части массивной структуры C. Структура, когда все потоки завершены (и все потоки идеально сбалансированы, поэтому они завершаются одновременно), составляет около 60 гигабайт.
(У меня есть контроль над настройкой оборудования, поэтому я собираюсь использовать 6 дисков по 2 ТБ с RAID 0, что означает, что физические ограничения на запись будут примерно в 6 раз выше средней скорости последовательной записи, или около 2 гигабайт в секунду.)
Каков наиболее эффективный способ получить это на диск? Очевидно, что время ввода-вывода превысит время вычислений. Из моих исследований по этой теме кажется, что write() (в отличие от fwrite()) — это правильный путь. Но какие еще оптимизации я могу сделать на стороне программного обеспечения, с точки зрения настройки размеров буфера и т. д. Может ли mmap быть более эффективным?
mmap
. Это доступно для вашей системы? - person Jens Gustedt   schedule 09.12.2011