• CPU+GPU. С чего начать?

    @vilgeforce
    Раздолбай и программист
    Для начала нужно разделять код хоста и код ядра. Ядро в общем случае пишется ТОЛЬКО на C, а точнее на его диалекте для openCL. Для Nvidia можно писать на своеобразном ассемблере. Код хоста просто дергает функции opencl и может быть на чем угодно, привязка для python есть. Смысла в подобном не вижу, ибо opencl - сишный код.
    По второму вопросу: есть CUDA. Есть FPGA с кастомным дизайном.

    В любом случае разработка для параллельных вычислений должна начинаться с параллельного алгоритма. Некоторые задачи не параллелятся.
    Ответ написан
    Комментировать
  • Как обнулить std::cin и заставить его ждать ввода?

    @monah_tuk
    Входная программа завершила писать и ваша получила EOF. Всё, баста карапузики. Проверяйте статус ввода и завершайтесь - больше вы данных не получите, никогда и ни при каких условиях.

    Не верите? Отправьте на stdin не одну строку, а файл: выведется правильно файл, а потом посыпят пустые строки или последний токен - зависит от реализации.

    Обратите внимание на слово токен - у вас разделение по пробелу будет. Что бы читать строку, используйте std::getline().

    За флагами:
    www.cplusplus.com/reference/ios/ios/eof
    www.cplusplus.com/reference/ios/ios/fail
    www.cplusplus.com/reference/ios/ios/bad

    Ну а ваш код, по сути, должен стать таким:
    while (true) {
            std::getline(std::cin, line);
            if (!std::cin)
                break;
            std::cout << "out: " + line << std::endl;
        }


    обратите внимание, что если вы сделаете так:
    while (std::cin) {
            std::getline(std::cin, line);
            std::cout << "out: " + line << std::endl;
        }


    то вроде короче, и вроде работает, но будете постоянно выводить одну лишнюю строку (пустую или нет - от реализации), так что поверить статус стоит перед процессингом того, что получили.
    Ответ написан
    6 комментариев
  • Как строятся графики по набору данных?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Я обычно делаю так. Предположим, что желаемая форма графика известна - прямая, парабола, синусоида, поверхность второго порядка... Ищу коэффициенты наилучшего приближения по методу наименьших квадратов. Смотрю для каждой точки величину остаточной ошибки, считаю средний квадрат ошибок (сигму). Отбрасываю все точки, для которых ошибка больше 2.5*сигма, для остальных ищу график снова. И так, пока процесс не стабилизируется.
    А вообще надо подробнее написать, что за данные, откуда они взялись, в каком диапазоне, что нужно от графика - например, должен ли он строго проходить через точки, или должен проходить в области наибольшего сгущения, известно ли что-нибудь про зависимость заранее... А так задача слишком общая.
    Ответ написан
    1 комментарий
  • На каком языке программирования можно написать подобное под Windows?

    @jkotkot
    режим сарказма
    на любом
    Ответ написан
    Комментировать
  • C++ как вызвать метод второго предка?

    GavriKos
    @GavriKos
    Точно так же, как и метод класса b.
    Ответ написан
    Комментировать
  • Что быстрее C++ или Java (вывод строк в консоль)?

    angry_cellophane
    @angry_cellophane
    Ребята, я вам покушать принёс. Открываем специальную олимпиаду.
    :~/src/cpp_time_test$ cat /proc/cpuinfo 
    processor	: 0
    vendor_id	: GenuineIntel
    cpu family	: 6
    model		: 23
    model name	: Intel(R) Core(TM)2 Duo CPU     T6600  @ 2.20GHz
    stepping	: 10
    microcode	: 0xa07
    cpu MHz		: 1200.000
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 0
    cpu cores	: 2
    apicid		: 0
    initial apicid	: 0
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 13
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm
    bogomips	: 4389.29
    clflush size	: 64
    cache_alignment	: 64
    address sizes	: 36 bits physical, 48 bits virtual
    power management:
    
    processor	: 1
    vendor_id	: GenuineIntel
    cpu family	: 6
    model		: 23
    model name	: Intel(R) Core(TM)2 Duo CPU     T6600  @ 2.20GHz
    stepping	: 10
    microcode	: 0xa07
    cpu MHz		: 1200.000
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 1
    cpu cores	: 2
    apicid		: 1
    initial apicid	: 1
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 13
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm
    bogomips	: 4389.29
    clflush size	: 64
    cache_alignment	: 64
    address sizes	: 36 bits physical, 48 bits virtual
    power management:

    :~/src/cpp_time_test$ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 13.04
    Release:	13.04
    Codename:	raring

    ~/src/cpp_time_test$ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) Server VM (build 24.51-b03, mixed mode)
    ~/src/cpp_time_test$ g++ --version
    g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3

    Замеры проводились всего по паре раз, ибо лень, так что присутствует некоторая погрешность. Прошу простить и понять.
    Java:
    time java Main
    real   5m38.489s
    user   0m30.184s
    sys   0m56.864s

    C++
    int main() {
    
        for (int i = 0; i < 10000000; i++) {
    
            printf("Number = %i \n", i);
        }
    
        return 0;
    }

    g++ -O2 origin_main.cpp -o origin_main.o
    time ./orinig_main.o
    real   5m54.260s
    user   0m7.700s
    sys   0m36.768s

    Надеваем мокасины скорости:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      for (int i=0; i < 10000000; i++)
        {
          cout<<"Number = "<< i << '\n';
        }
      return 0;
    }

    g++ -O2 main.cpp -o main.o
    time ./main.o
    real   5m35.629s
    user   0m8.424s
    sys   0m37.408s

    Пробуем магию:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      static char buffer[1024*1024*4] ;
      std::cout.rdbuf()->pubsetbuf( buffer, sizeof(buffer) ) ;
      ios_base::sync_with_stdio(false);
      for (int i=0; i < 10000000; i++)
        {
          cout<<"Number = "<< i << '\n';
        }
      return 0;
    }

    g++ -O2 main.cpp -o main.o
    time ./main.o
    real   5m35.555s
    user   0m3.568s
    sys   0m22.688

    Добавим в топку Java печки дровишек:
    public class Main {
        public static void main(String[] args) throws IOException {
            try (BufferedOutputStream bos = new BufferedOutputStream(System.out, 2 << 22)) {
                try (PrintWriter pr = new PrintWriter(bos, false)) {
                    int i = 0;
                    for (int j = 0; j < 10_000; j++) {
                        for (int k = 0; k < 1000; k++) {
                            pr.write("Number = " + i++ + '\n');
                        }
                        pr.flush();
                    }
                }
            }
        }
    }

    time java -XX:LoopUnrollLimit=42000000 -XX:+AggressiveOpts -Xmx512m -Xms256m  -XX:+OptimizeStringConcat -XX:CompileThreshold=200 Main
    real   5m35.963s
    user   0m4.408s
    sys   0m23.456

    На этом и остановимся, так как это может продолжаться бесконечно.
    Вывод: искусственный тест не показатель, и все сложно.
    Самый главный вывод: не пристало воспитанному джентельмену мериться скоростью, размером и количеством.
    Ответ написан
    Комментировать
  • Почему Steam, Origin не запрашивают UAC?

    @386DX
    Я в игры не играю, но можно установить в автозагрузку свою службу с правами суперпользователя и от ее имени делать что угодно без подтверждений.

    Да, вы удивитесь, но у админа под виндой не все права, есть права системы и права службы, которые могут быть выше чем админ.
    Ответ написан
    Комментировать
  • Принцип работы читов?

    He11ion
    @He11ion
    PHP-monkey
    Все в мире - суть виртуальная абстракция. Нет отдачи, нет стен, нет области видимости, нет ложки. Все окружающее - лишь набор нулей и единиц, модулирующих реальность. Когда ты поймешь это, Нео, ты познаешь суть всех читов в мире и сломаешь матрицу. Дерзай.
    Ответ написан
    Комментировать
  • Создание платформы для разработки gui положений?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    99efe07713174872fd5131daf89b2af5.png

    Чем вас QML не устраивает? Многие особо не парятся и интерфейсом делают embedded браузер (часто из коробки своего же фреймворка). У вас не получится создать систему столь же удобную под каждую из платформ, чем аналоги заточенные под эти платформы.

    Так уж случилось, что мир движется все больше и больше к чисто сетевым технологиям - там в принципе не важно, на чем ваш бэкенд. Взгляните, как строится frontend во многих go проектах, например consul, etcd, ... либо в ELK стеке. По сути есть некие серверные системы, предлагающие некое API, вы сразу можете им пользоваться, если же необходим GUI - вы устанавливаете (или просто включаете) браузерное SPA, которое будет работать с тем же сервисом, но с человеко-понятным интерфейсом.
    Ответ написан
    Комментировать
  • На каком языке писать комментарии в коде?

    Scorpi
    @Scorpi
    Ну мне кажется вопрос очевиден, смотря для кого Вы пишете код.
    Если вы в команде русскоязычных разработчиков - можно и на русском.
    А если какой-то Open Source проект, то конечно лучше бы на международном английском.
    Ответ написан
    Комментировать
  • Возможно создать искусственный интеллект используя современные технологии?

    @asd111
    IBM WATSON поищите
    Вот видео как Ватсон играл в Jeopardy(аналог своей игры)
    www.youtube.com/watch?v=ABbfbPOIP5g
    www.youtube.com/watch?v=4xWNPI6GZp4
    Ответ написан
    Комментировать
  • Как ускорить регулярные выражения в python?

    bobrovskyserg
    @bobrovskyserg
    Регулярные выражения предварительно откомпилированы?
    Если нет - сделайте это.
    Если да - десятикратного выигрыша при переходе на C++ не будет, и не надейтесь.
    Питоновский движок re написан на C и сопоставим по быстродействию с реализациями в библиотеках других языков.
    Так что:
    1. Препроцессинг html - наверняка можно отсечь ненужные куски и выкусить ненужные блоки, прежде чем натравливать на него 3000 паттернов
    2. Еще более глубокий препроцессинг - разбиение html на атомарные фрагменты с тем, чтобы, единожды идентифицировав фрагмент, больше по нему не елозить.
    Ответ написан
    2 комментария
  • Есть ли основные правила супер оптимизации?

    ErmIg
    @ErmIg
    Программист
    Есть развернутый ответ для С++ кода, но его можно обобщить и на другие языки и платформы:

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

    1) Важно понимать, что алгоритмическая оптимизация практически всегда может дать лучший эффект, чем программная. Так, если алгоритм имеет сложность O(n^2), то на больших исходных данных он при любой оптимизации будет медленнее, чем неоптимизированный алгоритм сложности O(n). Впрочем, при выборе алгоритма, опираться только на его сложность не стоит: если объем исходных данных не велик, то вполне может оказаться, что алгоритм со сложностью O(n^2) будет работать быстрее, чем с O(n).
    2) Очень важно повторное использование (кеширование) промежуточных данных, вычисленных в программе – ибо быстрее всего выполняется работа, которую не надо делать. Тем не менее, не надо чрезмерно кешированием увлекаться – если объем кэшируемых данных слишком велик, то это может отрицательно сказаться на общей производительности программы (некоторые данные быстрее вычислять на лету, чем считывать из памяти).
    3) Следует избегать излишнего копирования данных (например, передавать сложные типы данных по ссылке, а не по значению).
    4) По возможности следует избегать условных операторов во вложенных циклах. Так как условные переходы, вызываемые такими операторами, плохо обрабатываются современными процессорами с конвейерной архитектурой.
    5) Данные в памяти, которые используются алгоритмами, должны по возможности лежать упорядочено, и использоваться последовательно. Это позволит процессору их эффективно кешировать. Важно помнить, что доступ к кэшу процессора значительнее быстрее, чем к оперативной памяти.
    6) Если алгоритмы это позволяют, то возможно стоит реализовать их параллельное исполнение (в отдельных потоках или процессах). Это позволит эффективно задействовать современные многоядерные процессы.
    7) В некоторых случаях (например обработка изображений) большого эффекта можно достичь применением специализированных расширений процессора (SSE, SSE2, AXX, AVX2 и другие). Стоит отметить, что большинство современных компиляторов (GCC, MSVS, ICC) поддерживают непосредственное использование данных расширений непосредственно из С++ кода при помощи специальных встроенных функций (intrinsics). Минусами такого подхода является потеря переносимости (впрочем, эта проблема решается наличием разных веток программы под разные процессоры) и значительное усложнение программы.
    8) Также большого эффекта можно достичь применением специализированных ускорителей, например GPU (технологии CUDA, OpenCL). Минусами таких решений являются потеря универсальности и значительное усложнение программы, а также то, что на специализированных ускорителях, как правило, хорошо работает далеко не каждый алгоритм.
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Главное правило оптимизации - не заниматься преждевременной оптимизацией.

    Вообще все просто - пишите код, пишите нагрузочные тесты, профилируете, оптимизируете узкие места. С опытом ляпов будет меньше изначально. Ну и книжки стоит читать всякие, желательно обобщенные (типа там паттерны проектирования и т.д.) что бы можно было вместо оптимизации просто быстро систему масштабировать (это дешевле). Ну и еще теория алгоритмов помогает, если у вас есть именно обработка больших объемов данных (массивы на миллионы айтемов, на тысячах пофигу обычно)
    Ответ написан
    1 комментарий
  • Как сгенерировать загадку эйнштейна?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Комбинаторику вместе с теорией графов. И немножко математической логики.
    Ответ написан
    Комментировать
  • Дефрагментация диска на C/C++, куда копать?

    @386DX
    есть два пути: первый на гитхаб, второй на sourceforge
    Ответ написан
    Комментировать
  • Можно ли программировать на монохромном медицинском мониторе?

    azrail_dev
    @azrail_dev
    Кто же запрещает, программируй. Вопрос в другом - для чего это всё?
    Ответ написан
    Комментировать