у кого-либо есть лучший путь?
я думаю, просто добавив, что сценарий к телу был бы легче тогда добавление его к последнему узлу на странице. Как насчет этого:
function include(url) {
var s = document.createElement("script");
s.setAttribute("type", "text/javascript");
s.setAttribute("src", url);
document.body.appendChild(s);
}
Предоставлено Уильямом Чаном и Google. На 30-70% быстрее, чем memcpy в Microsoft Visual Studio 2005.
void X_aligned_memcpy_sse2(void* dest, const void* src, const unsigned long size)
{
__asm
{
mov esi, src; //src pointer
mov edi, dest; //dest pointer
mov ebx, size; //ebx is our counter
shr ebx, 7; //divide by 128 (8 * 128bit registers)
loop_copy:
prefetchnta 128[ESI]; //SSE2 prefetch
prefetchnta 160[ESI];
prefetchnta 192[ESI];
prefetchnta 224[ESI];
movdqa xmm0, 0[ESI]; //move data from src to registers
movdqa xmm1, 16[ESI];
movdqa xmm2, 32[ESI];
movdqa xmm3, 48[ESI];
movdqa xmm4, 64[ESI];
movdqa xmm5, 80[ESI];
movdqa xmm6, 96[ESI];
movdqa xmm7, 112[ESI];
movntdq 0[EDI], xmm0; //move data from registers to dest
movntdq 16[EDI], xmm1;
movntdq 32[EDI], xmm2;
movntdq 48[EDI], xmm3;
movntdq 64[EDI], xmm4;
movntdq 80[EDI], xmm5;
movntdq 96[EDI], xmm6;
movntdq 112[EDI], xmm7;
add esi, 128;
add edi, 128;
dec ebx;
jnz loop_copy; //loop please
loop_copy_end:
}
}
Вы можете оптимизировать его дальше в зависимости от вашей конкретной ситуации и любых предположений, которые вы можете сделать.
Вы также можете проверить исходный код memcpy (memcpy.asm) и убрать его обработку особых случаев. Возможно, удастся продолжить оптимизацию!
На любом уровне оптимизации -O1
или выше GCC будет использовать встроенные определения для таких функций, как memcpy
- с правильным параметром -march
( -march = pentium4
для упомянутого вами набора функций) он должен генерировать довольно оптимальный встроенный код для конкретной архитектуры.
Я бы проверил его и посмотрел, что получится.
Если используется только для процессоров Intel, вы можете воспользоваться IPP . Если вы знаете, что он будет работать с графическим процессором Nvidia, возможно, вы могли бы использовать CUDA - в обоих случаях может быть лучше смотреть шире, чем оптимизация memcpy () - они предоставляют возможности для улучшения вашего алгоритма на более высоком уровне. Однако они оба зависят от определенного оборудования.
Если вы работаете в Windows, используйте API DirectX , в которых есть специальные GPU -оптимизированные процедуры для обработки графики (насколько быстро это может быть ? Ваш ЦП не загружен. Сделайте что-нибудь еще, пока ГП его ест).
Если вы хотите быть независимым от ОС, попробуйте OpenGL .
Не возитесь с ассемблером, потому что он слишком вероятно, что вам не удастся превзойти более 10 лет опытных инженеров-программистов, создающих библиотеки.
SSE-код, опубликованный hapalibashi, - это то, что вам нужно.
Если вам нужна еще большая производительность и не уклоняйтесь от долгого и извилистого пути написания драйвера устройства : Все важные платформы в настоящее время имеют DMA-контроллер, который может выполнять копирование быстрее и параллельно с кодом процессора.
Однако это требует написания драйвера. Ни одна большая ОС, о которой я знаю, не предоставляет эту функциональность пользователю из-за рисков безопасности.
Однако оно того стоит (если вам нужна производительность), поскольку ни один код на Земле не может превзойти часть кода аппаратное обеспечение, предназначенное для такой работы.