Свежие комментарии

Title Comment
Да, если вы не используете гистограмму, то более ни на что э

Да, если вы не используете гистограмму, то более ни на что эти манипуляции не влияют.

Если используете - то полезно иметь там правильные значения, ибо индикация пересвета там где его нет (равно как и наоборот) - ухудшает результат.

М-м... Хотелось уточнить один момент. В отсутствие фильтров

М-м... Хотелось уточнить один момент. В отсутствие фильтров все эти манипуляции с ББ не имеют ведь никакого практического значения (кроме показа реальной гистограммы) так ведь?

Только речь идет не о софтверной компании, софт только для с

Только речь идет не о софтверной компании, софт только для себя. Нагрузка постоянно растет и уже видны первые ласточки пизде###а :)

Анатолий, я начну новую ветку, а то не влазит уже. "Перепис

Анатолий, я начну новую ветку, а то не влазит уже.

"Переписать кусками по полгода (месяцу)" - во многих случаях кажется (а иногда и является) просто неправильной идеей. Ну вот представь, что проекту - 10-15 лет, это значит что он стартовал в доисторические времена с совершенно другими требованиями и т.п. У него архитектура - просто может быть неподходящей к сегодняшнему дню и оставлять ее - означает оставлять старые ограничения и старые проблемы.

Собственно, синдром третьей версии - это и есть тот случай, когда выкинуть старое и написать с нуля - кажется правильным. Оно может и быть правильным, только это невозможно оценить на старте.

Ты правильно описал путь к пизде###у - "варез программируют

Ты правильно описал путь к пизде###у - "варез программируют в сторонке три года и потом пытаются перевести на него продукты"

На самом деле переписывать с нуля надо так, чтобы цикл переписывания занимал максимум полгода (лучше - месяц) и все приложения тестировать/адаптировать в процессе переписывания. Если все за такой срок не переписывается - надо переписывать куски. Моя "мегаплатформе" такие "перепишем" уже переживала. Переписывал куски, в которых архитектура "сделаем по-быстрому, а потом начнем латать походу" начала сильно раздражать.

"Свой дистирбутив" - это примерно то, чем занимаются произво

"Свой дистирбутив" - это примерно то, чем занимаются производители железок с линаксом внутри. Т.е. выброшен максимум, нет ни одного лишнего модуля или программы, и ядро патчится под специфику конкретной задачи, не задумываясь о том, что кто-то может не заработать после такого патча.

это уже начало пути к "напишем свою OS" :)

вполне нормальное решение для большого масштабируемого проекта с суровыми требованиями к производительности.

кстати, если мне не изменяет, то в какой-то момент у оракла был свой дистрибутив линакса для максимальной производительности сервера БД.

По поводу вчерашнего у Яндекса, Самохвалов 10000 потоков зап

По поводу вчерашнего у Яндекса, Самохвалов 10000 потоков запустил?

Мне кажется хуже когда в компании застой, при этом все чувст

Мне кажется хуже когда в компании застой, при этом все чувствуют что уже почти уперлись и пора, пока не поздно, отвлечься и подумать о будущем. Но на верху сверху сидит генератор идей, живущий в своем идеальном мире, у которого все отлично работает и есть 300% запас прочности. Из собственного негативного опыта делаются абсолютно неверные выводы. В итоге те кто внизу вязнут в болоте рутины... старый багаж все сильнее тянет назад. Никому и в голову не приходит приподнять голову и осмотреться что происходит вокруг (в т.ч. в плане организации и оплаты труда). И это при не кислых оборотах компании.

Как можно охарактеризовать такую ситуацию?

Он там гонит (в другом месте) - криптуху на GPU программиров

Он там гонит (в другом месте) - криптуху на GPU программировали и до CUDA. В GPU Gems3 про AES пишут, но вообще довольно многое можно.

Другой вопрос, что с локальной памятью удобнее.

Вот тебе еще - Каталов из Elcomsoft рассказывает, зачем Садд

Вот тебе еще - Каталов из Elcomsoft рассказывает, зачем Саддам Хусейн покупал вагон игровых приставок :)
http://webplanet.ru/interview/security/2007/10/29/elcomsoft_gpu.html

L e x a

Вот Рамблер бы поднялся на эти бабки!

Вот Рамблер бы поднялся на эти бабки!

был гипотетический шанс выиграть 2000$...

был гипотетический шанс выиграть 2000$...

