Ignore:
Timestamp:
Nov 20, 2010, 11:41:36 AM (11 years ago)
Author:
Sven Rech
Message:

reverted my changes (they don't seem to work too well)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/KeySearcher.cs

    r2112 r2114  
    371371
    372372            KeySearcherOpenCLCode keySearcherOpenCLCode = null;
    373             KeySearcherOpenCLSubbatchOptimizer keySearcherOpenCLSubbatchOptimizer = null;
    374373            if (useOpenCL)
    375             {
    376                 keySearcherOpenCLCode = new KeySearcherOpenCLCode(this, encryptedData, sender, CostMaster, 256 * 256 * 256 * 16);
    377                 keySearcherOpenCLSubbatchOptimizer = new KeySearcherOpenCLSubbatchOptimizer(oclManager.CQ[settings.OpenCLDevice].Device.MaxWorkItemSizes.Aggregate(1, (x, y) => (x * (int)y)));
    378             }
     374                keySearcherOpenCLCode = new KeySearcherOpenCLCode(this, encryptedData, sender, CostMaster, 256 * 64);
    379375
    380376            try
     
    403399                            try
    404400                            {
    405                                 finish = BruteforceOpenCL(keySearcherOpenCLCode, keySearcherOpenCLSubbatchOptimizer, keyTranslator, sender, bytesToUse, parameters);
     401                                finish = BruteforceOpenCL(keySearcherOpenCLCode, keyTranslator, sender, bytesToUse);
    406402                            }
    407403                            catch (Exception)
     
    414410                        int progress = keyTranslator.GetProgress();
    415411
    416                         if (!useOpenCL)
    417                         {
    418                             doneKeysArray[threadid] += progress;
    419                             keycounterArray[threadid] += progress;
    420                             keysLeft[threadid] -= progress;
    421                         }
     412                        doneKeysArray[threadid] += progress;
     413                        keycounterArray[threadid] += progress;
     414                        keysLeft[threadid] -= progress;
    422415
    423416                    } while (!finish && !stop);
     
    436429        }
    437430
    438         private unsafe bool BruteforceOpenCL(KeySearcherOpenCLCode keySearcherOpenCLCode, KeySearcherOpenCLSubbatchOptimizer keySearcherOpenCLSubbatchOptimizer, IKeyTranslator keyTranslator, IControlEncryption sender, int bytesToUse, object[] parameters)
    439         {
    440             int threadid = (int)parameters[1];
    441             BigInteger[] doneKeysArray = (BigInteger[])parameters[2];
    442             BigInteger[] keycounterArray = (BigInteger[])parameters[3];
    443             BigInteger[] keysLeft = (BigInteger[])parameters[4];
     431        private unsafe bool BruteforceOpenCL(KeySearcherOpenCLCode keySearcherOpenCLCode, IKeyTranslator keyTranslator, IControlEncryption sender, int bytesToUse)
     432        {
     433            float[] costArray = null;
    444434            try
    445435            {
    446436                Kernel bruteforceKernel = keySearcherOpenCLCode.GetBruteforceKernel(oclManager, keyTranslator);
    447                
     437                costArray = new float[keyTranslator.GetOpenCLBatchSize()];
    448438                int deviceIndex = settings.OpenCLDevice;
    449439               
     440                Mem costs = oclManager.Context.CreateBuffer(MemFlags.READ_ONLY, costArray.Length * 4);
     441                IntPtr[] globalWorkSize = { (IntPtr)keyTranslator.GetOpenCLBatchSize() };
     442
    450443                Mem userKey;
    451444                var key = keyTranslator.GetKey();
     
    454447
    455448                bruteforceKernel.SetArg(0, userKey);
    456 
    457                 int subbatches = keySearcherOpenCLSubbatchOptimizer.GetAmountOfSubbatches(keyTranslator);
    458                 GuiLogMessage(string.Format("Now using {0} subbatches", subbatches), NotificationLevel.Info);
    459 
    460                 int subbatchSize = keyTranslator.GetOpenCLBatchSize() / subbatches;
    461                 float[] costArray = new float[subbatchSize];
    462                 Mem costs = oclManager.Context.CreateBuffer(MemFlags.READ_WRITE, costArray.Length * 4);
    463449                bruteforceKernel.SetArg(1, costs);
    464450
    465                 IntPtr[] globalWorkSize = { (IntPtr)subbatchSize };
    466 
    467                 keySearcherOpenCLSubbatchOptimizer.BeginMeasurement();
    468 
    469                 for (int i = 0; i < subbatches; i++)
    470                 {
    471                     bruteforceKernel.SetArg(2, i * subbatchSize);
    472                     oclManager.CQ[deviceIndex].EnqueueNDRangeKernel(bruteforceKernel, 1, null, globalWorkSize, null);
    473                     oclManager.CQ[deviceIndex].EnqueueBarrier();
    474 
    475                     Event e;
    476                     fixed (float* costa = costArray)
    477                         oclManager.CQ[deviceIndex].EnqueueReadBuffer(costs, true, 0, costArray.Length * 4, new IntPtr((void*)costa), 0, null, out e);
    478 
    479                     e.Wait();
    480 
    481                     checkOpenCLResults(keyTranslator, costArray, sender, bytesToUse, i * subbatchSize);
    482 
    483                     doneKeysArray[threadid] += subbatchSize;
    484                     keycounterArray[threadid] += subbatchSize;
    485                     keysLeft[threadid] -= subbatchSize;
    486                 }
    487 
    488                 keySearcherOpenCLSubbatchOptimizer.EndMeasurement();
    489 
     451                oclManager.CQ[deviceIndex].EnqueueNDRangeKernel(bruteforceKernel, 1, null, globalWorkSize, null);
     452                oclManager.CQ[deviceIndex].EnqueueBarrier();
     453
     454                Event e;
     455                fixed (float* costa = costArray)
     456                    oclManager.CQ[deviceIndex].EnqueueReadBuffer(costs, true, 0, costArray.Length * 4, new IntPtr((void*)costa), 0, null, out e);
     457
     458                e.Wait();
    490459                costs.Dispose();
    491460            }
     
    497466            }
    498467
    499             return !keyTranslator.NextOpenCLBatch();
    500         }
    501 
    502         private void checkOpenCLResults(IKeyTranslator keyTranslator, float[] costArray, IControlEncryption sender, int bytesToUse, int add)
    503         {
     468            //Check results:
    504469            var op = this.costMaster.getRelationOperator();
    505470            for (int i = 0; i < costArray.Length; i++)
     
    509474                    || (op == RelationOperator.LessThen) && (cost < value_threshold))
    510475                {
    511                     ValueKey valueKey = new ValueKey { value = cost, key = keyTranslator.GetKeyRepresentation(i + add) };
     476                    ValueKey valueKey = new ValueKey {value = cost, key = keyTranslator.GetKeyRepresentation(i)};
    512477                    valueKey.keya = keyTranslator.GetKeyFromRepresentation(valueKey.key);
    513478                    valueKey.decryption = sender.Decrypt(this.encryptedData, valueKey.keya, InitVector, bytesToUse);
     
    515480                }
    516481            }
     482
     483            return !keyTranslator.NextOpenCLBatch();
    517484        }
    518485
     
    747714            while (!stop)
    748715            {
    749                 Thread.Sleep(2000);
     716                Thread.Sleep(1000);
    750717
    751718                updateToplist();
Note: See TracChangeset for help on using the changeset viewer.