• OpenCL в C# - какими средствами и где взять HelloWorld?

    iamserge
    @iamserge Автор вопроса
    Едрен котобатон, у меня это включилось с первого раза
    Написано
  • OpenCL в C# - какими средствами и где взять HelloWorld?

    iamserge
    @iamserge Автор вопроса
    Василий Банников,
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using OpenCL;
    
    namespace ConsoleApp1
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                int[] Primes = Enumerable.Range(2, 1000000).ToArray();
                EasyCL cl = new EasyCL();
                cl.Accelerator = OpenCL.AcceleratorDevice.GPU;        //You can also set the accelerator after loading the kernel
                cl.LoadKernel(IsPrime);                  //Load kernel string here, (Compiles in the background)
                cl.Invoke("GetIfPrime", Primes.Length, Primes); //Call Function By Name With Parameters
                                                                //Primes now contains all Prime Numbers
            }
    
            static string IsPrime
            {
                get
                {
                    return @"
                    kernel void GetIfPrime(global int* message)
                    {
    
                        int index = get_global_id(0);
    
                        int upperl=(int)sqrt((float)message[index]);
                        for(int i=2;i<=upperl;i++)
                        {
                            if(message[index]%i==0)
                            {
                                //printf("" %d / %d\n"",index,i );
                                message[index]=0;
                                return;
                            }
                        }
    
                        //printf("" % d"",index);
    
                    }";
                }
            }
    
        }
    }
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    MVV, И это верное направление было ...
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, Да, было бы хорошо избавиться от этого, как и от lock, которые так себе решение ...
    Хм ... Это тоже пойдет на пользу, BlockingCollection по описанию прямо то что нужно
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    MVV, Это 8.0.3
    private void Button2_Click(object sender, RoutedEventArgs e)
            {
               richTextBox2.AppendText(Environment.Version.ToString());
            }
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, Другие потоки, по сути дела есть поток один на сбор данных, он и создает новые ключи в словаре. Словарь состоит из массивов типа byte, где потоки смотрят есть ли для них задачки, в зависимости от условий. Например, вот такая матрица получается:

    key1[1 1 1 0]
    key2 [1 0 0 0]
    key3 [1 0 0 0]


    Ну и там уже уловия есть, когда и что можно делать т.к. они зависимы друг от друга, нельзя все распаралелить т.к. некоторым не будет хватать банально данных посчитанных другими.
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, А, ну в этом смысле - да, правда там глобальный словарь массивов, там-то я просто и ищу ... Использую lock() а словарь заполняется когда загружены и подготовлены данные из сети/диска, и готовы ссылки на задачки новые. В общем то простая система, меня сбило с толку всякое MQ непонятное

    Увы и ах, пока кажется вообще не ясно как решить проблему =( На Linux вообще по умолчанию доступно судя по всему =/
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, Вот тут вот не понял совсем ... Что такое MQ и что оттуда должно приходить...
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    Я сделал то же самое:

    PS C:\Users\Sergey> cd e:
    PS E:\> cd test
    PS E:\test> dotnet new console
    The template "Console App" was created successfully.
    
    Processing post-creation actions...
    Restoring E:\test\test.csproj:
      Determining projects to restore...
      Restored E:\test\test.csproj (in 123 ms).
    Restore succeeded.
    
    
    PS E:\test> dotnet run
    The number of processors on this computer is 44.
    PS E:\test>


    Ах и да - это у меня Windows 10! Едрен батон ...
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    Ну потоки я создаю в ограниченном количестве, т.е. их несколько типов я вручную подгоняю по количеству ориентируясь на то справляются они с задачами или нет... При этом они сами находят себе новые задачи и выполняются все время, даже когда задач по факту нет, т.е. висят в таком виде:

    while(true)
    
    int idForTheCalc =  int.MaxValue
    // Ищу задачу на день и если нашел, тогда idForTheCalc получает id
    
                    // Если так и остался id по умолчанию, значит спим
                    if (idForTheCalc == int.MaxValue)
                    {
                        System.Threading.Thread.Sleep(2000);
                        continue;
    
                    }
    
    //Если нашел, то делаю что нибудь или опять искать и спать, если задач нет
    
    }
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    У меня WPF на Net8 и по умолчанию исползуется только один CPU, второй он просто игнорирует ...
    Написано
  • Как в numpy.anywhere - как искать только первый?

    iamserge
    @iamserge Автор вопроса
    Максим Припадчев, Данные примерно такие

    unixtimestamp + float + еще всякие цифры в каждой строке. Именно по float годными оказывается с десяток и более строк, где нужна только первая ... Ну в прицнипе вся суть в работе anywhere. Он возвращает индексы, а мне нужно индекс первого соответствующего условиям.
    Написано
  • Как обработать такое исключение в c#?

    iamserge
    @iamserge Автор вопроса
    Роман, Только в php сайт не ложится для всех, когда один из 100 скриптов для одного клиента чего-то не смог сделать=)

    Ну потоков в целом 30 штук, по три на траблицу, объем запросов не знаю в целом, но в пиках их эдак 10k/секунда может быть, само собой они там в очереди топчатся и я использую MEMORY таблицы.

    В целом пока я "придумал" и почти сделал:
    1. try{} catch{} на всю функцию потока
    2. Если процесс умер - запускаю заново
    3. Храню их все время в списке
    4. Пишу код так, чтобы восстанавливаться в духе save/load или снапшотов и т.п. (хотя он и так такой, новые ошибки каждый раз меня вынудили думать об этом почти сразу)

    Да тут даже не в коде дело, часто об это спотыкаюсь и долго ищу решения иногда, надоело довольно быстро страдать от этой проблемы
  • Как обработать такое исключение в c#?

    iamserge
    @iamserge Автор вопроса
    Все исключения обязаны наследоваться от базового.
    Перехватить нельзя всего несколько очень специфичных исключений типа OOM

    Тогда пожалуй и стоит взять это на вооружения, т.е. для меня c# не особо привычная среда с его компилятором - когда одна ошибка приводит к тому что все приложение разваливается. Хотя может есть и лучше способы ...
  • Как обработать такое исключение в c#?

    iamserge
    @iamserge Автор вопроса
    Василий Банников, Хм, а вот кстати на счет всего кода - добавлю пожалуй я один try{}catch{} на всю что внутри функции потока ... Хм, вообще "Exception" вроде бы как общий, но я не до конца понимаю пределы его "власти" т.е. насколько он резиновый чтобы обо всем сообщать ... ? То есть я про то, как все будет выглядеть если я хочу переловить вообще все что только может случиться? Ну и наверное их будет все же 2-3 штуки, а может и один большой - не знаю пока как лучше и правда ... Надо серьезно этим заняться ...

    Да и почитал, кажется это работает с try{} тотальным почти так же как и без, но за то я буду контролировать процесс весь, а не мучаться с такими проблемами ... Даже если не могу обработать нормально или найти причин - смогу что-то сделать, чтобы недопустить краха приложения и справится без перезапуска.
  • Как обработать такое исключение в c#?

    iamserge
    @iamserge Автор вопроса
    Василий Банников, ок, ее бы просто поймать хотя бы и пусть даже перезапустить поток ... Правда не понимаю связи между потоком и SQL, потоки чудно работают по многу времени и ждут себе долгих запросов без проблем. А иногда бац и это исключение по необъяснимым причинам ...
  • Как обработать такое исключение в c#?

    iamserge
    @iamserge Автор вопроса
    Василий Банников, Пока один постоянный на UPDATE и по дефолту на SELECT т.е. там вроде 30 сек.

    Не совсем понял где именно, но "Exception Unhandled" в заголовке ну или "System.ArgumentOutOfRangeException:" перед текстом ошибки ... Да действительно, аргументы вне диапазона ... Ничего правда не понял, какие аргументы у меня и куда вообще вдруг вышли за какие такие пределы ...
  • Как обработать такое исключение в c#?

    iamserge
    @iamserge Автор вопроса
    Василий Банников, Я так догадываюсь что речь не о MySQL, а кроме него я ничему не указываю timeout ...

    using (MySqlConnection UpgradeConnection = new MySqlConnection(SQLConnect))
                            {
    
                                MySqlCommand updateCommand = UpgradeConnection.CreateCommand();
                                updateCommand.CommandText = String.Join("", SQL_QUERIES.ToArray());
                                updateCommand.CommandTimeout = 180;
                                UpgradeConnection.Open();
                                updateCommand.ExecuteNonQuery();
    
                            }


    А так создаю поток каждый ...
    Thread pPointThread = new Thread(() => pPointsCalculate(InitName, "Week", NextRow));
    
                        activeThreads.Add(new threadData
                        {
    
                            id = pPointThread.ManagedThreadId,
                            InitName = initGrid.Rows[NextRow.Index].Cells[0].Value.ToString(),
                            thread = pPointThread,
                            type = "pPointsWeekly"
    
                        });
    
                        pPointThread.Start();


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

    Два: в стектрейсе пишется ещё тип исключения. Скорее всего тут какой-нибудь ArgumentException

    Сейчас достану скоро ... Не редкость они у меня .... Если он нигде их не хранит старые ...
  • C#+MySQL как избежать блокировок таблиц?

    iamserge
    @iamserge Автор вопроса
    И дополнительно еще такая ошибка ...

    'Timeout can be only be set to 'System.Threading.Timeout.Infinite' or a value > 0.
    Parameter name: value'


    Прямо тут на строке с ExecuteNonQuery для UPDATE, странно что же она не ловится ...

    try
                                {
    
                                    updateCommand.ExecuteNonQuery();
    
                                }
                                catch (MySqlException Ext)
                                {
    
                                    checkpPointsLog.Invoke((MethodInvoker)delegate
                                    {
                                        UpdateLog(Ext.Message);
                                    });
    
                                }
  • C#+MySQL как избежать блокировок таблиц?

    iamserge
    @iamserge Автор вопроса
    Все мои ошибки это:
    Fatal error encountered during command execution.
    Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. (уже 240 сек. и кажется это трата времени просто ...)