Я припоминаю, как у нас в Рамблере был администратор помешан

Я припоминаю, как у нас в Рамблере был администратор помешанный на rc5crack или как оно тогда называлось (не помню).

И я со своих серверов эту штуку выжигал каленой метлой....

одно время назад антивирусы записали дистрибутовских клиенто

одно время назад антивирусы записали дистрибутовских клиентов в трояны.
подозреваю, что причина была именно в этом.

Общая шина - это часто синдром третьей версии. Первая как-то

Общая шина - это часто синдром третьей версии. Первая как-то работала, вторая - это куча патчей на первой, чтобы реально работать. В результате накопился опыт, денег достаточно (первые две версии - успешно продаются) и возникает желание сделать "по хорошему" - спроектировать все правильно, все предусмотреть и прочая.
Желание - вполне естественное, заметим.

Потом этот варез три года программируют, возможно в стороне от основного процесса, хуже когда отвлекая нужные ресурсы, а потом пытаются перевести на него продукты компании. Бывает часто, что и переводят с разрушительным эффектом. Бывает - просто палят бабки, это лучше и совсем не страшно.

По-моему, "общая шина" (т.е. мегапроект, под который можно п

По-моему, "общая шина" (т.е. мегапроект, под который можно пару лет заниматься хней на бабки работодателя) - это болезнь скорее начального этапа, когда вместо создания продукта создается мега-инстурмент для создания продукта. Чтобы в стабильном состоянии компания массово впала в такое - не видел. Обычно подобной хней занимаются специально выделенные люди в качестве перспективного проекта, нисколько не мешая процессу (но переводя бабки хозяев попусту).

У стабильных компаний обычно другая болезнь - в какой-то момент приходят новые люди и говорят "а давайте-ка перепишем все с нуля в 100 раз лучше", да еще и выпихивают "старичков". Вот тут-то как раз и может придти сибирский зверек. Походу могут и "общую шину" начать разработывать, но это лишь часть маразма.

Я лично "перепишем все" наблюдал на своем продукте, (ранее помянутом) для компании А. Так совпало, что рост компании с наймом новых людей совпал с очередным повышением моих расценок, и на волне возмущения меня решили заменить. Найденные через полгода орлы, количеством человека 3, вместе со старыми штатными работинкам решили сыграть в "перепишем все" (ведь было известно, что там примерно 9 месяцев моей работы на разработку - видимо начальству пообещали толпой за 3 месяца управиться). Через 3 месяца меня порадовали "мы переписали". Через год еще ничего не работало, вышла виста и у компании не оказалось продукта под нее. Еще через 9 месяцев выкатили сырой продукт и теряя репутацию доводили его до ума некоторое время. Слава богу, не умерла компания - обошлись без "общей шины".

Оно само проходит. В прошлые разы я ничего не делал для этог

Оно само проходит. В прошлые разы я ничего не делал для этого

Опять слетела кодировка в RSS. Клиент вопросики кажет.

Опять слетела кодировка в RSS. Клиент вопросики кажет.

Попробовал тупое копирование: h_idata -- cudaMemcpy() -

Попробовал тупое копирование:
h_idata -- cudaMemcpy() --> d_idata
d_idata -- __global__ Copy() --> d_odata()
d_odata -- cudeMemcpy() --> h_odata
Результат у исхоника, приведёного ниже 50/50 (т.е. то работает, то не работает). Если уменьшать размер memSize - стабильность работы возрастает.

// includes, system
#include stdlib.h
#include stdio.h
#include string.h
#include math.h
#include time.h
#include windows.h

// includes, project
#include cutil.h
#include cuda.h

#define NUM_BLOCKS 1
#define NUM_THREADS 1

__global__ void Copy(char *from, char *to, int n)
{
for(int i=0; i "меньше" n; i++) to[i] = from[i];
to[0] = '1';
to[n-1] = '2';
}

int main(int argc, char** argv)
{
unsigned int memSize = 30000000;
FILE *F;

// host vars
char *h_idata = NULL;
char *h_odata = NULL;

// device vars
char *d_idata = NULL;
char *d_odata = NULL;

CUT_DEVICE_INIT(argc, argv);

//pinned memory mode - use special function to get OS-pinned memory
CUDA_SAFE_CALL( cudaMallocHost( (void**)&h_idata, memSize ) );
CUDA_SAFE_CALL( cudaMallocHost( (void**)&h_odata, memSize ) );

//allocate device memory
CUDA_SAFE_CALL(cudaMalloc((void**)&d_idata, memSize));
CUDA_SAFE_CALL(cudaMalloc((void**)&d_odata, memSize));

//initialize the memory
F = fopen("out.txt", "rb");
memSize = fread(h_idata, 1, memSize, F);
fclose(F);

//copy host memory to device memory

unsigned int timer = 0;
float elapsedTimeInMs = 0.0f;

CUT_SAFE_CALL( cutCreateTimer( &timer ) );
CUT_SAFE_CALL( cutStartTimer( timer));

// copy host to device
CUDA_SAFE_CALL(cudaMemcpy(d_idata, h_idata, memSize, cudaMemcpyHostToDevice));
// copy inside device
Copy "тут 3 меньше"NUM_BLOCKS, NUM_THREADS"тут 3 больше"(d_idata, d_odata, memSize);
CUDA_SAFE_CALL(cudaThreadSynchronize());
// copy device to host
CUDA_SAFE_CALL(cudaMemcpy(h_odata, d_odata, memSize, cudaMemcpyDeviceToHost));

CUT_SAFE_CALL( cutStopTimer( timer));
elapsedTimeInMs = cutGetTimerValue( timer);

printf("Elapsed: %f seconds\n", elapsedTimeInMs / (float)1000);

// write to file
F = fopen("output.txt", "wb");
fwrite(h_odata, 1, memSize, F);
fclose(F);

//clean up memory
CUDA_SAFE_CALL(cudaFreeHost(h_idata));
CUDA_SAFE_CALL(cudaFreeHost(h_odata));

CUDA_SAFE_CALL(cudaFree(d_idata));
CUDA_SAFE_CALL(cudaFree(d_odata));

CUT_EXIT(argc, argv);
}

В документации про глобальную память вроде ничего про ограничения не сказано... Что я не так делаю в этом простом копировании???

В nginx trylock делается в каждом проходе по eventloop. 7 и

В nginx trylock делается в каждом проходе по eventloop.
7 инструкций процессора (для типичной в наше время архитектуры)

Т.е. у нас всетаки получается опросная модель? Или предлагае

Т.е. у нас всетаки получается опросная модель? Или предлагается из select`а раз в секунду (цифра с потолка) вываливаться и пробовать захватить mutex (в каждом процессе)?

Мне кажется это плохая затея, в таком случае лучше использовать сценарий А, а еще лучше SCM_RIGHTS.

nginx is very well documented... На процессах, по меньшей м

nginx is very well documented...

На процессах, по меньшей мере на FreeBSD

Блокировки - на mutex. Как именно лечится обсуждаемая проблема - не смотрел.

Алексей, вы общаетесь с Игорем, поэтому должны знать, у него

Алексей, вы общаетесь с Игорем, поэтому должны знать, у него воркеры на потоках или процессах?

Опрашивать mutex нужно чаще, чем время заполнения backlog, ч

Опрашивать mutex нужно чаще, чем время заполнения backlog, что на самом деле довольно редко.

В первом варианте меня как раз и смущают лишние wake up, все

В первом варианте меня как раз и смущают лишние wake up, все предыдущие посты на эту тему.

По второму... mutex отвечает за помещение хэндла серверного сокета в select?
Если так, то как раз возникает ситуация что остальные не узнают когда хэндл освободится если не будут постоянно молотить опрашивая mutex. А молотить мы не будем т.к. большую часть времени мы спим в select`е.

Да google идет этим путем, только сегодня за обедом обсуждал

Да google идет этим путем, только сегодня за обедом обсуждали с коллегами.

Но тут опять же вопрос что мы понимаем под своим дистрибутивом и чего хотим добиться.. Google активно патчит (правит) все подряд, а Ubuntu вроде вообще ничего не трогает, а просто дебы варит и скрипты лабает.

У себя мы максимум свой репозиторий внутренний развернули со своими пакетами, дальше не пойдем.

Когда-то я пытался с нуля свой "дистрибутив" делать, тянул себя за уши, делал сбрку всего сам. Убил кучу времени... оно корректно грузилось и выключалось, этим можно было пользоваться, но меньше остальных не стало. Для себя понял что если хочется поиграться, то берем генту, отличный компромисс..вроде полноценный дистрибутив и гемор есть, а если надоело все пересобирать, то можно бинарые пакеты с OpenOffice и Mozilla поставить :)
А если серьезно нормальный дистриб варить, то на основе дебиана (это мое мнение).

