Changeset 1510


Ignore:
Timestamp:
May 26, 2010, 9:42:44 PM (12 years ago)
Author:
Sven Rech
Message:

some quadratic sieve stuff

Location:
trunk/CrypPlugins/QuadraticSieve
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/QuadraticSieve/PeerToPeer.cs

    r1468 r1510  
    2020            defStream.Write(serializedYield, 0, serializedYield.Length);
    2121            byte[] compressedYield = memStream.ToArray();
     22
     23
     24
    2225            return compressedYield.Length;
    2326        }
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSieve.cs

    r1503 r1510  
    3333using System.Collections.Generic;
    3434using System.Diagnostics;
     35using Cryptool.P2P;
    3536
    3637namespace Cryptool.Plugins.QuadraticSieve
     
    6263        private FactorManager factorManager;
    6364        private PeerToPeer peerToPeer = new PeerToPeer();
    64         private BigInteger sumSize = 0;
     65        private uint sumSize = 0;
     66        private bool usePeer2Peer;
    6567
    6668        private static Assembly msieveDLL = null;
    6769        private static Type msieve = null;
     70        private static bool alreadyInUse = false;
     71        private static Mutex alreadyInUseMutex = new Mutex();
    6872
    6973        #endregion
     
    123127        public void Execute()
    124128        {
     129            if (checkInUse())
     130                return;
     131
     132            usePeer2Peer = settings.UsePeer2Peer;
     133            if (usePeer2Peer && !P2PManager.Instance.P2PConnected())
     134            {
     135                GuiLogMessage("No connection to Peer2Peer network. Sieving locally now!", NotificationLevel.Warning);
     136                usePeer2Peer = false;
     137            }
     138            if (usePeer2Peer && settings.Channel.Trim() == "")
     139            {
     140                GuiLogMessage("No channel for Peer2Peer network specified. Sieving locally now!", NotificationLevel.Warning);
     141                usePeer2Peer = false;
     142            }
     143
    125144            sumSize = 0;
    126145            userStopped = false;
     
    145164                    quadraticSieveQuickWatchPresentation.timeLeft.Text = timeLeft_message;
    146165                    quadraticSieveQuickWatchPresentation.factorList.Items.Clear();
    147                     quadraticSieveQuickWatchPresentation.factorInfo.Content = "Searching trivial factors!";                   
     166                    quadraticSieveQuickWatchPresentation.factorInfo.Content = "Searching trivial factors!";
     167                    if (usePeer2Peer)
     168                        quadraticSieveQuickWatchPresentation.relationsInfo.Content = "";
     169                    else
     170                        quadraticSieveQuickWatchPresentation.relationsInfo.Content = "Only local sieving!";
    148171                }
    149172                , null);   
     
    210233                ProgressChanged(1, 1);
    211234               
     235            }
     236            alreadyInUse = false;
     237        }
     238
     239        private bool checkInUse()
     240        {
     241            try
     242            {
     243                alreadyInUseMutex.WaitOne();
     244                if (alreadyInUse)
     245                {
     246                    GuiLogMessage("QuadraticSieve plugin is only allowed to execute ones at a time due to technical restrictions.", NotificationLevel.Error);
     247                    return true;
     248                }
     249                else
     250                {
     251                    alreadyInUse = true;
     252                    return false;
     253                }
     254            }
     255            finally
     256            {
     257                alreadyInUseMutex.ReleaseMutex();
    212258            }
    213259        }
     
    353399        private void prepareSieving(IntPtr conf, int update, IntPtr core_sieve_fcn, int max_relations)
    354400        {
     401            sumSize = 0;
    355402            int threads = Math.Min(settings.CoresUsed, Environment.ProcessorCount-1);
    356403            MethodInfo getObjFromConf = msieve.GetMethod("getObjFromConf");
     
    364411            {
    365412                quadraticSieveQuickWatchPresentation.logging.Text = message;
     413                if (usePeer2Peer)
     414                    quadraticSieveQuickWatchPresentation.relationsInfo.Content = "";
    366415            }
    367416            , null);         
     
    417466                {
    418467                    IntPtr yield = (IntPtr)yieldqueue.Dequeue();
    419                     byte[] serializedYield = (byte[])serializeYield.Invoke(null, new object[] { yield });                   
    420 
    421                     int compressedSize = peerToPeer.put(serializedYield);
    422                     sumSize += compressedSize;
     468                    byte[] serializedYield = (byte[])serializeYield.Invoke(null, new object[] { yield });
     469
     470                    if (usePeer2Peer)
     471                    {
     472                        int compressedSize = peerToPeer.put(serializedYield);
     473                        sumSize += (uint)compressedSize;
     474                    }
    423475
    424476                    saveYield.Invoke(null, new object[] { conf, yield });
     
    449501                , null);
    450502            }
     503
     504            if (usePeer2Peer)
     505            {
     506                quadraticSieveQuickWatchPresentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     507                {
     508                    string size = ((sumSize / 1024.0) / 1024).ToString().Substring(0, 3);
     509                    quadraticSieveQuickWatchPresentation.relationsInfo.Content = size + " MB compressed relation data available!";
     510                }, null);
     511            }
    451512        }
    452513
     
    470531                quadraticSieveQuickWatchPresentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    471532                {
    472                     quadraticSieveQuickWatchPresentation.factorInfo.Content = "Now sieving first composite factor!";
     533                    String compRep;
     534                    if (compositeFactor.ToString().Length < 6)
     535                        compRep = compositeFactor.ToString();
     536                    else
     537                        compRep = compositeFactor.ToString().Substring(0, 4) + "...";
     538                    quadraticSieveQuickWatchPresentation.factorInfo.Content = "Now sieving first composite factor! (" + compRep + ")";
    473539                }, null);
    474540
     
    593659                string s = Directory.GetCurrentDirectory();
    594660                string dllname;
    595                 string relPath;
    596661                if (IntPtr.Size == 4)
    597                 {
    598662                    dllname = "msieve.dll";
    599                     relPath = "x86";
    600                 }
    601663                else
    602                 {
    603664                    dllname = "msieve64.dll";
    604                     relPath = "x64";
    605                 }
    606                 msieveDLL = Assembly.LoadFile(Directory.GetCurrentDirectory() + "\\AppReferences\\"  + relPath + "\\" + dllname);
     665
     666                msieveDLL = Assembly.LoadFile(Directory.GetCurrentDirectory() + "\\AppReferences\\"  + dllname);
    607667                msieve = msieveDLL.GetType("Msieve.msieve");
    608668            }
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSieve.csproj

    r1487 r1510  
    116116  </ItemGroup>
    117117  <ItemGroup>
     118    <ProjectReference Include="..\..\CrypP2P\CrypP2P.csproj">
     119      <Project>{7D3E4C88-7EA8-45EA-AC1E-FC8ED8EDDB7A}</Project>
     120      <Name>CrypP2P</Name>
     121    </ProjectReference>
    118122    <ProjectReference Include="..\..\CrypPluginBase\CrypPluginBase.csproj">
    119123      <Project>{25DB2B47-A457-4EC2-960B-395CE07AE093}</Project>
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSievePresentation.xaml

    r1464 r1510  
    1414            <RowDefinition Height="*"/>
    1515            <RowDefinition Height="*"/>
     16            <RowDefinition Height="*"/>
    1617        </Grid.RowDefinitions>
    1718        <Grid.ColumnDefinitions>
     
    2728        <ListBox Grid.Row="2" Grid.ColumnSpan="2" Name="factorList" Canvas.Left="1" Canvas.Top="50" Height="150" Width="233" />
    2829        <Label Grid.Row="3" Grid.ColumnSpan="2" Content="" HorizontalAlignment="Left" Name="factorInfo" VerticalAlignment="Top" />
    29         <TextBox Name="logging" Grid.Row="4" Grid.ColumnSpan="2" TextAlignment="Left" IsReadOnly="True" TextWrapping="WrapWithOverflow" BorderThickness="1" Margin="1" BorderBrush="AliceBlue" />       
     30        <Label Grid.Row="4" Grid.ColumnSpan="2" Content="" HorizontalAlignment="Left" Name="relationsInfo" VerticalAlignment="Top" />
     31        <TextBox Name="logging" Grid.Row="5" Grid.ColumnSpan="2" TextAlignment="Left" IsReadOnly="True" TextWrapping="WrapWithOverflow" BorderThickness="1" Margin="1" BorderBrush="AliceBlue" />       
    3032        </Grid>       
    3133    </Canvas>
Note: See TracChangeset for help on using the changeset viewer.