2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5 ... 7  След.
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 17:18 
Заслуженный участник


09/05/12
25179
bin в сообщении #927369 писал(а):
меня заинтересовало, и вот нашел показательный контрпример от авторитетной компании:
И что? В "авторитетных компаниях" плохой код пишут ничуть не реже, чем в неавторитетных.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 21:53 
Аватара пользователя


22/09/09

1907
Pphantom
Общеизвестно, что львиная доля всего создаваемого кода пишется в Индии. Индийские кодеры нисколько не лучше и не хуже других кодеров, но за зарплату в несколько десятков тысяч рупий, т.е. в несколько десятков US долларов, особенно стараться не стоит. Американцы выбирают Индию за дешевую раб.силу, а Индия отвечает адекватно. Но в случае, который я привел, это не просто какой-то фрагмент из листинга в сотни тысяч строк. Это Sample - Образец, включенный в дистрибутив CUDA C, показывающий, как надо программировать под CUDA. И в нем не сотни тысяч строк, а всего пара десятков. И уж его-то проверяли, редактировали и одобряли совсем не в Индии. Подобные образцы - это лицо продуктов компании, потеря такого лица - это потеря прибыли, на что ни одна авторитетная компания никогда не пойдет.

PS BTW а почему "авторитетных компаниях" у Вас в кавычках? Вы не считаете, что NVIDIA Corporation по-настоящему авторитетная? Кто для Вас тогда авторитет? ;-)

PPS Широко известно, что, чтобы не писали плохого кода, язык должен не позволять писать особо плохой код. Паскаль, нпр., не позволяет ;-)

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 22:38 
Заслуженный участник
Аватара пользователя


30/01/06
72407
bin в сообщении #927590 писал(а):
Индийские кодеры нисколько не лучше и не хуже других кодеров, но за зарплату в несколько десятков тысяч рупий, т.е. в несколько десятков US долларов, особенно стараться не стоит.

То, что для нас - "несколько десятков US долларов", в Индии неплохие деньги (не везде, конечно).

bin в сообщении #927590 писал(а):
PPS Широко известно, что, чтобы не писали плохого кода, язык должен не позволять писать особо плохой код. Паскаль, нпр., не позволяет ;-)

Паскаль позволяет писать такой плохой код, что C++ и не снилось.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:03 
Заслуженный участник


09/05/12
25179
bin в сообщении #927590 писал(а):
Но в случае, который я привел, это не просто какой-то фрагмент из листинга в сотни тысяч строк. Это Sample - Образец, включенный в дистрибутив CUDA C, показывающий, как надо программировать под CUDA. И в нем не сотни тысяч строк, а всего пара десятков. И уж его-то проверяли, редактировали и одобряли совсем не в Индии.
Это все очень хорошо и правильно, но в то же время - классический пример Argumentum ad verecundiam. :D

А код и в самом деле кривой. Помимо пресловутого printf(), тут же еще и malloc(), приведение типов в стиле C, а заодно и закат Солнца вручную - реализация на коленке того, что штатно должен делать new в C++. В общем, кто бы там его не писал, примером хорошего кода это считать не стоит.

bin в сообщении #927590 писал(а):
PS BTW а почему "авторитетных компаниях" у Вас в кавычках? Вы не считаете, что NVIDIA Corporation по-настоящему авторитетная? Кто для Вас тогда авторитет?
NVIDIA Corp. делает отличные графические процессоры и неплохие чипсеты. А вот кто и почему решил, что по этой причине она должна выдавать хороший программный код, я не знаю.

bin в сообщении #927590 писал(а):
PPS Широко известно, что, чтобы не писали плохого кода, язык должен не позволять писать особо плохой код. Паскаль, нпр., не позволяет
Паскаль тоже позволяет. А у C++ возможности по этой части действительно весьма велики...

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:05 
Заслуженный участник


28/04/09
1933
Pphantom
Pphantom в сообщении #925073 писал(а):
Какая-то у Вас странная смесь из C и C++ получается...

Если Вы используете C++, то непонятно, зачем вообще нужен printf.
printf $\text{---}$ вполне себе C++ная функция (описана в стандарте языка, входит в стандартную библиотеку). Поэтому несколько неясно, о каком смешении идет речь...

