Текущий архив: 2007.09.23;
Скачать: CL | DM;
Внизо скорости чтения usb Найти похожие ветки
← →
vasilii (2007-07-10 18:20) [0]у меня есть usb-устройство, которое программа, написанная на delphi7 читает 2 раза быстрее, чем программа, написанная на C(MSVC2003) и делающая всё то же самое. мне только ясно - что время теряется при вызове драйвера usb (jangle или libusb). не подскажет ли кто-нибудь - в чём здесь может быть дело.
заранее благодарен.
← →
Сергей М. © (2007-07-11 08:12) [1]
> в чём здесь может быть дело
Не исключено, что дело в кривых руках VC-программиста
← →
vasilii (2007-07-11 10:03) [2]есть идеи поумнее?
← →
Сергей М. © (2007-07-11 10:06) [3]Надо понимать, ты тот самый VC-программер, коль так реагируешь ?)
← →
vasilii (2007-07-11 10:17) [4]в общем - да. но это не только моё творчество, а коллективное.
← →
Anatoly Podgoretsky © (2007-07-11 10:18) [5]Коллективные руки
← →
Rouse_ © (2007-07-11 10:20) [6]Еще проблемма может быть в обьектниках от разработчика драйвера линкуемых к твоему проекту. Они различны для языков.
← →
vasilii (2007-07-11 10:21) [7]Удалено модератором
← →
REA (2007-07-11 10:27) [8]Подробности в студию.
А профайлером погонять пробовали?
← →
Сергей М. © (2007-07-11 10:28) [9]Удалено модератором
← →
Rouse_ © (2007-07-11 10:39) [10]Еще название девайса укажи...
← →
vasilii (2007-07-11 12:16) [11]девайс - usb-hub нашего изготовления.
профайлером не гоняли.
да там и гонять нечего - программа-то из несколоьких строк:
//sizeof(m_cb)==6
m_cb.cmd = (USHORT) CMD_BULK_READ_START; //команда: на старт
m_cb.adr = 0;
m_cb.data = 0;
retcode = usb_bulkwrite(EP_OUT, sizeof(m_cb), &m_cb); //EP_OUT==endpoint для команд
DWORD ticks = ::GetTickCount();
for( ULONG sc=0; sc < ulSectorCount; ++sc)
{
retcode = usb_bulkread(EP_IN_BULK_HDD, SECTOR_SIZE, pChar);
if (retcode != SECTOR_SIZE)
{
//FAILED
break;
}
}
ticks = GetTickCount()-ticks;
printf("\nticks: %d SectorCount:%d\nspeed: %f Mb/sec", ticks, ulSectorCount, double(ulSectorCount*SECTOR_SIZE)/double(ticks)/1000);
причем точно такая же на Delphi7 даёт скорость ровно в 2 раза выше.
к тому же я пробовал также и _динамическую_ загрузку, т.что обьектники разработчика тут не могут, видимо, играть роль.
и результат стабильно одинаковый для драйверов jungle(windrv) и libusb0.dll(v0.1.8 и v0.1.10.1)
чертовщина какая-то. я в отчаянии..
← →
tesseract © (2007-07-11 12:25) [12]
> причем точно такая же на Delphi7 даёт скорость ровно в 2
> раза выше.
Скорее всего что-то с указателями, выделение памяти - долгая процедура.
← →
vasilii (2007-07-11 13:01) [13]дык.. здесь же нет никаких выделений памяти!
или Вы хотите сказать, что в драйвере она может выделяться, а драйвер пользуется средствами клиента? хмм.. если так - это интересно. надо как-то испытать..
← →
tesseract © (2007-07-11 13:27) [14]
> retcode = usb_bulkread(EP_IN_BULK_HDD, SECTOR_SIZE, pChar);
т.е. память под pChar в драйвере выделяеться?
нужен профайлер что-бы выяснить где-же тормозит и кого благодарить.
> jungle(windrv)
гм, jungle или та самая обёртка Jungo для написания драйверов? Она запросто такое выкинуть может.
← →
vasilii (2007-07-11 13:42) [15]ха-ха. всё ясно!
на самом деле - наш хаб поддерживает вычитывание оч.больших блоков данных за один запрос (эта возможность появилась недавно). и в тесте на Delphi данные вычитывались именно большими блоками (его писал поектировщик), а в тесте на С - малыми порциями (а там конечно на каждый запрос - и выделение памяти драйвером под контексты, (не знаю, насколько это существенно - переход в kernelmode и обратно), и главное - передача запроса устройству - вот и тормозА).
в обчем - нехватка доки. и пока не испросил проектировщика хаба...
спасибо всем за участие !!!
← →
StriderMan © (2007-07-11 14:39) [16]
> девайс - usb-hub нашего изготовления
а я думал такие штуки только в Китае делают...
← →
REA (2007-07-11 16:23) [17]Только что вот хотел сказать про размеры блоков. Переключение направления приема/передачи в USB почему то довольно длительная обычно процедура.
← →
Rouse_ © (2007-07-11 17:02) [18]Ну про блоки и я думал, но автор сам сказал > причем точно такая же на Delphi7 стало быть выдал неверную информацию, раз программы не идентичны...
← →
Сергей М. © (2007-07-11 17:06) [19]
> причем точно такая же на Delphi7 стало быть выдал неверную
> информацию
А ручки-то кривЫ, однако)
← →
Rouse_ © (2007-07-11 22:29) [20]
> а я думал такие штуки только в Китае делают...
Аладин и Актив тебе в пример - много вещей не только в прекрасном далеко "штампуют"
> А ручки-то кривЫ, однако)
С фактами не поспоришь :)
Страницы: 1 вся ветка
Текущий архив: 2007.09.23;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.044 c