Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.021 c
11-1172065293
mixail_shar
2007-02-21 16:41
2007.09.23
Кладову


3-1179735014
олег_л
2007-05-21 12:10
2007.09.23
Quickreport


2-1188203930
Ezorcist
2007-08-27 12:38
2007.09.23
Проблема с установкой времени


2-1188556457
новЫчек
2007-08-31 14:34
2007.09.23
остановка работы цикла


15-1187874286
SerJaNT
2007-08-23 17:04
2007.09.23
Программа для показа прогноза погоды