Анатолий, по предыдущим постам зачет :)

Все может быть гораздо хуже: у нормальной софтверной компани

Все может быть гораздо хуже: у нормальной софтверной компании на начальном этапе все растет по экспоненте. Ну допустим, в два раза в год. Году на 4-5м может наступить полное видимое благолепие и запас устойчивости... на год-два. Или на 7-8-м году, видел такое.

Вот на фоне оного благолепия зарождаются монстры, которые за год-два могут съесть компанию изнутри. По очень большому числу причин, "общая шина" - это симптом, а не такой монстр. А причина - в том, что люди с экспоненциальной скоростью меняться обычно не могут, а при миллионном-многомиллионном обороте (и соответствующем размере компании со всеми партнерами, дилерами и прочая) - изменения быстро сделать тоже нельзя.

В lua программистах нет необходимости, я ничего не имею прот

В lua программистах нет необходимости, я ничего не имею против lua сообщества, но я осилил спецификацию языка и внутреннего API за 2 часа в горячей ванной :) Вторая часть для меня более интересна, а сам язык очень прост, серьезно можно не заморачиваться.

Алексей, огромное спасибо за интересную статью! У меня при

Алексей,
огромное спасибо за интересную статью!

У меня при работе с CUDA на 8800GTX возникли странные сложности с глобальной памятью :(

Задача: есть текстовый файл ~50Мб, есть словарь из 16384 слов, надо найти индексы первого вхождения каждого из этих слов, т.е. осуществить поиск. Естественно первое, что пришло на ум: запустить N блоков по M тредов, чтобы M*N=16384 параллельных тредов. Так и сделал. Но вот беда: при поиске в 50Мб выдаёт, что ни одного слова не нашёл (алгоритм - банальный брутфорс).

Тогда я сократил задачу и сделал 1 блок с 1 тредом в грайде (однопоточный поиск соответственно только 1-го слова из словаря, в файл в котором ищем вписал это слово в самый конец) - получилось то же самое :(
Затем я заменил в цикле брутфорса j=0 на j=40000000 и слово было найдено (производительность пока пофиг)!

Получается очень странно - по идее если мы выделим память с помощью cudaMalloc() и скопируем в неё из хоста - все потоки должны этот массив видеть _полностью_ , так ? А у меня все потоки видят только "по 10 мегабайт" (если слово поставить в пределах первых 10 Мб и вернуть j=0 - тоже находит).

Где могут быть "грабли" при работе с глобальной памятью?
Может есть какие ограничения?

P.S. Собсно вот исходник самого поиска для 1 треда:

//
// char *x - указатель на массив с искомым словом
// int m - длина массива x
// char *y - указатель на массив с текстом
// int n - длинна массива (50000000 байт в моём случае)
// int *r - указатель на массив с результатами (позиция в файле)
//
// все указанные выше массивы скопированы с хоста на девайс
// c помощью cudaMemcpy(), т.е. находятся в глобальной памяти девайса.
//
__device__ void BF(char *x, int m, char *y, int n, int* r)
{
int i, j;
*r = -1;

for (j = 0; j <= (n-m); j++)
{
for (i = 0; ((i < m) && ( *(x+i) == *(y+j+i) )); i++);
if (i >= m)
{
*r = j;
break;
}
}
}

//
// А это wrapper
//
__global__ void BFWrap(char *dict, int *offsets, char *y, int n, int* r)
{
const int tid = threadIdx.x;
const int bid = blockIdx.x;
const int sid = bid * NUM_THREADS + tid;

if(offsets[sid+1]>0)
{
BF(dict+offsets[sid], offsets[sid+1] - offsets[sid] - 2, y, n, r+sid);
}
}

из main() запускаю его так:
BFWrap<<>>(d_ddata, d_odata, d_idata, textSize, d_rdata);

NUM_BLOCKS и NUM_THREADS за'define'ны и равны 1, т.е. я даже не пользую многпоточность и всё равно не работает :(

Про "захватили власть программисты" могу предложить простой

Про "захватили власть программисты" могу предложить простой тест, позволяющий отличить полный пиз##ц от благодати:

посмотри, кто платит деньги. Если те же программисты, что заххватили власть, о там либо благодать, либо лавка дохнет очень быстро. Если же программисты захватили власть распоряжаться чужими бабками - то да, чаще всего пи###ц

Pages

Subscribe to comments_recent_new