Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2024, 22:37   #21
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

DeepFlake
Цитата:
Дело в том, что в разных языках массивы передаются, вообще говоря, по-разному.
Что под этим имеется ввиду?
Параметры функции передаются в функцию по значению или через указатель.
В тех языках, где это необходимо, есть волшебные слова.
Если массив передавать по значению, то это будет большая работа. Такой язык плох, поскольку в соревновании с другим языками он проиграет.
Собственно для этого вы и устроили состязание языков.

Но укажите, какой это язык из вашего списка?

DeepFlake
Цитата:
У меня задача - написать эквивалентные программы на разных языках.
Эквивалентность в чём должна выражаться?
В использовании данных одного типа, в использовании определённого вида циклов, в неиспользовании встроенных структур и библиотек, в использовании определённого алгоритма, ...
Тут перечислять и ...

PS: Волков бояться, в лес не ходить.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 14.08.2024, 22:40   #22
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
Free Pascal, Go и Java не используют GCC и LLVM.
Ну так вы не используете ничего специфичного. Ваш цикл даже процессор соптимизирует.

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
GNU C++ сразу генерирует машинный код без промежуточного представления. хотя LTO использует (оптимизатор)
И что? Вы не знаете про фроненд, оптимизатор и генератор кода в компиляторе?

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
предложите алгоритм.
Вы мерять то что хотите?

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
сейчас я пытаюсь проверить на скорость только доступ к элементам массива.
И как это зависит от языка, если вы используете только примитивные типы и конструкции? Боксинга у вас нет, сборщик ничего не дрыгает, копирований/перемещений нет и т.д.
p51x вне форума Ответить с цитированием
Старый 14.08.2024, 22:44   #23
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Эквивалентность в чём должна выражаться?
Я так понял, задача написать максимально примитивный алгоритм с максимально примитивными типами да еще и на одинаковых компиляторах, чтобы код вообще не отличался. И этим убедить себя, что все языки одинаковы и выбранным ТС язык норм.
p51x вне форума Ответить с цитированием
Старый 15.08.2024, 20:12   #24
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 200
По умолчанию

Итак, продолжаю знакомить с ходом подготовки к тестированию нескольких языков программирования на скорость работы с одномерными массивами.
Как заметил ViktorR в сообщении 17 в данной задаче совсем не обязательно, чтобы массивы состояли из случайных чисел, а главное чтобы элементы в массиве были различными. Поэтому, для упрощения подготовки тестовых данных, каждый массив можно заполнить последовательностью смежных целых чисел, а потом его рандомизировать.

Подготовленные массивы записываются в текстовые файлы такого формата: файл состоит из строк, в каждой строке - по одному числу. Первое число - длина массива, а дальше идут сами элементы массива. То есть если массив из трёх элементов { 9, -3, 87 }, то файл будет
3
9
-3
87

Вот какая программа для генерации тестовых массивов у меня получилась (на языке Rust):

Код:
// License: Public domain.

use std::io::Write;
    // for flush()
use std::str::FromStr;
    // for from_str
use rand::prelude::*;
    // for shuffle