bin
bin в сообщении #927590 писал(а):
Но в случае, который я привел, это не просто какой-то фрагмент из листинга в сотни тысяч строк. Это Sample - Образец, включенный в дистрибутив CUDA C, показывающий, как надо программировать под CUDA. И в нем не сотни тысяч строк, а всего пара десятков. И уж его-то проверяли, редактировали и одобряли совсем не в Индии. Подобные образцы - это лицо продуктов компании, потеря такого лица - это потеря прибыли, на что ни одна авторитетная компания никогда не пойдет.
Достаточно взглянуть на прототип функции cudaMalloc, чтобы подобные иллюзии развеялись. Что уж говорить о каком-то там примере...

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:06 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Pphantom в сообщении #927622 писал(а):
А у C++ возможности по этой части действительно весьма велики...

Обычно к тому моменту, когда программист изучает C++ достаточно хорошо, чтобы вообще написать хоть какой-то компилирующийся и работающий код, он успевает достичь таких седин и профессионализма, что о написании плохого кода речь не идёт :-)

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:08 
Заслуженный участник


09/05/12
25179
EtCetera в сообщении #927623 писал(а):
printf $\text{---}$ вполне себе C++ная функция (описана в стандарте языка, входит в стандартную библиотеку). Поэтому несколько неясно, о каком смешении идет речь...
Входит, это верно. Но все же больше для совместимости, нежели как основной инструмент, а если уж ее использование еще и осложняет жизнь...

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:08 
Заслуженный участник
Аватара пользователя


30/01/06
72407
EtCetera в сообщении #927623 писал(а):
printf $\text{---}$ вполне себе C++ная функция (описана в стандарте языка, входит в стандартную библиотеку). Поэтому несколько неясно, о каком смешении идет речь...

Она унаследована от Си, поэтому её дизайн типично Сишный, существенно уступающий дизайну уровня STL. В стандартную библиотеку она включена для совместимости.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:10 
Заслуженный участник


09/05/12
25179
Munin в сообщении #927624 писал(а):
Обычно к тому моменту, когда программист изучает C++ достаточно хорошо, чтобы вообще написать хоть какой-то компилирующийся и работающий код, он успевает достичь таких седин и профессионализма, что о написании плохого кода речь не идёт :-)
Вашими бы устами... увы, в последнее время мне как-то особо "везет", количество попадающегося совершенно безумного кода на C++ зашкаливает за все разумные рамки. Похоже, что если раньше все писали абы как на Фортране, то теперь почетное звание языка, который "все знают" и никто толком не умеет использовать, перешло к C++.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:16 
Аватара пользователя


22/09/09

1907
Munin в сообщении #927606 писал(а):
Паскаль позволяет писать такой плохой код, что C++ и не снилось.
Приведите примеры.

-- Чт ноя 06, 2014 23:17:55 --

Pphantom в сообщении #927622 писал(а):
NVIDIA Corp. делает отличные графические процессоры и неплохие чипсеты. А вот кто и почему решил, что по этой причине она должна выдавать хороший программный код, я не знаю.
Что стоят графические процессоры без ПО к ним? Ровно ничего!

-- Чт ноя 06, 2014 23:22:25 --

Pphantom в сообщении #927629 писал(а):
количество попадающегося совершенно безумного кода на C++ зашкаливает за все разумные рамки
Есть книга Скотт Мейерс, Эффективное использование С++. Там много примеров безумного кода на C++.

-- Чт ноя 06, 2014 23:25:01 --

EtCetera в сообщении #927623 писал(а):
Достаточно взглянуть на прототип функции cudaMalloc, чтобы подобные иллюзии развеялись.
Чем плохая функция? Она работает нормально.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:25 
Заслуженный участник


28/04/09
1933
bin
bin в сообщении #927632 писал(а):
Есть книга Скотт Мейерс, Эффективное использование С++. Там много примеров безумного кода на C++.
Приведите примеры. :wink:
bin в сообщении #927632 писал(а):
EtCetera в сообщении #927623 писал(а):
Достаточно взглянуть на прототип функции cudaMalloc, чтобы подобные иллюзии развеялись.
Чем плохая функция? Она работает нормально.
Покажите пожалуйста, как бы Вы ее использовали.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:36 
Аватара пользователя


