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, Супермодераторы



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

Сейчас этот форум просматривают: granit201z


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

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