fn main() 
{
    // объявляем переменные для длины массивов
        let mut set1_len : u32;
        let mut set2_len : u32;

    // буфер ввода с консоли
        let mut input_s = String::new();

    // объявляем и создаём массивы
        let mut set1 = Vec::<i32> ::new();
        let mut set2 = Vec::<i32> ::new();

    // получаем random seed по-умолчанию
        let mut rng = rand::thread_rng();

    // объявляем файловые переменные для записи массивов
        let mut set1_f : std::fs::File;
        let mut set2_f : std::fs::File;

    // ввод с консоли длины массивов

    println!( "Создание файлов-массивов со случайными целыми числами." );
    print!( "Введите количество элементов в первом массиве: " );
    std::io::stdout().flush();
    input_s.clear();
    std::io::stdin().read_line( &mut input_s );
    if let Ok(val) = u32::from_str( input_s.trim() )
    {
        set1_len = val;
    }
    else
    {
        writeln!( std::io::stderr(), "Введёное значение не является допустимым числом." );
        std::process::exit( 1 );
    }
    println!( "set1 len = {}", set1_len );

    if set1_len < 1
    {
        writeln!( std::io::stderr(), "Введёное значение не является допустимым числом." );
        std::process::exit( 1 );
    }

    print!( "Введите количество элементов во втором массиве: " );
    std::io::stdout().flush();
    input_s.clear();
    std::io::stdin().read_line( &mut input_s );
//    println!( "input_s = '{}'", input_s );
    if let Ok(val) = u32::from_str( input_s.trim() )
    {
        set2_len = val;
    }
    else
    {
        writeln!( std::io::stderr(), "Введёное значение не является допустимым числом." );
        std::process::exit( 1 );
    }
    println!( "set2 len = {}", set2_len );

    if set2_len < 1
    {
        writeln!( std::io::stderr(), "Введёное значение не является допустимым числом." );
        std::process::exit( 1 );
    }


    // заполняем первый массив целыми числами от 1 до set1_len
        set1 = ( 1_i32 .. ((set1_len+1) as i32 ) ).collect();
    //    println!( "set1: {:?}", set1 );

    // рандомизируем массив
        set1.shuffle( &mut rng);
    //    println!( "set1: {:?}", set1 );

    // создаём файл
    if let Ok( val ) = std::fs::File::create( "set1.txt" )
    {
        set1_f = val;
    }
    else
    {
        writeln!( std::io::stderr(), "Ошибка создания файла set1.txt." );
        std::process::exit( 1 );
    }
    let mut set1_bufwr = std::io::BufWriter::new( set1_f );

    // записываем в файл длину массива    
    set1_bufwr.write_all( (set1_len.to_string() + "\n").as_bytes() );

    // записываем в файл элементы массива    
    for element in &set1
    {
        let mut s = element.to_string() + "\n";
        set1_bufwr.write_all( s.as_bytes() );
    }
    
    set1_bufwr.flush();


    set2 = ( 1_i32 .. ((set2_len+1) as i32 ) ).collect();
//    println!( "set1: {:?}", set1 );
    set2.shuffle( &mut rng);
//    println!( "set1: {:?}", set1 );

    if let Ok( val ) = std::fs::File::create( "set2.txt" )
    {
        set2_f = val;
    }
    else
    {
        writeln!( std::io::stderr(), "Ошибка создания файла set2.txt." );
        std::process::exit( 1 );
    }
    let mut set2_bufwr = std::io::BufWriter::new( set2_f );
    
    set2_bufwr.write_all( (set2_len.to_string() + "\n").as_bytes() );
    
    for element in &set2
    {
        let mut s = element.to_string() + "\n";
        set2_bufwr.write_all( s.as_bytes() );
    }
    
    set2_bufwr.flush();

    
}
Этой программой создал два файла, в одном один миллион чисел, во втором - сто тысяч. Сгенерировала и записала за пару секунд. Общий размер файлов - 7,5 мегабайта.
DeepFlake вне форума Ответить с цитированием
Старый 19.08.2024, 21:53   #25
pbt
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 26
По умолчанию

Может где-то накосячил в коде портируя на PB, но вычислило за 24 секунды.
Вложения
Тип файла: 7z Тест.7z (5.6 Кб, 3 просмотров)
pbt вне форума Ответить с цитированием
Старый 19.08.2024, 22:22   #26
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

pbt
Цитата:
Может где-то накосячил
А теперь посчитайте в случае, когда делитель увеличивается до квадратного корня из числа.
В вашем алгоритме вы ищите делители числа дважды ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.08.2024, 22:37   #27
pbt
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 26
По умолчанию

Алгоритм не мой, а порт кода ТС http://programmersforum.ru/showthread.php?t=347235
pbt вне форума Ответить с цитированием
Старый 19.08.2024, 23:31   #28
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

Но ведь уже в 4-ом сообщении было сделано замечание о неверности алгоритма.
И зачем множить никчёмные сущности?
Можно ведь сразу делать правильно и развиваться, а не повторять худшее.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.08.2024, 16:29   #29
pbt
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 26
По умолчанию

Если код будет отличаться, сравнения скорости получатся некорректными. То есть в данном случае не важно что алгоритм не оптимальный, поскольку не в нем суть.
pbt вне форума Ответить с цитированием
Старый 20.08.2024, 17:18   #30
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

pbt
Цитата:
То есть в данном случае не важно что алгоритм не оптимальный, поскольку не в нем суть.
В том же сообщении говорится о важности алгоритма.

Вы чем собираетесь меряться? ...
Один сделал глупость, а второй повторил только для того, что бы показать ... Что?
Ваш комп и комп ТС разные: железо, ОС, загрузка ОС, ...

Тогда и на языках ТС надо реализации сделать и показать ...

PS: Студни то же читают этот хлам, а потом несут преподу, доказывая свою правоту: "Вот же, написано."
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли доказать, что бывают скорости больше скорости света challengerr Свободное общение 96 09.08.2015 08:08
Вопрос о скорости PDO ? Haroutweb PHP 1 25.08.2012 12:35
оптимизация по скорости sin Medved.tolik Помощь студентам 0 14.12.2011 23:43
График скорости как в DM dmitriegorovih Общие вопросы Delphi 5 30.01.2011 08:22
Сравнение скорости компиляторов Umen Обсуждение статей 13 05.10.2009 19:48