22/09/09

1907
EtCetera в сообщении #927636 писал(а):
Приведите примеры.
Цитата:
потенциальная неоднозначность - это не ошибка (С.110)
EtCetera в сообщении #927636 писал(а):
Покажите пожалуйста, как бы Вы ее использовали.
Отвечаете на вопрос вопросом? ;-)

Мой ответ: Так же как показано в CUDA Samples\v5.0. + см. книгу Сандерс и Кэндрот, Технология CUDA в примерах.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение06.11.2014, 23:53 
Заслуженный участник


28/04/09
1933
bin
bin в сообщении #927639 писал(а):
Цитата:
потенциальная неоднозначность - это не ошибка (С.110)
Принимается. :-) Хотя я впервые вижу, чтобы на Мейерса ссылались по номерам страниц, а не по номерам правил. :wink:
bin в сообщении #927639 писал(а):
EtCetera в сообщении #927636 писал(а):
Покажите пожалуйста, как бы Вы ее использовали.
Отвечаете на вопрос вопросом? ;-)
И в мыслях не было.
bin в сообщении #927639 писал(а):
Мой ответ: Так же как показано в CUDA Samples\v5.0. + см. книгу Сандерс и Кэндрот, Технология CUDA в примерах.
Хотелось бы все-таки увидеть код.

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение07.11.2014, 00:09 
Аватара пользователя


22/09/09

1907
EtCetera в сообщении #927640 писал(а):
Хотелось бы все-таки увидеть код.
Я не понял: Вы хотите, чтобы я скопировал любой пример из CUDA Samples или из Сандерс и Кэндрот? Зачем перегружать форум общедоступными листингами? Эти источники есть на https://developer.nvidia.com/ возьмите любой листинг с cudaMalloc, оттуда по своему усмотрению и покажите, чем плоха эта функция.

-- Пт ноя 07, 2014 00:15:56 --

EtCetera в сообщении #927640 писал(а):
И в мыслях не было.
По факту :-)

 Профиль  
                  
 
 Re: Книга с полным и систематичным изложением современного С++?
Сообщение07.11.2014, 00:41 
Заслуженный участник


28/04/09
1933
bin
bin в сообщении #927641 писал(а):
Зачем перегружать форум общедоступными листингами? Эти источники есть на https://developer.nvidia.com/ возьмите любой листинг с cudaMalloc, оттуда по своему усмотрению и покажите, чем плоха эта функция.
Google первую ссылку выдает на страницу CUDA Fast Fourier Transform library (cuFFT), где приведен такой код:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#define NX 64
#define NY 64
#define NZ 128

cufftHandle plan;
cufftComplex *data1, *data2;
cudaMalloc((void**)&data1, sizeof(cufftComplex)*NX*NY*NZ);
cudaMalloc((void**)&data2, sizeof(cufftComplex)*NX*NY*NZ);
/* Create a 3D FFT plan. */
cufftPlan3d(&plan, NX, NY, NZ, CUFFT_C2C);

/* Transform the first signal in place. */
cufftExecC2C(plan, data1, data1, CUFFT_FORWARD);

/* Transform the second signal using the same plan. */
cufftExecC2C(plan, data2, data2, CUFFT_FORWARD);

/* Destroy the cuFFT plan. */
cufftDestroy(plan);
cudaFree(data1); cudaFree(data2);
Даже если великодушно закрыть глаза на то, что здесь не производится обработка ошибок, имеем совершенно непереносимый код вида (void**)&data1 (здесь data1 $\text{---}$ отнюдь не void*). Подробности на comp.lang.c FAQ.
Чтобы избежать такого ужаса, приходится городить обертки вроде
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
namespace GPUHelper
{
    void* AllocateMemory
        (
            size_t bytesCount
        )
    {
        void* allocatedMemory{};
        cudaError_t error = cudaMalloc(&allocatedMemory, bytesCount);

        if (error != cudaSuccess)
        {
            // как-то обрабатываем ошибку
        }

        return allocatedMemory;
    }

    template <typename Type>
    void AllocateMemory
        (
            Type*& memoryPointer,
            size_t bytesCount
        )
    {
        memoryPointer = static_cast<Type*>(AllocateMemory(bytesCount));
    }
}

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 101 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 7  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group